CICD工具 - Jenkins入門
因為實習的關係需要做一些Survey
所以也把自己做的這些學習過程紀錄一下
Jenkins介紹
Jenkins是一個持續整合(Continuous Integration, CI)的Web-base伺服器。
自動化工具將個模組的程式碼從版本控制伺服器上下載下來,若程式碼有所變動便進行程式碼編譯並測試
Jenkins由Java開發,需要Java Runtime Environment (JRE)才能執行(JDK也可),可以利用GUI或是CLI安裝。
另外因為是一開始學習所用,還沒辦法做到CD的部分
Jenkins架構圖
實踐步驟
安裝Jenkins
JDK: https://www.java.com/zh-TW/download/
Jenkins直接至官網下載安裝即可:https://www.jenkins.io/zh/
Jenkins安裝完成後會需要安裝Plugin,選Suggested的就好
另外會需要輸入初始密碼(Jenkins會告訴我們初始密碼的位置),以及創建初始管理者。
打開瀏覽器進入http://localhost:8080
Free-Style 類型的專案提供了非常大的彈性讓使用者來做原始碼管理以及建置。如果建置的流程涉及到多個專案,則可以透過 Pipeline 類型的專案來組合及定義建置邏輯。
Free-Style Demo
建立專案
新增作業 - 輸入專案名稱 - 選擇Free-Style
建置 - 新增建置步驟 - 執行windows批次指令 - 輸入echo “hello” - 儲存
使用Windows系統是執行批次指令,Unix或Mac是Shell完成後選擇馬上建置 - 在下方的建置歷程就可以看到剛剛的建置log
原始碼管理與建置觸發程序
透過原始碼管理 (source code management, SCM)系統,例如GitHub來獲得專案的原始碼,並設置建置觸發程序 (build triggers)來實踐持續整合。
- 把git上的專案URL使用HTTPS的方式加入到組態中,須注意若為Private的專案需要在Credentials中加入git的帳號密碼(Add-jenkins-enter username&password)
- 建置觸發條件:若是未設置建置條件,通常都需管理者手動進行Jenkins的建置,而一般常見的觸發條件有兩種:
- 定期建置
使用Cron Format的方式去訂時間自動進行實踐整合,格式為MINUTE HOUR DOM MONTH DOW(使用TAB隔開),更詳細的規則可以在Help裡看到 - GitHub hook trigger for GITScm polling
讓Jenkins自動監控在原始碼專案是否有任何push event 發生,若有事件發生則自動進行建置。 - 新增GitHub personal access token
Github - Settings - Developer settings - Personal access tokens - Generate new token - 輸入token的描述並勾選repo scope - Generate token - 將獲得的Token加入到組態中原本Repository URL的地方
由https://github.com/jam68ty/jenkins\_test.git 變為
https://{token}@github.com/jam68ty/jenkins_test.git(這步驟可忽略,因為只有些教學有,有沒有改暫時不影響) - 勾選建置觸發程序中的GitHub hook trigger for GITScm polling
- 在GitHub上整合Jenkins 這步在每次ngrok關掉後都需要重做
- 需要先獲得暫時的domain name,可以參考這篇文章,注意Jenkins的port是8080,所以要下的指令是ngrok http 8080
- 需要先獲得暫時的domain name,可以參考這篇文章,注意Jenkins的port是8080,所以要下的指令是ngrok http 8080
Windows系統只需要在安裝完ngrok後執行執行檔即可,但是Mac需要將執行檔移到專案目錄下並執行shell才可以
- 在Github專案下的Setting - Webhooks - Add webhook - Payload URL用剛剛透過ngrok取得的URL(https://24ce68bbcccb.ngrok.io/github-webhook/)
- 再次Git push,如果有成功的話在Github Hook Log可以看到監控的結果,旁邊的歷程紀錄也會有
Git 語法
新增檔案:git add .
Commit此次版本:git commit -m “test1”
推送至Github上:git push
過程中踩的坑
- webhook的網址一定要加最後一個斜線
- token要記得,他只會顯示一次
- 在組態設定中的Git部分,分支要設成空白(因為我Github上專案是main不是master,但jenkins預設是master)
- 在整個jenkins之下的管理jenkins-設定系統-Github Servers中新增一個Server,只需輸入name與credentials。Credentials的Kind選Secret text,secret的部分則輸入Token。(有些教學有做這步有些沒有,具體的差異不太清楚,跟前面要把Token加入到組態中原本Repository URL一樣)
- Mac安裝Jenkins要記得把安裝頁面上的指令執行完(安裝後還需要啟動)
References
https://www.jenkins.io/zh/doc/pipeline/tour/getting-started/
https://tso-liang-wu.gitbook.io/learn-ansible-and-jenkins-in-30-days/jenkins/jenkins/jenkins-pipeline