在 Jenkins 每次 Job 執行,預設並不會清理 worksapce 下的任何檔案(${JENKINS_HOME}/workspace/${JOB_NAME}
)但是因為我們會需要 clone 專案,如果專案已存在的話會報錯
fatal: destination path 'jenkins-ithome' already exists and is not an empty directory.
這邊有兩個辦法可以解決
第一個如下,稍微比較土炮一點,但是有效。我們可以保證 workspace 必定會被清空。
post{
always{
steps{
sh "rm -rf ${WORKSPACE}/*"
}
}
}
第二個,引入 Jenkins 的 Plugin - Workspace Cleanup
post{
always{
cleanWs()
}
}
[WS-CLEANUP] Deleting project workspace...
[WS-CLEANUP] Deferred wipeout is used...
[WS-CLEANUP] done
可以在 Pipeline 一開始時,新增 setup 的 stage ,並在其登入我們希望的 registry user/ token
stage("Setup registry auth"){
steps{
sh "docker login docker.pkg.github.com -u docker-user -p docker-token"
}
}
為了更近一步管理我們的權限,所以在這邊我們將 registry 的 user / token 以 credential 管理
stage("Setup registry auth"){
steps{
withCredentials([usernamePassword(credentialsId: 'github-registry-secret', usernameVariable: 'USER', passwordVariable: 'TOKEN')]){
script{
sh "docker login docker.pkg.github.com -u ${USER} -p ${TOKEN}"
}
}
}
}
為了保證每次的測試之間不會互相干擾,在當進行 pip install
的時候,我們應該極力避免修改到系統的 module 數量及版本,故可以在 Pipeline 執行前新增一個 pyenv setup 的 stage
stage("Setup virtual env"){
steps{
sh '''#!/bin/bash
virtualenv venv
source venv/bin/activate
pip install -r requirements.txt
pip install pylint
'''
}
}
這邊需要特別注意,Jenkins 是使用 dash 來去做 unix command 的執行,但是 dash 並不認得
source
,所以在執行時,需要在一開始加上#!/bin/bash
,強制使用 bash 去做執行。
今天我們已經除掉昨天提到需要修改的項目中的前三個,至於做後一個 Git Branch
我想花明天一整個的篇幅來去介紹。
https://stackoverflow.com/questions/37468455/jenkins-pipeline-wipe-out-workspace