我正在使用Jenkins的宣告式管道,從一個遠程repo進行構建。為了做到這一點,我有一個 "更新 "階段,它看起來像這樣:
_RUN_STAGE.ps1是一個通過MSYS2控制臺呼叫.sh腳本的腳本,所以它的內容并不重要。它呼叫的第一個腳本是_UPDATE_ALL.sh,它看起來像這樣: 在運行'git stash'之后,Jenkins的構建會掛起。我知道這一點,因為這是輸出日志:
'No local changes to save'是從'git stash'回傳的,在我看來,這意味著是'git pull'掛起了構建。為什么呢?
此外,手動運行 _UPDATE_ALL.sh 腳本的效果與預期完全一致,只有當我通過 Jenkins 運行它時才會掛起。
uj5u.com熱心網友回復: 這個作業是否啟用了GitLFSPull擴展?當GitLFSPull擴展被啟用時,git簽出應該不需要認證,因為必要的大檔案已經在本地可用。smudge過濾器的早期實作很慢,所以git插件選擇直接呼叫git lfs pull。如果作業日志中沒有對git lfs pull的呼叫,那么這可能表明有其他問題。
uj5u.com熱心網友回復: 我能夠規避這個問題,不是在通過Jenkins呼叫的.sh腳本中發布我的git命令,而是直接在Jenkins檔案中用 "powerhell "git stash "等呼叫它們,就像這樣: 雖然這解決了我的問題,但它沒有提供一個解釋,為什么'git pull'在從腳本中呼叫時會掛起構建。歡迎任何見解!
標籤: 上一篇:在表中找到所有的父或子
stage('Update')
stage('Update') {
步驟 {
echo '開始更新...'
dir ('C:/Program Files (x86)/Jenkins/workspace/Bootloader/_RELEASE_SCRIPTS' ) {
powershell './_RUN_STAGE.ps1 -stage 0' 。
}
echo 'Done!
}
}
echo $(git stash)
echo $(git pull)
echo $(git submodule update --force --init --recursive)
echo $(git fetch --all)
echo $(git tag -l | xargs git tag -d)
echo $(git fetch --tags)
在耐久性級別中運行。max_survivability
[Pipeline] Pipeline的開始
[管道] 節點
在C:Program Files (x86)JenkinsworkspaceBootloader中運行。
[流水線] {
[管道]階段
[管道] { (更新)
[管線] echo
開始更新...
[管道] dir
在C:/Program Files (x86)/Jenkins/workspace/Bootloader/_RELEASE_SCRIPTS中運行。
[流水線] {
[管道] powershell
階段:UPDATE。
沒有要保存的本地更改
stage('Update') {
步驟 {
echo '開始更新...'
powershell 'git stash'
powershell 'git pull origin master'
powershell 'git submodule update --force --init --recursive'
powershell 'git fetch --all'.
powershell 'git tag -l | %{git tag -d $_}' 。
powershell 'git fetch --tags'.
echo 'Done!
}
}
