GitLab
Connect a private GitLab repository to Valohai using SSH deploy keys
Connect your private GitLab repository to Valohai using SSH authentication. GitLab deploy keys provide secure, read-only access and can be reused across multiple projects.
Requirements
A private GitLab repository
A Valohai project
Maintainer access to the repository (to add deploy keys)
Overview
You'll complete three steps:
Generate an SSH key pair (in Valohai)
Add the public key to GitLab as a deploy key
Add the private key to Valohai
Step 1: Generate SSH Key Pair
The easiest way is to generate the key pair directly in Valohai.
In Valohai:
Open your project
Go to Settings → Repository
Click Generate SSH Key
Download or copy both keys:
valohai-public_xxx.pub(public key)valohai-private_xxx.pem(private key)
Keep these files handy—you'll need them in the next steps.
Alternative: Generate Locally
If you prefer, generate keys on your local machine:
ssh-keygen -t rsa -b 4096 -f valohai-deploy-keyThis creates:
valohai-deploy-key.pub– Public key for GitLabvalohai-deploy-key– Private key for Valohai
💡 Don't commit these keys to Git. Anyone with the private key can access your repository.
Step 2: Add Public Key to GitLab
Navigate to your repository's deploy keys settings:
Go to your GitLab repository
Click Settings → Repository → Deploy Keys

Can't see Deploy Keys? You may lack permissions. Contact your GitLab admin.
Configure the deploy key:
Title:
Valohai(or any descriptive name)Key: Paste the entire contents of the
.pubfileShould start with
ssh-rsa AAAA...
Grant write permissions to this key: Leave unchecked (Valohai only needs read access)
(Optional) Set an expiration date for the deploy key

Click Add key to save.
Step 3: Add Private Key to Valohai
Now connect the repository in Valohai.
Get your SSH repository URL from GitLab:
Go to your repository on GitLab
Click Clone → Clone with SSH
Copy the URL (format:
[email protected]:username/repository.git)
In Valohai:
Go to Settings → Repository
Paste the SSH URL into the URL field:
[email protected]:username/repository.gitPaste the entire contents of the private key file into SSH private key:
Should start with
-----BEGIN RSA PRIVATE KEY-----Include all lines, including the header and footer
Click Save

Valohai will immediately attempt to fetch your repository. If successful, you'll see your commits in the execution dialog.
Verify Connection
Test that everything works:
Go to Executions → Create Execution
The Commit dropdown should show your commits
If not, click Fetch Repository in settings
Keep Code Updated
After pushing new commits to GitLab, update Valohai:
Go to Settings → Repository
Click Fetch Repository
Automate with webhooks: Set up automatic fetching when you push to GitLab.
Accessing Without SSH Keys
If creating an SSH key isn't possible, you can use HTTPS with credentials:
Format:
git+https://USERNAME:[email protected]/username/repository.gitExample: If your repository is at gitlab.com/my-project.git, your username is datauser, and your access token is glpat-abc123, use:
git+https://datauser:[email protected]/my-project.gitUse a Project Access Token (Recommended)
Even better than a personal access token is a project access token:
Format:
git+https://:<PROJECT_TOKEN>@gitlab.com/username/repository.gitYou can leave the username part empty when using project tokens.
Create a project access token:
Go to your GitLab project
Click Settings → Access Tokens
Create a new token:
Token name:
ValohaiRole:
Reporter(read-only)Scopes: Check
read_repository
Copy the token (starts with
glpat-)
Use this token in the HTTPS URL instead of your password.
💡 SSH is still more secure. HTTPS with tokens is convenient but exposes credentials in URLs. Use SSH keys for production environments.
Share Deploy Keys Across Projects
GitLab allows deploy keys to be reused across multiple projects—useful if you're using Git submodules.
Enable a deploy key in another project:
Go to the second project
Navigate to Settings → Repository → Deploy keys
Open the Privately accessible deploy keys tab
Click Enable next to the key you want to reuse
Now the same SSH key works for both repositories.

Troubleshooting
"Permission denied (publickey)"
The public key wasn't added correctly to GitLab
Make sure you copied the entire
.pubfile contentsVerify the deploy key shows in GitLab's settings
"Repository not found"
Check the repository URL format (should be
[email protected]:...)Don't use HTTPS format for private repos with SSH
Ensure the deploy key is added to the correct repository
"Invalid private key format"
Make sure you pasted the private key, not the public key
Include the header (
-----BEGIN RSA PRIVATE KEY-----) and footerDon't add extra spaces or line breaks
"My commits don't appear"
Click Fetch Repository after pushing new commits
Check if you're on the correct branch
Use Manage Commits to unhide old commits
"Can't see Deploy Keys menu"
You need Maintainer or Owner permissions
Contact your GitLab admin to add the key for you
Security Best Practices
Use project access tokens instead of personal tokens
Project tokens are scoped to one repository
They don't expose your entire account
They're easier to rotate and revoke
Prefer deploy keys over HTTPS credentials
Deploy keys are more secure
They provide read-only access
They don't expose passwords or tokens in URLs
Rotate keys periodically
Generate new keys every 6-12 months
Delete old deploy keys from GitLab
Use the Reporter role for tokens
Don't grant more permissions than needed
read_repositoryscope is sufficient
Next Steps
Use .vhignore to exclude large files
Manage Commits to organize visible commits
Git Submodules for accessing multiple repos
Last updated
Was this helpful?
