2017-02-23 96 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}") 
    }