我一直在学习这个教程:
node {
git url: 'https://github.com/joe_user/simple-maven-project-with-tests.git'
...
}
但是,它没有说明如何添加凭据。Jenkins确实有特定的"凭证"部分,您可以在其中定义用户user&传递,然后获取用于作业的ID,但如何在管道指令中使用该ID?
我尝试过:
git([url: 'git@bitbucket.org:company/repo.git', branch: 'master', credentialsId: '12345-1234-4696-af25-123455'])
运气不佳:
stderr: Host key verification failed.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
有没有办法在管道中配置cred,或者我必须将SSH密钥放在Jenkin的Linux用户的.SSH/authorized_keys文件中?
在理想的情况下,我希望有一个管道作业和回购密钥的存储库,然后启动Docker Jenkins,并在那里动态添加这些作业和密钥,而无需在Jenkins控制台中配置任何内容。
您可以在管道中使用以下内容:
git branch: 'master',
credentialsId: '12345-1234-4696-af25-123455',
url: 'ssh://git@bitbucket.org:company/repo.git'
如果您使用的是ssh-url,那么您的凭据必须是用户名+私钥。如果您使用https克隆url而不是ssh,那么您的凭据应该是username+password。
使用特定凭据显式签出
stage('Checkout external proj') {
steps {
git branch: 'my_specific_branch',
credentialsId: 'my_cred_id',
url: 'git@test.com/proj/test_proj.git'
sh "ls -lat"
}
}
根据当前Jenkins Job 中配置的凭据进行结账
stage('Checkout code') {
steps {
checkout scm
}
}
您可以在一个Jenkins文件中使用这两个阶段。
为您添加一个使用git插件GitSCM:的快速示例
checkout([
$class: 'GitSCM',
branches: [[name: '*/master']],
doGenerateSubmoduleConfigurations: false,
extensions: [[$class: 'CleanCheckout']],
submoduleCfg: [],
userRemoteConfigs: [[credentialsId: '<gitCredentials>', url: '<gitRepoURL>']]
])
在你的管道
stage('checkout'){
steps{
script{
checkout
}
}
}
如果您想使用ssh凭据,
git(
url: 'git@github.com<repo_name>.git',
credentialsId: 'xpc',
branch: "${branch}"
)
如果你想使用用户名和密码凭据,你需要使用http-clone,就像@Serban提到的那样。
git(
url: 'https://github.com/<repo_name>.git',
credentialsId: 'xpc',
branch: "${branch}"
)
对于值得添加到讨论中的内容。。。我所做的最终帮助了我…因为管道是在docker映像的工作区内运行的,每次运行时都会清理它。我获取了对管道中的repo执行必要操作所需的凭据,并将它们存储在.netrc文件中。这使我能够成功地授权git回购操作。
withCredentials([usernamePassword(credentialsId: '<credentials-id>', passwordVariable: 'GIT_PASSWORD', usernameVariable: 'GIT_USERNAME')]) {
sh '''
printf "machine github.comnlogin $GIT_USERNAMEn password $GIT_PASSWORD" >> ~/.netrc
// continue script as necessary working with git repo...
'''
}
它为我解决了使用
checkout scm: ([
$class: 'GitSCM',
userRemoteConfigs: [[credentialsId: '******',url: ${project_url}]],
branches: [[name: 'refs/tags/${project_tag}']]
])