2018年8月23日 星期四

Jenkins 開源的持續整合工具

Jenkins

op 231620h7QSPm_GBAETOF.jpg
Jenkins是一款由Java編寫的開源的持續整合工具。在與Oracle發生爭執後,專案從Hudson專案復刻。
Jenkins提供了軟體開發的持續整合服務。它執行在Servlet容器中(例如Apache Tomcat)。它支援軟體配置管理(SCM)工具(包括AccuRev SCM、CVS、Subversion、Git、Perforce、Clearcase和RTC),可以執行基於Apache Ant和Apache Maven的專案,以及任意的Shell指令碼和Windows批次處理命令。Jenkins的主要開發者是川口耕介。[3]Jenkins是在MIT許可證下發布的自由軟體。[4]
可以通過各種手段觸發構建。例如提交給版本控制系統時被觸發,也可以通過類似Cron的機制排程,也可以在其他的構建已經完成時,還可以通過一個特定的URL進行請求。


安裝Jenkins in Centos 7

安裝 Java

yum install java

安裝 Jenkins

sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
sudo yum install jenkins

啟動 Jenkins

systemctl restart jenkins
systemctl enable jenkins

設定防火牆

firewall-cmd --permanent --new-service=jenkins
firewall-cmd --permanent --service=jenkins --set-short="Jenkins Service Ports"
firewall-cmd --permanent --service=jenkins --set-description="Jenkins service firewalld port exceptions"
firewall-cmd --permanent --service=jenkins --add-port=8080/tcp
firewall-cmd --permanent --add-service=jenkins
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --reload
查看防火牆設定
firewall-cmd --list-all

第一次登入

輸入驗證碼
op 螢幕快照 2018-08-21 下午2.31.58.png
cat /var/lib/jenkins/secrets/initialAdminPassword
安裝插件
op 螢幕快照 2018-08-21 下午2.28.34.png

GCP 部署

到 Marketplace,輸入 jenkins
op 螢幕快照 2018-08-21 下午4.59.46.png
挑選 類型是 虛擬機,檢查價格,參數
op 螢幕快照 2018-08-21 下午5.00.09.png
部署
op 螢幕快照 2018-08-21 下午5.01.07.png

Jenkins Bitbucket Webhook

安全性設定

[管理 Jenkins] / [設定全域安全性] / [授權] / 修改設定為「矩陣型安全性」,如下圖示:
授權給 admin (您的管理者帳號) 之後,請記得要勾選 Administer 權限
op 螢幕快照 2018-08-22 下午2.50.32.png
注意:基於安全考量,請盡量不要授權給「匿名使用者」任何權限。

使用者權限

[使用者]/[設定]/[顯示 API Token]
op 螢幕快照 2018-08-22 下午2.52.56.png
op 螢幕快照 2018-08-22 下午2.53.22.png
op 螢幕快照 2018-08-22 下午2.53.32.png

Job

[新增作業]/[建置 Free-Style 軟體專案]
op 螢幕快照 2018-08-22 下午2.56.45.png
原始碼管理
op 螢幕快照 2018-08-22 下午3.05.05.png
建置觸發程序
op 螢幕快照 2018-08-22 下午3.05.13.png

Bitbucket Webhook

URL: http://[User]:[User-API-Token]@domain/job/[Project_Name]/build?token=[遠端觸發驗證Token]
User: Jenkins 的使用者
User-API-Token: Jenkins Api Token
Project_Name:專案名稱
遠端觸發驗證Token:建置觸發程序/遠端觸發建置/驗證Token(自己輸入)
[Settings]/[Webhooks]
op 螢幕快照 2018-08-22 下午3.05.36.png
查看 Webhook 記錄
op 螢幕快照 2018-08-22 下午3.06.13.png

設定 SSH key for jenkins and Bitbucket

Jenkins create ssh

ssh jenkins.jk666.me
sudo su - jenkins
ssh-keygen

Jenkins Add Credentials

op 螢幕快照 2018-08-22 下午3.41.15.png

取得私鑰

cat ~/.ssh/id_rsa
op 螢幕快照 2018-08-22 下午3.41.29.png
op 螢幕快照 2018-08-22 下午3.42.01.png

取得公鑰

cat ~/.ssh/id_rsp.pub

Bitbucket SSH Key

[Settings]/[Access keys]
op 螢幕快照 2018-08-22 下午3.44.03.png
op 螢幕快照 2018-08-22 下午3.44.33.png

設定 Jenkins 登入到 server ,使用 ssh key

複製 Jenkins ssh key,到主機端設定
ssh server_domain.com  #登入服務主機
ssh-keygen  #創建 ssh 設定檔
vim ~/.ssh/authorized_keys #貼上Jenkins ssh key #設定驗證 Key
chmod 700 ~/.ssh  #設定 ssh 資料夾權限
chmod 640 ~/.ssh/authorized_keys #設定驗證key 檔案權限
最後測試登入是否正常

實作

範例一

op Jenkins workflow.png
  1. 程式編寫者 提交 原始碼 到 bitbucket 版本控管雲端
  2. Bitbucket Webhook 通知 Jenkins 主機
  3. Jenkins 主機設定腳本通知 服務主機更新
  4. 服務主機到 bitbucket 更新最新版本,並且重啟服務

常見問題

Jenkins 忘記密碼

修改 使用者的 config.xml
vim /var/lib/jenkins/users/admin/config.xml
修改欄位
<passwordHash>#jbcrypt:$2a$10$J0KJjYsQEBE5vZyEt2prouZPVREG4J3VuKOgYltiYTrk6A5icSTVC</passwordHash>
修改後重新開啟 jenkins
systemctl restart jenkins
帳號:admin
密碼:111111

403 No valid crumb was included in the request

最後直接關閉 CSRF 驗證,就可以了,但是這個好像不是好作法,需要再研究.

沒有留言:

張貼留言

台灣人工智慧學校第四屆開學典禮

台灣人工智慧學校  第四屆 開學典禮       今天 AI 學校開學,非常特別像參加研討會一樣,開場介紹孔祥重校長和陳昇瑋執行長為什麼會創建這間學校,主要是他們發現AI技術可以幫助產業界解決很多問題,但是人才問題嚴重,希望透過一年三期每期500左右的規模並在北中南都有分校,來...