昨天我們介紹了 Jenkins 的基本知識,今天我們就來開始搭建 Jenkins:
昨天有提到,Jnekins 能夠以 war 和 Container 的方式搭建,為了讓讀者較好理解 Jenkins workspace 的關係,測試就使用二近制的方式下載 Jenkins 並安裝在 DevOps 機上面。
Jenkins 的執行需要仰賴 JDK,而後續我們的後端的打包也需要 Maven 的安裝:
#更新 apt
sudo apt update -y
#安裝 java 11
sudo apt install openjdk-11-jdk -y
#安裝 maven
sudo apt update
sudo apt install maven
mvn -version
接著安裝 Jenkins
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get install jenkins -y
一般來說,由 Apache tomcat 所開發的項目預設會使用 8080 port,這裡我們就將它改為 9002 port。
#前往配置檔案資料夾
/usr/lib/systemd/system
#修改 port
sudo vim jenkins.service
# Port to listen on for HTTP requests. Set to -1 to disable.
# To be able to listen on privileged ports (port numbers less than 1024),
# add the CAP_NET_BIND_SERVICE capability to the AmbientCapabilities
# directive below.
Environment="JENKINS_PORT=9002"
完成後,要開放 9002 port,並且重啟 systmctl。
sudo sudo ufw allow 9002
sudo systemctl daemon-reload
sudo service jenkins restart
完成後,即可在 192.168.1.120:9002
訪問 Jenkins,首次訪問的時候,需要輸入 initialAdminPassword
,只需在 DevOps 機用 cat 指令印出後複製即可。
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
進入後可以選擇左側的推薦安裝 pligin,等待完成後首次創建 admin 帳戶,就能夠進入 Jenkins 主頁面了!
當我們建構好了 Jenkins 服務,當然不會一直使用 admin 帳號去完成所有的事情,因此,我們需要在 Jenkins 內創建一個使用者帳號。
點選側欄的
管理 Jenkins
=> Security 下的管理使用者
=> 側欄的+ 建立使用者
完成後,系統會預設能夠登入的用戶享有所有的權限,因此我們需要下載能夠管理使用者與權限的 Plugin,Role-based Authorization Strategy
。
在創建 Harbor 的時候有提到 RBAC,能夠設定角色權限,並指派給成員。
我們到 管理 Jenkins
=> 外掛總管
中輸入 Role-based Authorization Strategy
,並點選安裝後不啟動。
接著我們到 管理 Jenkins
=> 設定全域安全性
=> 授權
下選取 Role-based Strategy
並儲存,即可以在 管理 Jenkins
的 Security
下看到 Manage and Assign Roles
進入後選擇 Manage Roles,在 Role to add 內新增一個 Developer 角色並按下 add,此時就可以對 Developer 這個角色給予再 Jenkins 上的權限,這裡我先將 Developer 也設定為 Administer,具體的角色權限可以依照需求設定。
完成後,我們可以點選 Assign Roles 將剛剛創建的 user 加入 Developer 角色中。之後,我們都可以使用剛才創建的成員帳號來進行操作。
昨天我們有簡單的介紹了 Pipeline 的定義與內容,那麼今天,我們先製作一個簡單的 Pipeline 作業,並說明其運作的原理。
我們先改換成非 admin 的帳號進入,並點選側欄的 + 新增作業
,這裡我們選擇建立 Pipeline 作業。
在 Jenkins 2.0 起正式推展 Pipeline,昨天說 Pipeline 是程式碼到部署會經過的每個步驟的集合,也因此,Jenkins 能夠以程式碼腳本的形式,將 Pipeline 的流程寫在檔案內,而這個檔案固定被叫做 Jenkinsfile。
既然是文字檔,也就能夠受到 Git 的版本管理,能夠讓我們在每個版本中逐次的更新並留下紀錄,以上的模式則被稱為** Pipeline as Code**。所以昨天除了前後端以外,我也另外創建了一個放置 Jenkinsfile 的 Repository,名為 cct-devops。
Jenkinsfile 具有聲明式 (Declarative) 與腳本式 (Scripted) 兩種寫法,目前主流是使用聲明式撰寫。
完成創建後,我們預設會進入 color-code-tag 這個項目的配置內,在下方的 Pipleine 選項,提供了 Pipeline script 與 Pipeline script SCM (Source Code Management) 兩個選擇,第一個能讓我們直接將 Jenkinsfile 內容撰寫在上面並執行,第二個則會登入到 Gitlab Repository 內獲取 Jenkinsfile 的內容來執行。
一般而言,在初期建立與測試的時候會先選用第一種,等後面成熟後再改為第二種。這裡我們就直接在 Script 的 Textarea 下輸入腳本:
pipeline {
agent any
stages {
stage('Check JavaCode From Gitlab') {
steps {
echo '拉取原始碼'
}
}
stage('編譯成 Jar 檔') {
steps {
echo '測試編譯與打包'
}
}
stage('打包成 Image') {
steps {
echo '打包 Image'
}
}
}
}
我們一起來解釋一下 Jenkins & Jenkinsfile 的術語內容:
輸入完後後我們點選儲存,便會來到 color-code-tag 項目的主頁面,這裡直接點選左側的 馬上建置
,則會看到左下角的綠圈開始跑,也代表我們的 Pipeline 腳本開始執行了,完成後,會看到剛才執行的 Stage View,也就是執行的結果。
另外我印象中首次構建必須手動觸發一次,之後才能觸發自動構建。
另外我們也能點選左下角的綠圈進入那一個 Build 查看 Console 的輸出:
能夠看到,我們在每個 steps 內下了 echo 輸出指令,這時我們也能夠在 steps 內下 sh 指令:
stage('打包成 Image') {
steps {
echo '打包 Image'
sh 'java -version'
sh 'mvn -v'
}
}
更改後再建置一次 Build,就可以在 console 內看到 java 和 maven 的版本被成功輸出了。
Jenkins 利用 Jenkinsfile 撰寫 Pipeline,並執行內部定義的步驟
Jenkins Plugin 提供大量的功能(也有使用風險)
今天,我們一起搭建了 Jenkins 的服務,並且建立的一個使用者及配置權限,最後完成了 color-code-tag 第一個 pipeline 的執行;明天,我們開始實踐 Pipeline 內的每一個步驟,讓這些流程走向自動化。
終於熬到雙十連假了,祝大家周末愉快,然後文章也可以加減看~