无需Gitlab插件:Jenkins安全访问Gitlab私有仓库的配置方法
没问题,这两种方案我都帮你理清楚,都是不依赖GitLab插件就能搞定的,亲测好用:
方案一:使用GitLab个人访问令牌(PAT)替代用户名/密码
这种方式比明文用户名密码安全得多,而且配置起来很简单:
- 生成GitLab PAT:登录你的GitLab账号,点击右上角头像 →
Settings→Access Tokens。填写令牌名称、有效期,然后勾选权限(只读仓库选read_repository,需要提交代码的话再加write_repository),最后点击Create personal access token,生成后一定要复制保存好——刷新页面就看不到了。 - 在Jenkins中配置凭据:进入Jenkins →
Manage Jenkins→Manage Credentials,选择合适的凭据域(比如全局域),点击Add Credentials。类型选Username with password,用户名可以随便填(比如gitlab-token),密码填刚才生成的PAT,给凭据设置一个好记的ID和描述,方便后续流水线调用。 - 修改流水线配置:如果是在Jenkins项目的Pipeline页面配置,直接把Git仓库的HTTPS URL填进去,然后在
Credentials下拉框选刚才创建的PAT凭据就行。要是用Jenkinsfile定义流水线,写法如下:
pipeline { agent any stages { stage('Checkout Code') { steps { git url: 'https://gitlab.com/your-username/your-private-repo.git', credentialsId: '你的PAT凭据ID', branch: 'main' } } } }
提示:GitLab验证PAT时会忽略用户名,所以随便填个标识性的名字就行。
方案二:使用SSH私钥实现安全访问
这种方式基于密钥对认证,比令牌更适合长期稳定的服务器访问:
- 在Jenkins服务器生成SSH密钥对:登录Jenkins服务器,切换到运行Jenkins的用户(比如
jenkins用户,不然会有权限问题),执行命令:
ssh-keygen -t ed25519 -C "jenkins@your-server-domain.com"
一路回车(不要设置密钥密码,否则后续需要额外配置ssh-agent插件,不符合你不用额外插件的需求),生成的私钥在~/.ssh/id_ed25519,公钥在~/.ssh/id_ed25519.pub。
- 将公钥添加到GitLab仓库:打开你的GitLab私有仓库,进入
Settings→Repository→Deploy keys,点击Add deploy key。粘贴公钥文件的内容,勾选Allow write access(如果需要往仓库提交代码的话),给密钥起个名字(比如Jenkins Server SSH Key),保存即可。 - 在Jenkins中配置SSH凭据:进入Jenkins →
Manage Jenkins→Manage Credentials,点击Add Credentials。类型选SSH Username with private key,用户名填git(GitLab的SSH访问默认用户名就是git),然后选择Enter directly,粘贴私钥文件(id_ed25519)的内容,设置凭据ID和描述。 - 修改流水线配置:把Git仓库URL改成SSH格式(比如
git@gitlab.com:your-username/your-private-repo.git),然后在Credentials下拉框选刚才创建的SSH凭据。Jenkinsfile写法示例:
pipeline { agent any stages { stage('Checkout Code') { steps { git url: 'git@gitlab.com:your-username/your-private-repo.git', credentialsId: '你的SSH凭据ID', branch: 'main' } } } }
注意:要确保Jenkins服务器能访问GitLab的22端口(SSH默认端口),如果服务器有防火墙,记得开放对应端口;另外要给
~/.ssh目录和密钥文件设置正确权限:chmod 700 ~/.ssh,chmod 600 ~/.ssh/id_ed25519,避免权限过高导致认证失败。
内容的提问来源于stack exchange,提问作者ace
相关产品推荐
相关产品推荐

