如何在github组织Jenkins工作流中检出ssh remote并在Jenkinsfile中使用ssh凭据

时间:2016-11-15 19:48:02

标签: git github jenkins jenkins-pipeline github-organizations

我在詹金斯有一个Github Organisation项目。在我的存储库的根目录中,我的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部分上失败,并出现以下错误:

  

致命:无法读取' https://github.com的用户名':没有此类设备或地址

来自上述git remote -v的{​​{1}}命令输出类似Jenkinsfile的内容。

我的origin https://github.com/MY_ORGANIZATION/MY_REPO git配置如下所示: repository-sources-github-organization-jenkins-config

我发现了一些相关的问题:

1 个答案:

答案 0 :(得分:10)

事实证明,Github Organization项目仅使用Scan credentials的https凭据(如上图所示)。

解决方案是点击Advanced按钮,并在ssh下拉列表中实际选择Checkout credentials凭据,而不是默认- Same as scan credentials -

advanced-view-checkout-credentials

请注意,带有星标的凭据是用户/密码条目,这就是我发现问题的方式。

这样,checkout scm将使用ssh而sshagent([jenkinsCredsId]) {块将按预期工作,让您根据自己的权限创建标记,获取和推送。 :)