1. 程式人生 > >第四十三課預習任務 Jenkins

第四十三課預習任務 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加密是不可逆的,而且對於同一個明文的加密結果一般不同。