一、簡介
1. Make工具
這個工具是最最原始的工具了,在linux下編過程序,看過比較大的c/c++代碼的人應該都聽說過這個工具(Windows下對應的工具為nmake)。它負責組織構建的過程,也就是負責指揮編譯器如何編譯,連接器如何連接,最后生成一個可用的文件。
2. Ant工具
但是有人覺得make工具的很難使用,他的語法很難理解,就發明了ant
3. Maven工具
Maven像make一樣是個構建(build)工具,Maven工具是對ant工具的進一步改進(這么說不太准確,但是可以這么理解)。在make工具中,如果我們要編譯某些源文件,我們肯定首先要安裝編譯器等工具,但是有時候需要不同版本的編譯器,如果把每個包都下載下來,在makefile中進行配置制定,需要的包非常多,很難管理,於是人們發明了Maven工具。Maven使用配置文件pom.xml對環境進行配置,例如設定編譯器的版本,設定所需支持包的URL,這樣maven就可以自動去下載所需的包。這樣如果需要對構建環境進行改變時,直接改變pom文件就可以了,maven會自動網絡上下載配置的包。Maven可以利用一些別的工具,實現對編譯結果的統計,對源代碼的檢查,對於代碼的測試等。
4. Jenkins工具
其實Maven還是不夠強大。Maven可以控制編譯,控制連接,可以生成各種報告,可以進行代碼測試。可是如何控制這個流程呢?先編譯還是先連接?先進行代碼測試,還是先生成報告?這個工具就是Jenkins。Jenkins能夠對流程進行控制,對能夠對各個階段生成的各種結果進行綜合,以圖表的形式呈現出來。但是不同的工具生成不同格式的結果,Jenkins如何讓這些結果呈現出來?這就是jenkins插件,Jenkins插件使maven中用到的各種工具生成的結果能夠在Jenkins中呈現出來。
jenkins是一個廣泛用於各種項目的"自動化"編譯、打包、分發部署。jenkins本身是用java語言開發的,所以安裝jenkins的機器至少要有jdk。jenkins可以很好的支持各種語言(java, c#, php等)的項目構建,也完全兼容ant、maven、gradle等多種第三方構建工具,同時跟svn、git能無縫集成,也支持直接與知名源代碼托管網站github、bitbucket直接集成。Jenkins默認情況下可以實現項目更新(通過SVN)和項目發布(通過MAVEN)
二、Jenkins
1、Jenkins 安裝(windows)
war包有兩種安裝方法
方法一
下載jenkins.war, 下載成功后,將war包文件放入對應的目錄(如C:\Users\Jenkins\),在命令行切換目錄到Jenkins,然后執行java -jar jenkins.war
訪問http://localhost:8080 , jenkins的主界面如下:
方法二
把Jenkins解壓,把得到的war包直接扔到tomcat下,啟動tomcat,Jenkins就安裝完畢,訪問http://localhost:8080
2、jenkins安裝(linux)
操作系統:Centos 7.2
jenkins版本:2.33
gitlab版本:8.13.6
兩台服務器:
192.168.100.10:jenkins Server
192.168.100.11 :gitlab Server
(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
|
(4)選擇安裝的插件:只需要安裝gitlab plugin,git plugin,還有ssh plugin插件即可,其他插件無須安裝。
gitlab 和 git插件:我們的代碼都放在gitlab上面,這兩個插件用來做源碼管理。
ssh插件:需要使用jenkins來執行shell命令。
(5)admin用戶:按照提示填寫即可
密碼創建完成之后就可以登錄jenkins了。
3、Jenkins操作
(1)關閉Jenkins
http://localhost:8080/exit
(2)重啟Jenkies
http://localhost:8080/restart
(3)重新加載配置信息
http://localhost:8080/reload
(4)Jenkins時區設置為北京時間
打開 【系統管理】->【腳本命令行】運行下面的命令
System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')
4、插件安裝
(1)如果在安裝jenkins的時候沒有安裝相關插件,可以按照如下方式安裝(已經安裝,則不需要)
(2)如果有插件一直安裝失敗的情況,可以從jenkins官網下載插件,然后導入到jenkins。在jenkins插件管理->高級選擇上傳插件進行安裝。
5、Jenkins密鑰配置
(1)jenkins生成密鑰對
登錄到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
jenkins@node1.fblinux.com
|
把這個密鑰添加到gitlab和jenkins服務器的root用戶。因為jenkins執行部署操作,會出現很多權限問題,一個一個解決比較麻煩,所以直接讓jenkins用戶通過root方式執行部署操作。
1)添加公鑰到gitlab服務器,用來clone代碼
添加完成之后從gitlab服務器clone下自己的工程,會在.ssh/known_hosts添加gitlab服務器記錄
1
|
-
bash
-4.2$ git clone git@192.168.100.11:root
/jenkins_test
.git
|
2)添加公鑰到jenkins服務器root用戶,用來執行部署腳本
1
2
|
-
bash
-4.2$
ssh
-copy-
id
-i .
ssh
/id_rsa
.pub root@192.168.100.10
root@192.168.100.10's password:
|
6、定時構建語法
* * * * * (五顆星,中間用空格隔開)
第一顆*表示分鍾,取值0~59
第二顆*表示小時,取值0~23
第三顆*表示天,取值1~31
第四顆*表示第幾月,取值1~12
第五顆*表示星期,取值0~7,其中0和7代表的都是周日
H表示隨機,沒有用到 H 隨機的話,不要加括號
1.
H/30 * * * * 每30分鍾構建一次:
2.
H H/2 * * * 每隔2個小時構建一次
H 4-19/3 * * * 凌晨點到下午7點,每隔3個小時構建一次
0 8 * * * 每天早上8點構建一次
H 8-18/3 * * * 每天早上8點到晚上6點每三小時檢查一次
3.
* * 3-5 * * 每個月的3號,4號,5號 都會被構建,具體時間未知
20 16 15 * * 每個月的15號下午16點20分構建一次
4.
0 8,12,22 * * * 每天的8點,12點,22點,一天構建3次(多個時間點,中間用逗號隔開)
5.
每個月的1-7號一天構建一次
H/30 8-19/3 1-28 1-11 1-5 在1-11月中的1號-28號,每個工作日,早晨的8點到下午7點每隔3.5個小時會觸發構建
三、jenkins操作
1、jenkins觸發式構建
(1)准備一個測試腳本,開發如果提交了代碼就執行這個測試腳本。
(2)創建一個觸發構建的項目,選擇自由軟件風格即可
(3)源碼管理選擇git,然后只需要在repository url中輸入git倉庫地址即可。
(4)構建觸發器:即gitlab有提交操作則自動部署,這里只需設置一個認證的token即可,
gitlab調用觸發器,使用 JENKINS_URL/job/new_cms/build?token=TOKEN_NAME即可
在系統管理–>用戶管理–>查看用戶id和token,需要把用戶id和API Token加入觸發器中,做用戶驗證
根據觸發器驗證令牌和用戶id+token會生成一個下面的url,只需要訪問這個URL地址jenkins就會自動部署對應項目的代碼。
1
|
http:
//admin
:984c9edf027e750f0587808fab0c3f9b@192.168.100.10:8080
/job/jenkins_trigger/build
?token=hehe
|
在jenkins全局安全設置中取消勾選“防止跨站點請求偽造,不然jenkins會認為gitlab的請求不合法。
(5)構建,選擇execute shell,執行部署腳本即可
(6)在gitlab中配置webhooks,配置URL,每次提交代碼就訪問這個url,執行構建
URL這里輸入上面上面用戶ID+API token+job token生成的URL地址即可。觸發工作選擇,push event,merge request event即可。
(7)添加完成測試:點擊test模擬提交操作,看看是否會執行自動構建
Jenkins查看,可以看到構建也是成功的。
2、jenkins定時構建
定時構建一般用在安卓,ios打包,每天凌晨會拉取安卓,ios進行編譯打包,並自動推送到共享。本示例演示定時執行一個命令
四、用戶和權限
jenkins 配置用戶角色權限需要安裝插件 Role Strategy Plugin
1.安裝 Role Strategy Plugin 插件,下載地址:https://updates.jenkins-ci.org/download/plugins/role-strategy/
打開jenkins 系統管理-->管理插件-->高級,點擊上傳,選擇下載的插件安裝
2、安裝完后,重啟jenkins,進入系統設管理-->Configure Global Security ,配置如下,保存
3.配置User/Group權限
打開 系統管理-->Manage and Assign Roles
3-1. 管理角色(Manage Roles)
選擇該項可以創建全局角色、項目角色,並可以為角色分配權限
添加test組,並給Over all 的Read 權限、Job Build 權限、View的Read權限。
Project roles 配置Pattern,例如匹配以 auto開頭的,需要寫成 auto.*切記!配置完后保存
3-2.添加用戶權限(Assign Role)
系統需要有用戶(若沒有可添加:系統管理 --> 用戶管理 -->添加用戶),然后:
4,創建 autotest 任務, 用戶test(只有構建權限)用戶登錄進去,發現只能看到autotest任務,實現不同用戶不同視圖及不同權限