第四十三課預習任務 Jenkins
1.Jenkins介紹
Jenkins 是一個可擴充套件的持續整合引擎。由於jenkins有著大量的外掛,因此自由度高,很容易與各種開發環境進行聯動,而且jenkins是開(免)源(費)的,所以應用度很高。還有一個重要的優點是整合的幫助文件很完善,幾乎每一個選項旁的“?”都可以提供很清晰的解釋,便於上手。
為了保證程式碼質量並對程式碼進行可持續的系統的單元測試,可以考慮採用jenkins為開發做基本的測試,包括pep8和單元測試。
2.Jenkins安裝
yum安裝openjdk
[[email protected] ~]# yum install -y java-1.8.0-openjdk Loaded plugins: fastestmirror Determining fastest mirrors epel/x86_64/metalink | 8.0 kB 00:00:00 * base: mirror.vpshosting.com.hk * epel: mirrors.aliyun.com * extras: mirror.vpshosting.com.hk * updates: mirror.vpshosting.com.hk base | 3.6 kB 00:00:00 epel | 3.2 kB 00:00:00 extras | 3.4 kB 00:00:00 updates | 3.4 kB 00:00:00 (1/4): epel/x86_64/group_gz | 88 kB 00:00:00 (2/4): extras/7/x86_64/primary_db | 205 kB 00:00:03 (3/4): epel/x86_64/updateinfo | 934 kB 00:00:09 (4/4): epel/x86_64/primary | 3.6 MB 00:00:21 ........................................................................................
安裝jenkins的yum源
安裝jenkins
[[email protected] ~]# yum install -y jenkins Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirror.vpshosting.com.hk * epel: mirrors.aliyun.com * extras: mirror.vpshosting.com.hk * updates: mirror.vpshosting.com.hk jenkins | 2.9 kB 00:00:00 jenkins/primary_db | 117 kB 00:00:01 Resolving Dependencies --> Running transaction check ---> Package jenkins.noarch 0:2.153-1.1 will be installed --> Finished Dependency Resolution
啟動jenkins
[[email protected] ~]# systemctl start jenkins [[email protected] ~]# ps aux |grep jenkins jenkins 5802 43.6 8.9 2300400 89508 ? Ssl 01:26 0:05 /etc/alternatives/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon --httpPort=8080 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20 root 5831 0.0 0.0 112704 960 pts/1 R+ 01:27 0:00 grep --color=auto jenkins
檢視初始密碼
登入web繼續配置jenkins
3.Jenkins釋出php程式碼
下面是釋出php程式碼的步驟:
- “系統管理”“管理外掛”“已安裝”
- 檢查是否有“Git plugin”和“Publish Over SSH”兩個外掛,如果沒有,則需點選“可選外掛”,找到它並安裝
- 安裝好兩個外掛後,點選“系統管理” “系統設定”
- 下拉,找到“Publish Over SSH”
- 事先在一臺linux伺服器上生成一對金鑰
- ssh-keygen -f /root/.ssh/jenkins //可以設定密碼,也可不設定
- “Passphrase”填寫設定的密碼, “Path to key”留空,“key”貼上/root/.ssh/jenkins檔案內容
- 點選左下角“增加”,SSH Server,name自定義,Hostname填寫線上web伺服器的ip,Username填寫root,Remote Directory填寫/
- 如果是多臺web server,繼續點選“增加”,重複以上操作
- 點左下角的“儲存”
- 點選“新建”,任務名稱自定義,比如test,選擇“構建一個自由風格的軟體專案”點選下方的“確定”
- 描述,自定義
- “原始碼管理”選擇 “Git”
- “Repository URL”填寫你專案的git地址,如果是公共專案可以不設定下面的引數,直接填寫一個git地址即可,若是私有專案,需要填寫認證資訊,比如可以選擇 “SSH Username whith private key”,然後設定Username以及private key
- “Branches to build” 預設為*/master,意思是釋出的分支為master,保持預設
- “構建觸發器”和“構建環境”留空
- “構建”,選擇 “Send files or execute commands over SSH”
- SSH Server,Name 選擇對應的伺服器,Transfers, Source files填寫**/**,表示全部檔案
- Remove prefix可以指定截掉的字首目錄,這裡留空即可,Remote directory指定遠端伺服器上程式碼存放路徑,比如/data/wwwroot/www.aaa.com,Exec command為檔案傳輸完成後要執行的命令,比如可以是更改檔案許可權的命令,設定完成後點選 “Add Transfer Set”,如果還有另外的機器,可以點選 “Add Server”重複以上操作
- 最後點選左下角的“儲存”
- 完成以上操作後,就可以使用這個剛剛建立的任務去工作了。
- 點選左面的“立即構建”,就能把git上的程式碼釋出到指定的伺服器上。
- 點選左下角的#1/#2… ,然後再點選 “Console Output”可以檢視輸出日誌
4.Jenkins配置郵件
- 系統管理 -> 系統設定 -> Jenkins Location 先設定系統管理員郵件地址,這裡的郵件地址需要和後續要設定的發郵件地址一致。
- 往下拉,找到“郵件通知”那一欄
- 填寫SMTP伺服器,點右側的高階,打勾“使用SMTP認證”,填寫使用者名稱密碼,如果使用的是ssl協議,還需要在這裡打勾,smtp埠預設為25
- 可以打勾“通過傳送測試郵件測試配置”,然後填寫接收郵件的地址,點右側的Test configuration
- 然後就是到已經構建過的job裡去配置接收郵件的地址了。在最下面“構建後操作”那一欄,找到E-mail Notification,Recipients填寫收郵件人
- 這個收件人只會在job構建失敗時才能收到郵件
5 Jenkins配置郵件 – 外掛email-ext
- 外掛名字Email Extension Plugin,預設已經安裝
- 系統管理->系統設定->Extended E-mail Notification
- 填寫SMTP server,點選Use SMTP Authentication,填寫使用者名稱、密碼、SMTP port等
- 還需到對應構建任務中去配置一下,下拉到“構建後操作”
- 點選“增加構建後操作步驟”,選擇“Editable Email Notification”,其中Project Recipient List為接收郵件的收件人,可以在預設內容後面增加額外的收件人郵箱,用逗號分隔
- 點選右下角的“Advanced settings”,定位到“Triggers”,然後點選下方的“Add Trigger”,可以增加發郵件的條件。
6.Jenkins破解管理員密碼
- cd /var/lib/jenkins/users/admin
- vim config.xml//定位到<passwordHash>那一行
- 刪除改行,改為
- <passwordHash>#jbcrypt:$2a$10$pre7I4liZFdF6ZE05QntTOoKoKa5pCUumaFO/mMzMoH09bNBzyj6O</passwordHash>
- 重啟一下jenkins
關於使用者加密方式:
在config.xml檔案中 passwordHash節點可以看到使用者名稱加密後的密文雜湊值
那麼,它是用何種加密方式加密的呢?可否解密密文得到明文呢?
在 github上檢視其原始碼,通過關鍵字 #jbcrypt搜尋定位到HudsonPrivateSecurityRealm.java這個檔案
HudsonPrivateSecurityRealm.java詳細路徑是:jenkins/core/src/main/java/hudson/security/HudsonPrivateSecurityRealm.java
通過分析該原始碼得知:
1、密文的格式為:salt: encPass,其中以#jbcrypt表示salt作為資料頭
2、明文通過jbcrypt演算法得到密文 encPass
關於jbcrypt:
jbcrypt是bcrypt加密工具的java實現。
它的API非常簡單,DEMO如下,在HudsonPrivateSecurityRealm.java中可以看到加密和校驗時使用瞭如下API:
// Hash a password for the first time
String hashed = BCrypt.hashpw(password, BCrypt.gensalt());
// gensalt's log_rounds parameter determines the complexity the work factor is 2**log_rounds, and the default is 10
String hashed = BCrypt.hashpw(password, BCrypt.gensalt(12));
// Check that an unencrypted password matches one that has previously been hashed
if (BCrypt.checkpw(candidate, hashed))
System.out.println("It matches");
else
System.out.println("It does not match");
經驗證,用jbcrypt對同一個明文加密後因為salt一般不同,加密後的密文一般不同
關於bcrypt:
1、bcrypt是不可逆的加密演算法,無法通過解密密文得到明文。
2、bcrypt和其他對稱或非對稱加密方式不同的是,不是直接解密得到明文,也不是二次加密比較密文,而是把明文和儲存的密文一塊運算得到另一個密文,如果這兩個密文相同則驗證成功。
綜上,Jenkins專有使用者資料庫使用了jbcrypt加密,jbcrypt加密是不可逆的,而且對於同一個明文的加密結果一般不同。