iT邦幫忙

2022 iThome 鐵人賽

DAY 17
1
DevOps

從零開始的 Jenkins 之旅系列 第 17

第十七天 Jenkins 之旅:CI / CD Pipeline (2)

  • 分享至 

  • xImage
  •  

Refactor Pipeline

workspace 的 house keeping

在 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

container registry 的權限管理

可以在 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


上一篇
第十六天 Jenkins 之旅:CI / CD Pipeline (1)
下一篇
第十八天 Jenkins 之旅:Multibranch Pipeline
系列文
從零開始的 Jenkins 之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言