因為實習的關係需要做一些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

建立專案

  1. 新增作業 - 輸入專案名稱 - 選擇Free-Style

  2. 建置 - 新增建置步驟 - 執行windows批次指令 - 輸入echo “hello” - 儲存
    使用Windows系統是執行批次指令,Unix或Mac是Shell

  3. 完成後選擇馬上建置 - 在下方的建置歷程就可以看到剛剛的建置log

原始碼管理與建置觸發程序

透過原始碼管理 (source code management, SCM)系統,例如GitHub來獲得專案的原始碼,並設置建置觸發程序 (build triggers)來實踐持續整合。

  1. 把git上的專案URL使用HTTPS的方式加入到組態中,須注意若為Private的專案需要在Credentials中加入git的帳號密碼(Add-jenkins-enter username&password)
  2. 建置觸發條件:若是未設置建置條件,通常都需管理者手動進行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

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

過程中踩的坑

  1. webhook的網址一定要加最後一個斜線
  2. token要記得,他只會顯示一次
  3. 在組態設定中的Git部分,分支要設成空白(因為我Github上專案是main不是master,但jenkins預設是master)
  4. 在整個jenkins之下的管理jenkins-設定系統-Github Servers中新增一個Server,只需輸入name與credentials。Credentials的Kind選Secret text,secret的部分則輸入Token。(有些教學有做這步有些沒有,具體的差異不太清楚,跟前面要把Token加入到組態中原本Repository URL一樣)
  5. 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