2016-11-15 59 views
7

我在jenkins中有Github Organisation项目。在我的版本库的根,我的Jenkinsfile看起来是这样的:如何结帐github组织中的ssh remote Jenkins工作流程并在Jenkinsfile中使用ssh凭证

node { 

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

    stage 'Checkout' 
    checkout scm 
    // I also tried the following: 
    // checkout scm: [$class: 'GitSCM', source: 'ssh://[email protected]: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

上述Jenkinsfilegit remote -v命令输出类似origin https://github.com/MY_ORGANIZATION/MY_REPO的东西。

Github Organization git的配置看起来是这样的: repository-sources-github-organization-jenkins-config

我发现了几个相关问题:

回答

8

事实证明,在Github Organization项只使用https凭证f或Scan credentials(如上图所示)。

解决方法是按Advanced按钮,然后在Checkout credentials下拉列表中选择ssh凭证,而不是默认的- Same as scan credentials -

advanced-view-checkout-credentials

注意星星凭据是用户名/密码的条目,这就是我发现了这个问题。

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