2017-02-23 94 views
1

jenkins 2.0管道脚本中存在与git中包含的区域有关的开放式错误,因此这意味着对于大型mono-repo,在我的情况下,每次检查master都会导致多个管道将被踢出,这不是理想的行为。 所以可视化:在管道中执行git fetch 2.0 groovy脚本

顶级:
- >应用程序文件夹1
- >应用程序文件夹2

我想要做的就是做一个git获取第一这样的话,我可以做一个混帐diff来查看是否在特定的文件夹内容发生了变化,如果它已经然后运行管道该特定文件夹,如果没有什么变化

代码我没有做任何事情,低于:

node{ 
git credentialsId: 'cred id', url: 'ssh://[email protected]:1234/app/mono-repo.git' 
ret = sh(script: 'git fetch; git diff origin/master remotes/origin/master | grep "folder-name"', returnStatus: true) 
    if(ret == 0){ 
     doSomething() 
    }else{ 
     doNothing() 
    } 
} 

我有git获取失败的问题,由于权限错误,我可以使用结帐,但然后我不能得到差异之前,这不是什么。有没有使用凭证来使用git fetch的方法?

回答

-2

确保您使用的是正确用户的SSH凭据。您可以检查this answer,这是由以下捕获总结:

Defining SSH credentials for Jenkins

特别是确保在url 的[email protected]部分是实际的SSH用户。在我的情况下,它是jenkins用户,所以我会使用ssh://[email protected]:1234/app/mono-repo.git来代替。

1

它可能有助于简单地获取对标签的引用。请注意,我相信这不等同于git fetch --tags。例如,请参阅Does "git fetch --tags" include "git fetch"?

git([branches: [ 
     [name: '*/master'], 
     [name: 'refs/tags/*:refs/tags/*']], 
    credentialsId: CREDENTIALS_ID_GIT, 
    url: REPO]) 

我注意到,詹的控制台上的Git的插件进行git fetch --tags,所以默认Git的插件可能已经提供此功能。请检查这一点。

我想也加入这个解决方案:

withCredentials(
    [usernamePassword(
     credentialsId: CREDENTIALS_ID_GIT, 
     passwordVariable: 'GIT_PASSWORD', 
     usernameVariable: 'GIT_USERNAME')]) { 
     sh("git fetch --tags https://${GIT_USERNAME}:${GIT_PASSWORD}@${REPO}") 
    }