在Jenkins管道中签出一个标签

时间:2017-09-15 14:28:58

标签: git jenkins jenkins-pipeline

尝试使用

checkout scm: [$class: 'GitSCM', 
  userRemoteConfigs: [[url: '${repoURL}']], 
  branches: [[name: 'refs/tags/${tag-version}']]],poll: false

此操作因身份验证错误而失败。除了使用

之外还有什么办法吗?
  

withCredentials

在Jenkins文件中签出标签

6 个答案:

答案 0 :(得分:8)

花了几个小时后来到这里

在声明性管道中使用GitSCM的正确方法是

checkout scm: [$class: 'GitSCM', userRemoteConfigs: [[url: repoURL, credentialsId: credential]], branches: [[name: tag-version]]],poll: false

不像我在网络的大多数地方找到的那样

checkout scm: [$class: 'GitSCM', userRemoteConfigs: [[url: repoURL], [credentialsId: credential]], branches: [[name: tag-version]]],poll: false

答案 1 :(得分:1)

可能不相关,但变量表达式只用双引号字符串扩展,而不是单引号字符串。

答案 2 :(得分:0)

我希望它能像普通分支一样工作,你试过没有'refs / tags /'前缀吗?

答案 3 :(得分:0)

身份验证错误与标记无关 - 似乎有两个不同的问题。

您应该在credentialId部分添加userRemoteConfigs,因此:

checkout scm: [$class: 'GitSCM', userRemoteConfigs: [[url: '${repoURL}'], [credentialsId: '${credential}']], branches: [[name: '${tag-version}']]],poll: false

此外,您可以对变量使用以下格式:

checkout scm: [$class: 'GitSCM', userRemoteConfigs: [[url: repoURL], [credentialsId: credential]], branches: [[name: tag-version]]],poll: false

答案 4 :(得分:0)

我还必须引用凭证ID

stage('checkout') {
    steps {
        checkout([$class: 'GitSCM', branches: [[name: tagVersion]],
                  userRemoteConfigs: [[url: 'ssh://git@repo',
                                       credentialsId: 'my-user-id']]
                ])
        }
    }

通知

“ my-user-id”是您在凭据页面上找到的条目的ID。

但这不是不是,您在gui的下拉选择框中看到的标题。

答案 5 :(得分:0)

如果不希望弄乱密码学的语法,我一直在使用这种解决方案来切换到专用标记或分支,尤其是当它是一个作业参数并且不清楚给定值是分支还是分支时。标签:

git(
    credentialsId: '<your-cred-id>',
    url: "<your-repo-url>"
)
sh(script:"""
    git checkout \$(git rev-parse --verify ${GIVEN_BRANCH_OR_TAG})
""")

结果将处于分离头模式,但在大多数情况下,这都不是问题。