2017-04-25 22 views
5

我希望能这样说:詹金斯管道:结帐明确git的承诺

git branch: commitHash, credentialsId: credentialsId, url: url 

的用例:我在做并行构建和测试运行在不同的平台,并希望确保每个得到相同的代码。它是C++,我们建立在不同的平台上,并且建立在它们之上。

如果我做上面的,它失败 - 底层代码假设给定的分支实际上是一个分支,或者你喜欢的东西:在这个问题上

[Linux64 Build] > git rev-parse origin/e4b6c976a0a986c348a211579f1e8fd32cf29567^{commit} # timeout=10 
[Pipeline] [Linux64 Build] } 
[Pipeline] [Linux64 Build] // dir 
[Pipeline] [Linux64 Build] } 
[Pipeline] [Linux64 Build] // node 
[Pipeline] [Linux64 Build] } 
[Linux64 Build] Failed in branch Linux64 Build 

我已经看到了变化之前问,虽然没有真正的答案 - 只是建议喜欢隐藏源代码等,而不是真正的我以后。

该文档表明应该可以给出明确的提交散列,可能使用分支代替,但我不能找出语法并找不到任何示例。当我这样做时,我认为主分支 - 在我们的设置中,主分区不起作用。

到目前为止,我已经找到了唯一的解决办法已经签出分支,然后显式调用混帐得到承诺:

   git branch: branch, credentialsId: credentialsId, url: url 
       sh 'git checkout ' + commitHash 

(其中分公司是我最初得到的哈希在分支这项工作的顶端。它的工作原理,但不是最巧妙的。

任何人有更好的办法?

+0

见在2017年7月12日和2017年7月13日评论[JENKINS-31826(https://issues.jenkins-ci.org/browse/JENKINS-31826) –

回答

7

使用general scm一步

checkout([$class: 'GitSCM', branches: [[name: commitHash ]], 
    userRemoteConfigs: [[url: 'http://git-server/user/repository.git']]]) 
+0

你碰巧知道如何添加credentialsId位? – johnfo

+0

我依靠詹金斯用户的ssh密钥 –

+1

我想我设法解决了这个问题 - 至少我注意到这里有一个片段“编辑器”。它会是这样的: 结帐([$ class:'GitSCM',branches:[[name:commitHash]], userRemoteConfigs:[[credentialsId:credentialsId,url:'http:// git-server/user/repository.git']]]) – johnfo

2

当jenkins由于初始结账而缺少工作空间时,尤里G的例子并不适用于我。在这种情况下,以下工作。我不明白他们为什么会有所不同。

def commitId = "<insert sha here>" 

    checkout ([$class: 'GitSCM', 
     branches: [[name: commitId ]], 
     userRemoteConfigs: [[ 
      credentialsId: 'deploy key for your repo', 
      url: 'repo url']]]) 
+0

我一直在使用: steps.checkout([$ class:'GitSCM',branches:[[name:hash]], userRemoteConfigs:[[url:url,credentialsId:'key of凭据']]]) – johnfo

+0

这与我所得到的差不多。我只是分开线条并使用不同的顺序。订单应该不重要 –

+0

我们和Yuri的区别在于债权证 - 可能就是这样。公共回购vs私人。傻我 –