jenkins自動化部署及三種構建部署方式

jenkins介紹部署及三種構建方式配置

 自動化  西門飛冰  1年前 (2016-11-27)  9638℃  0評論

1.前言

1.1.jenkins介紹

jenkins是基於java開發的一種持續集成工具,用於監控持續重複的工作,功能包括。

1、持續的軟件版本發佈/測試

2、監控外部調用執行項目

Jenkins其實很早之前就有了,最近火起來的原因是,大家都在關注devops,關注如何來做持續集成,持續交付,如何來做CI/CD。Jenkins作爲持續集成的工具,他其實只是一個平臺或者是一個大的框架,它的工作完全就是依靠插件,也就是說你想使用什麼功能,你就找到什麼樣的插件。

1.2.jenkins好處

1、我在工作中部署jenkins的最大好處就是每次在開發、測試環境代碼,都無須運維部署,而是相關的開發人員,測試人員登錄jenkins傳入需要部署的tag即可,整個部署過程無須運維參與,解放運維勞動力。

2、安卓,IOS自動打包:雖然打包和運維關係不大,但是運維實現自動打包,使得產品同學,運營和測試同學可以每日驗證產品開發進度以及及時反饋開發功能的方向是否正確,對公司貢獻還是不小的。

1.3.我的jenkins實踐

由於我們在使用jenkins之前,有自動化部署的shell腳本和上線流程,使用jenkins也就是讓開發,測試人員可以通過一個web界面來執行腳本,實現部署。

我們公司一個產品線有四個環境,開發環境,測試環境,預上線環境,生產環境。除了生產環境之外都是通過jenkins來部署代碼。

我們在生產實踐中,jenkins使用到了下面三種部署方式:

jenkins觸發式構建:用於開發環境部署開發人員push代碼或者合併代碼到gitlab項目的master分支,jenkins就部署代碼到對應服務器。

jenkins參數化構建:用於測試環境預上線環境部署,開發push代碼或者合併代碼到gitlab項目的master分支之後,並不會部署代碼,而是需要登錄到jenkins的web界面,點擊構建按鈕,傳入對應的參數(比如參數需要構建的tag,需要部署的分支)然後纔會部署。

jenkins定時構建:用於APP自動打包,定時構建是在參數化構建的基礎上添加的,開發人員可以登錄jenkins手動傳入tag進行打包,如果不手動打包,那麼jenkins就每天凌晨從gitlab拉取最新的APP代碼打包。

補充一下:jenkins不光可以用來部署代碼,還可以這麼玩(雖然我沒有這麼幹過,但是你有興趣可以試試):

1、各種服務的備份也可以放到jenkins上面,每天使用jenkins定時備份,還可以在jenkins看每天備份的輸出信息。

2、各種開發需要找你的工作,比如同步生產數據庫到開發環境,這個也可以放到jenkins上面,開發每次需要同步,就登錄jenkins找到數據庫同步的job,點擊構建,就自動同步了。

1.4.jenkins使用前提

(1)得到領導的支持,我在公司推動jenkins部署APP自動打包,可以說是前段,後端,移動端,測試,產品等人員都需要溝通,這種情況下得到領導的支持在推動好處還是大大的。

(2)你們公司的代碼需要一個分支管理規範,代碼沒有一個好的分支管理規範,自動部署是玩不了的。可以參考Git 分支管理最佳實踐看看那種方式適合你們公司。

(3)使用jenkins之前,你需要有通過shell實現自動化部署代碼的成功經驗。

(4)持續集成最好有自動化測試,沒有也行,但是最好讓開發人員提供一些api的監控腳本,每次構建之後驗證部署是否正常。

2.jenkins部署

2.1.下面內容介紹

(1)jenkins的安裝配置

(2)jenkins插件自動/手動安裝

(3)jenkins觸發式構建配置

(4)jenkins參數化構建配置

(5)jenkins定時構建配置

(6)jenkins用戶權限配置

2.2.環境介紹

操作系統:Centos 7.2

jenkins版本:2.33

gitlab版本:8.13.6

兩臺服務器:

192.168.100.10:jenkins Server

192.168.100.11 :gitlab Server

2.3.jenkins安裝

(1)jenkins是java編寫的,所以需要先安裝jdk,這裏使用yum安裝。

1
yum -y install java-1.8.0 java-devel-1.8.0

jenkins還需要從gitlab拉取代碼,所以我們需要安裝git命令行客戶端

1
[root@node1 ~]# yum -y install git

(2)安裝jenkins

1
2
3
4
5
cd /etc/yum.repos.d/
wget http://pkg.jenkins.io/redhat/jenkins.repo
rpm --import http://pkg.jenkins.io/redhat/jenkins.io.key
yum install -y jenkins
systemctl start jenkins

(3)訪問jenkins
在瀏覽器打開輸入http://IP:8080/訪問jenkins。
image001
爲了安全考慮,需要解鎖jenkins,把/var/lib/jenkins/secrets/initialAdminPassword文件內容複製到administrator password下方即可。

1
2
[root@Jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
2862d2ffc9aa40e1b80039e8ad9810ea

(4)選擇安裝的插件:只需要安裝gitlab plugin,git plugin,還有ssh plugin插件即可,其他插件無須安裝。

gitlab 和 git插件:我們的代碼都放在gitlab上面,這兩個插件用來做源碼管理。

ssh插件:需要使用jenkins來執行shell命令。

image002

創建admin用戶:按照提示填寫即可

image003

密碼創建完成之後就可以登錄jenkins了。

3.插件安裝

如果在安裝jenkins的時候沒有安裝相關插件,可以按照如下方式安裝(已經安裝,則不需要)

1、安裝gitlab插件,直接在系統管理>插件管理中搜索gitlab相關插件安裝即可。

image004

2、shell插件:還是剛纔的位置搜索ssh 選擇ssh plugin插件安裝即可。

image006

3.1.手動下載jenkins插件

插件下載地址:http://updates.jenkins-ci.org/download/plugins/

如果有插件一直安裝失敗的情況,可以從jenkins官網下載插件,然後導入到jenkins。

示例:我從官方下載gitlab-plugin插件到本地,然後導入到jenkins中。

在jenkins插件管理->高級選擇上傳插件進行安裝。

image008

4.Jenkins密鑰配置

(1)jenkins生成密鑰對
設置jenkins的shell終端爲/bin/bash

1
2
[root@node1 ~]# grep jenkins /etc/passwd
jenkins:x:993:990:Jenkins Continuous Integration Server:/var/lib/jenkins:/bin/bash

登錄到jenkins用戶生成密鑰

1
2
3
4
[root@node1 ~]# su - jenkins
bash-4.2$ ssh-keygen -t rsa
bash-4.2$ cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCwIdUk3+V8aL2/oMfvwCxp5AiyctL4bnYFnsKOcQz8w/MuAehy9/EEeT0HNQCSs0NQ3veFurWlKUB4tntNA7bMcZS/UWBSXh2uAJQCMcXbIWfdngaQwVVP+s5WvDbtL5Jk6mQch22aIIw4JaJh4L8dl1oyviwoBgOnscXVC/kDWgFM4BrHC4QNyzt6PdtuzX3RkMa4w7bqDvUWMqIyRBScW1fbfJeAwAK1tCQ7ZjfAoTcWpmoBlurH1P6SuWR3rYIPyhGDqjPQnlohqSX/vCrLWoHoYazETHfW2azzzBSGqMeCw3hlbSV/12kRQv0kGfnbhmnHZ1CBgX23N3ktqtzL [email protected]

把這個密鑰添加到gitlab還有jenkins服務器的root用戶

爲什麼把jenkins公鑰添加到root用戶?
因爲jenkins執行部署操作,會出現很多權限問題,一個一個解決比較麻煩(而且不同項目權限問題都不同),就算sudo授權也是需要授予最少10幾條命令的權限,而且不能保證以後不會出現新的命令,所以我直接讓jenkins用戶通過root方式執行部署操作,簡單粗暴。

(1)添加公鑰到gitlab服務器,用來clone代碼
image009
添加完成之後從gitlab服務器clone下自己的工程,會在.ssh/known_hosts添加gitlab服務器記錄

1
-bash-4.2$ git clone [email protected]:root/jenkins_test.git

(2)添加公鑰到jenkins服務器root用戶,用來執行部署腳本

1
2
-bash-4.2$ ssh-copy-id -i .ssh/id_rsa.pub [email protected]
[email protected]'s password:

5.jenkins觸發式構建

(1)準備一個測試腳本,看開發如何提交代碼就執行這個構建操作。

1
2
3
4
[root@node1 ~]# cat /shell/deploy/test/jenkins_trigger.sh
#!/bin/bash
echo "部署腳本被執行"
[root@node1 ~]# chmod +x /shell/deploy/test/jenkins_trigger.sh

注意:如果是生產配置,直接把這個腳本換成對應項目的上線腳本即可,jenkins配置無須修改。

(2)創建一個觸發構建的項目,選擇自由軟件風格即可

image010

(3)源碼管理選擇git,然後只需要在repository url中輸入git倉庫地址即可。

image011

(4)構建,選擇execute shell,執行部署腳本即可

image012

(5)觸發器配置:即gitlab有提交操作,則自動部署,這裏只需要設置一個認證的token即可,gitlab調用觸發器,需要使用 JENKINS_URL/job/new_cms/build?token=TOKEN_NAME即可

image013

(6)在系統管理–>用戶管理–>查看用戶id和token,需要把用戶id和API Token加入觸發器中,做用戶驗證

image014
根據觸發器驗證令牌和用戶id+token會生成一個下面的url,只需要訪問這個URL地址jenkins就會自動部署對應項目的代碼。

1
http://admin:[email protected]:8080/job/jenkins_trigger/build?token=hehe

(7)gitlab配置webhooks,每次提交代碼就訪問這個url,執行構建

image015

URL這裏輸入上面上面用戶ID+API token+job token生成的URL地址即可。觸發工作選擇,push event,merge request event即可。

 

image016

(8)在jenkins全局在jenkins全局安全設置中取消勾選“防止跨站點請求僞造,不然jenkins會認爲gitlab的請求不合法。

image017

(9)添加完成測試:點擊test模擬提交操作,看看是否會執行自動構建

image018

如果執行成功會返回如下顯示,說明執行鉤子成功

image019

Jenkins查看,可以看到構建也是成功的。

image020

6.jenkins參數化構建

(1)準備一個測試的腳本

1
2
3
4
5
6
#!/bin/bash
git_pro(){
  echo "拉取$1代碼"
}
 
git_pro $1

(2)創建一個參數化構建的項目

image021

(3)選擇構建的參數:這裏設置一個tag參數,就是每次執行job之前都需要傳入這個tag

image022

(4)設置執行部署的腳本

image023

(5)選擇創建的job執行構建

image024

Tag處傳入需要部署的tag即可

image025

構建完成查看構建的結果

image026

7.jenkins定時構建

定時構建一般用在安卓,ios打包,每天凌晨會拉取安卓,ios進行編譯打包,並自動推送到共享。

示例:在上面的參數化構建示例上添加如下觸發器,就是每天凌晨1:30分自動執行安卓或ios打包腳本,上面的參數化構建默認值是master就是每天從代碼倉庫的master分支拉取最新的代碼打包。

image027

8.Jenkins用戶權限設置

現在各種job已經設置好了,但是如果開發測試人員需要部署一個tag到服務器進行測試,那麼就需要登錄jenkins,這個時候就需要給開發和測試人員創建一個可以執行job的用戶,方法如下。

8.1.新創建一個用戶

系統管理–>用戶管理–>新建用戶,按照提示填入信息即可

image028

8.2.用戶權限設置

系統管理–>Configure Global Security–> 給develop用戶授權,主要給job build,cancel,read權限。用戶登錄jenkins就可以構建我們創建的job了。

 

轉載請註明:西門飛冰的博客-專注於Linux運維 » jenkins介紹部署及三種構建方式配置

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章