如何在 GitHub 组织的 Jenkins 工作流中检出 SSH 远程仓库并在 Jenkinsfile 中使用 SSH 凭据

8

我在jenkins中有一个Github组织项目。在我的代码库根目录下,我的Jenkinsfile看起来像这样:

node {

  def jenkinsCredsId = 'xxxxxxxx-yyyy-zzzz-aaaa-bbbbbbbbbbbb'

  stage 'Checkout'
  checkout scm
  // I also tried the following:
  // checkout scm: [$class: 'GitSCM', source: 'ssh://git@github.com:MY_ORGANISATION/jenkins-testing-temp.git', clean: true, credentialsId: jenkinsCredsId]

  stage 'Build'
  // generate some artefact (dist.zip)

  stage 'Release'

  sshagent([jenkinsCredsId]) {
    sh '''
    git remote -v // show remotes
    ssh-add -l // show currently loaded ssh keys fingerprints

    git fetch --all --tags // IT FAILS HERE

    CURRENT_BUILD_TAG="some_build/${BUILD_NUMBER}"
    git tag ${CURRENT_BUILD_TAG}

    git push --tags

    github-release release \
    --security-token ${GITHUB_RELEASE_TOKEN} \
    --user MY_ORGANIZATION \
    --repo MY_REPO \
    --tag ${CURRENT_BUILD_TAG} \
    --name ${CURRENT_BUILD_TAG}

    github-release upload \
    --security-token ${GITHUB_RELEASE_TOKEN} \
    --user MY_ORGANIZATION \
    --repo MY_REPO \
    --tag ${CURRENT_BUILD_TAG} \
    --name ${CURRENT_BUILD_TAG} \
    --file dist.zip
    '''
  }

这里有几行代码用于测试仓库访问,但 git fetch 部分出现错误,错误信息如下:

fatal: could not read Username for 'https://github.com': No such device or address

从上面的 Jenkinsfile 中运行 git remote -v 命令会输出类似于 origin https://github.com/MY_ORGANIZATION/MY_REPO 的内容。
我的 Github 组织 git 配置如下: repository-sources-github-organization-jenkins-config 我找到了一些相关的问题:
1个回答

12

事实证明,在Github组织条目中,只针对扫描凭据使用https凭据(如上图所示)。

解决方法是点击高级按钮,并在检出凭据下拉菜单中选择ssh凭据,而不是默认的-与扫描凭据相同-

advanced-view-checkout-credentials

请注意,带星号的凭据是用户/密码条目,这就是我发现问题的原因。

这样,checkout scm将会使用ssh,sshagent([jenkinsCredsId]) {块也将按预期工作,可以根据您的权限创建标签、获取和推送代码。 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接