检查詹金斯管道 Git 单片机与凭证?

我在跟踪 本教程:

node {
git url: 'https://github.com/joe_user/simple-maven-project-with-tests.git'
...
}

但是它没有说明如何添加凭据。Jenkins 确实有一个特定的“凭据”部分,您可以在其中定义用户 user & pass,然后获得用于作业的 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.

有没有办法在管道中配置证书,或者我必须把 SSH 密钥放到 Jenkin 的 Linux 用户的。Ssh/authored_ keys 文件?

在理想的情况下,我希望有一个管道作业和回购密钥的存储库,然后启动 Docker Jenkins,并在那里动态添加这些作业和密钥,而不必在 Jenkins Console 中配置任何东西。

391174 次浏览

您可以在管道中使用以下内容:

git branch: 'master',
credentialsId: '12345-1234-4696-af25-123455',
url: 'ssh://git@bitbucket.org:company/repo.git'

如果您使用 sshurl,那么您的凭据必须是用户名 + 私钥。如果您使用 https 克隆 URL 而不是 ssh URL,那么您的凭据应该是用户名 + 密码。

如果您想使用 ssh 凭据,

  git(
url: 'git@github.com<repo_name>.git',
credentialsId: 'xpc',
branch: "${branch}"
)

如果您想使用用户名和密码凭证,您需要使用@Serban 提到的 http 克隆。

    git(
url: 'https://github.com/<repo_name>.git',
credentialsId: 'xpc',
branch: "${branch}"
)

使用特定凭据显式签出

    stage('Checkout external proj') {
steps {
git branch: 'my_specific_branch',
credentialsId: 'my_cred_id',
url: 'ssh://git@test.com/proj/test_proj.git'


sh "ls -lat"
}
}

根据当前 Jenkins 作业中配置的凭据签出

    stage('Checkout code') {
steps {
checkout scm
}
}

您可以在一个 Jenkins 文件中使用这两个阶段。

值得加入讨论的是... ... 我所做的最终帮助了我... ... 因为管道是在一个工作区内运行的,每次运行时都会清理干净。我获取了对管道中的回购执行必要操作所需的凭据,并将它们存储在。Netrc 文件。这使我能够成功地授权 git 回购操作。

withCredentials([usernamePassword(credentialsId: '<credentials-id>', passwordVariable: 'GIT_PASSWORD', usernameVariable: 'GIT_USERNAME')]) {
sh '''
printf "machine github.com\nlogin $GIT_USERNAME\n password $GIT_PASSWORD" >> ~/.netrc
// continue script as necessary working with git repo...
'''
}

为您添加一个使用 git 插件 GitSCM的快速示例:

    checkout([
$class: 'GitSCM',
branches: [[name: '*/master']],
doGenerateSubmoduleConfigurations: false,
extensions: [[$class: 'CleanCheckout']],
submoduleCfg: [],
userRemoteConfigs: [[credentialsId: '<gitCredentials>', url: '<gitRepoURL>']]
])

在你的管道里

stage('checkout'){
steps{
script{
checkout
}
}
}

它为我解决了使用

checkout scm: ([
$class: 'GitSCM',
userRemoteConfigs: [[credentialsId: '******',url: ${project_url}]],
branches: [[name: 'refs/tags/${project_tag}']]
])