【轉】基於Jenkins實現持續集成【持續更新中】

 持續集成

1.什麼是持續集成:
Continuous integration (CI)
持續集成是一種軟件開發實踐,即團隊開發成員常常集成他們的工做,一般每一個成員天天至少集成一次,也就意味着天天可能會發生屢次集成。每次集成都經過自動化的構建(包括編譯,發佈,自動化測試)來驗證,從而儘快地發現集成錯誤。許多團隊發現這個過程能夠大大減小集成的問題,讓團隊可以更快的開發內聚的軟件。html

2.沒有持續集成的情況:java

 

3.持續集成最佳實踐node

  • 維護一個單一的代碼庫     【不要使用多個代碼庫,避免每一個組使用單獨得git/svn,減輕權限管理】
  • 使構建自動化
  • 執行測試是構建的一部分 【構建一個項目得時候,測試就包含在裏面了,能夠及時得發現問題】
  • 集成日誌及歷史記錄
  • 使用統一的依賴包管理庫 【很容易出錯,因此要統一得管理】
  • 天天至少集成一次            【持續集成得時候,是最容易發現問題得時候】

4.持續集成概覽linux

持續集成得過程:
先把代碼放到git、Jenkins從git獲取代碼進行構建、測試、生成結果再返回給客戶端。git

Jenkins安裝

什麼是Jenkins:web

Jenkins is an automation engine with an unparalleled plugin ecosystem to support all of your favorite tools in your delivery pipelines, whether your goal is continuous integration, automated testing, or continuous delivery.
持續集成、自動測試、持續部署的超級引擎,支持自定義工具集、多種交付通道。shell

Jenkins的缺點:
Jenkins是開發人員開發得,沒有照顧到運維人員得感覺。CMDB得對接是Jenkins得短板。數據庫

 

操做步驟:apache

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 服務器環境:
[root@linux-node2 ~]# cat /etc/redhat-release
CentOS release 6.5 (Final)
 
# 安裝依賴包
[root@linux-node2 ~]# yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel
 
# 下載地址:【版本選擇以前得一個或兩個版本,選擇redhat-stable穩定版】
# 官方下載地址:https://pkg.jenkins.io/redhat-stable/
# 國內下載地址:https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/
 
# 安裝jenkins
[root@linux-node2 ~]# rpm -ivh jenkins-2.32.3-1.1.noarch.rpm
warning: jenkins-2.32.3-1.1.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID d50582e6: NOKEY
Preparing...                ########################################### [100%]
    1:jenkins                ########################################### [100%]
 
# 查看服務狀態
[root@linux-node2 ~]# service jenkins status
jenkins 已停
 
# 啓動jenkins
[root@linux-node2 ~]# service jenkins start
Starting Jenkins                                           [肯定]
 
# 查看端口8080是否已啓動
[root@linux-node2 ~]# netstat -lunpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name  
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1068/sshd          
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1144/master        
tcp        0      0 :::8080                     :::*                        LISTEN      1523/java          
tcp        0      0 :::22                       :::*                        LISTEN      1068/sshd          
tcp        0      0 ::1:25                      :::*                        LISTEN      1144/master        
udp        0      0 0.0.0.0:68                  0.0.0.0:*                               954/dhclient

 注意:YUM安裝方式【不推薦】

1
2
3
4
5
6
7
8
9
10
# 下載鏡像源
wget -O /etc/yum.repos.d/jenkins.repo http: //pkg.jenkins.io/redhat-stable/jenkins.repo
rpm --import http: //pkg.jenkins.io/redhat/jenkins.io.key
or
rpm --import http: //pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
 
# yum安裝jenkins
yum –y install jenkins
service jenkins start
ckconfig Jenkins  on

Jenkins初始化

第一步:

1
2
3
4
5
6
# 訪問Jenkins
http: //192.168.152.129:8080
 
# 查找admin默認密碼,輸入密碼,點擊繼續
[root@linux-node2 ~]# cat / var /lib/jenkins/secrets/initialAdminPassword
637060046b114f6d92255944ab312940

第二步:

注意:卡啓動問題【採用離線模式】

Jenkins在第一次安裝啓動時會向官網回傳信息
若是網絡離線能夠正常安裝。
當網絡在線,可是https://jenkins-ci.io 沒法打開時,卡住。
解決:
若是出現卡啓動,把網絡關掉便可。

之後再出現問題,都是jenkins服務器內存不夠了。

第三步:

第四步:

第五步:

第六步:

注意:【若是採用是聯網模式,有兩種方式,一種是安裝默認插件,時間比較長。一種是跳過安裝插件,點擊右上角得叉。】

Jenkins插件

更新插件、下載安裝、代理設置、可用插件

1. 默認插件:

插件用途:

Pipeline 工做流用到
Git plugin 拉代碼會用到
SSH Slaves plugin 作集羣

......

2.經常使用插件:

3.插件管理:

系統設置>插件管理

# 第一步:

# 第二步:

 

 # 第三步:

 

4.批量更新插件

1
2
3
4
5
6
7
8
9
10
# 解壓到插件目錄中
[root@linux-node2 ~]# mv plugins.tar.gz / var /lib/jenkins/
[root@linux-node2 jenkins]# tar zxf plugins.tar.gz 
# 添加jenkins權限
[root@linux-node2 jenkins]# chown -R jenkins.jenkins plugins
 
# 重啓下jenkins服務
[root@linux-node2 jenkins]# /etc/init.d/jenkins restart
Shutting down Jenkins                                      [肯定]
Starting Jenkins                                           [肯定]

5.手動安裝插件

a.手動安裝ssh插件,下載到桌面:

執行過程:設置--管理插件--高級--上傳

1
地址:http: //updates.jenkins-ci.org/2.32/latest/ssh.hpi

注意:【插件更新】

插件安裝必定要對應大版本。
若是更新某個插件以後,報依賴問題,就恢復以前得插件。

# 第一步:

# 第二步:安裝中

# 第三步:安裝完成

 b.經過可選插件進行升級安裝

可更新--選擇Git plugin

Jenkins配置

鏡像管理:

1
2
3
4
5
6
7
8
9
10
Jenkins全部鏡像地址:
http: //mirrors.jenkins-ci.org/status.html
 
官方鏡像地址:http: //updates.jenkins-ci.org/update-center.json
 
更換鏡像:【目前鏡像仍是推薦使用官網,比較好用些】
http: //updates.jenkins-ci.org/update-center.json
https: //mirrors.tuna.tsinghua.edu.cn/
http: //mirror.esuni.jp/jenkins/updates/update-center.json
https: //mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

系統管理--插件管理--高級--升級站點,地址:http://updates.jenkins-ci.org/update-center.json

Jenkin目錄:

1
2
3
4
5
6
7
8
9
10
[root@linux-node2 ~]# rpm -ql jenkins
/etc/init.d/jenkins         【啓動文件】
/etc/logrotate.d/jenkins   
/etc/sysconfig/jenkins           【配置文件】
/usr/lib/jenkins
/usr/lib/jenkins/jenkins.war
/usr/sbin/rcjenkins
/ var /cache/jenkins          【程序文件,備份就須要備份該目錄下war目錄】
/ var /lib/jenkins            【主目錄,升級得話直接把war包放到該目錄,升級完成後jenkins會把war自動解壓到/ var /cache/Jenkins目錄】
/ var /log/jenkins            【日誌文件】

配置文件參數:/etc/sysconfig/jenkins

1
2
3
4
JENKINS_USER=「root」
由於Jenkins須要調用系統命令,採用root用戶會比較方便,生產環境建議採用jenkins用戶,多一步受權過程。
JENKINS_JAVA_OPTIONS=「-Djava.awt.headless= true
jenkins是依賴jvm啓動得,若是內存不夠用了,須要指定堆,就須要在這裏作。

 

用戶權限:【不推薦,知道在這裏能夠修改就能夠。生成環境修改配置文件,作修改】

1
2
3
4
5
6
7
8
9
10
修改/etc/init.d/jenkins
 
將用戶修改成root,能夠調用root工具
 
106行,113行
 
修改啓動端口85行,$JENKINS_PORT
 
systemctl daemon-reload
service jenkins restart

備份:【若是體積比較大,不建議採用全量備份,可使用rsync來進行增量備份】

1
2
tar zcvf jenknis.tar.gz / var /lib/jenkins/
天天定時備份的腳本,保留15天的備份

/var/lib/jenkins/ 目錄結構:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@linux-node2 jenkins]# ll
總用量 172136
-rw-r--r--.   1 root    root          604 10月 29 22:02 com.dabsquared.gitlabjenkins.connection.GitLabConnectionConfig.xml
-rw-r--r--.   1 jenkins jenkins       365 10月 29 02:35 com.dabsquared.gitlabjenkins.GitLabPushTrigger.xml
-rw-r--r--.   1 jenkins jenkins      1592 10月 28 22:26 config.xml
-rw-r--r--.   1 root    root          159 10月 29 22:02 hudson.model.UpdateCenter.xml
-rw-r--r--.   1 jenkins jenkins       370 10月 29 02:35 hudson.plugins.git.GitTool.xml
-rw-------.   1 jenkins jenkins      1712 10月 28 22:25 identity.key.enc
-rw-r--r--.   1 jenkins jenkins         6 10月 29 22:02 jenkins.install.InstallUtil.lastExecVersion
-rw-r--r--.   1 jenkins jenkins         6 10月 28 22:54 jenkins.install.UpgradeWizard.state
drwxr-xr-x.   2 jenkins jenkins      4096 10月 28 22:24 jobs 【任務】
drwxr-xr-x.   4 jenkins jenkins      4096 10月 29 02:36 logs 【日誌】
-rw-r--r--.   1 root    root          907 10月 29 22:02 nodeMonitors.xml
drwxr-xr-x.   2 jenkins jenkins      4096 10月 28 22:25 nodes    【集羣節點】
drwxr-xr-x. 104 jenkins jenkins     12288 10月 29 03:54 plugins  【插件】
-rw-r--r--.   1 root    root    176176562 10月 29 00:50 plugins.tar.gz
-rw-r--r--.   1 jenkins jenkins       129 10月 29 22:00 queue.xml.bak
-rw-r--r--.   1 jenkins jenkins        64 10月 28 22:24 secret.key
-rw-r--r--.   1 jenkins jenkins         0 10月 28 22:24 secret.key.not-so-secret
drwx------.   4 jenkins jenkins      4096 10月 29 02:22 secrets
drwxr-xr-x.   2 jenkins jenkins      4096 10月 29 04:08 updates
drwxr-xr-x.   2 jenkins jenkins      4096 10月 28 22:25 userContent
drwxr-xr-x.   3 jenkins jenkins      4096 10月 28 22:26 users
drwxr-xr-x.   2 jenkins jenkins      4096 10月 29 02:35 workflow-libs
 
xml文件都是jenkins的安全或者其餘設置,jenkins是沒有數據庫得,都是存在xml文檔中得。

系統設置:【系統管理--系統設置】

  • 工做目錄設置
  • Maven項目配置
  • 設置系統JDK ANT MAVEN
  • Jenkins Location
  • 郵件通知
  • Configure Global Security

系統設置幾個注意事項:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
執行者數量   【不建議超過10個,太多得話,服務器可能會坑不住,通常5個就能夠了。】
用法       【若是是從級得話必定要選擇只容許運行綁定到這臺機器的Job,否則會隨機分別,可能會分配到別的機器跑任務,若是主得話就無所謂了。】
生成前等待時間 【建議改爲10秒,能夠有個反悔得餘地。】
SCM簽出重試次數   【建議改爲不重試0,也能夠設置爲1。】
 
Jenkins Location:
Jenkin URL 【設置域名地址】
系統管理員郵件地址   【設置郵件地址】
 
Subversion:
Subversion Workspace Version    【改爲相對比較近點得版本】
 
郵件通知:
根據提示設置便可。

Jenkins備份與恢復

先構建兩個任務,分別爲php和java:

a.構建php任務:

 

 b.構建java任務:

jenkins備份操做:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 對/var/lib/jenkins 進行備份
[root@linux-node2 jenkins]# mkdir -p /data/backup/jenkins
# 拷貝時保留以前得目錄和文件屬性
[root@linux-node2 jenkins]# rsync -raz --delete --progress / var /lib/jenkins/ /data/backup/jenkins/
# 不建議使用scp,採用rsync進行增量備份:scp -r /var/lib/jenkins/ /data/backup/jenkins/,scp是支持斷點續傳得。
# 刪除/var/lib/jenkins
[root@linux-node2 jenkins]# rm -rf / var /lib/jenkins/
 
# 重啓jenkin,仍是能啓動,啓動以後,jenkins會生成默認得目錄和配置文件,進入到初始化界面。
[root@linux-node2 jenkins]# /etc/init.d/jenkins restart
Shutting down Jenkins                                      [肯定]
Starting Jenkins                                           [肯定]
[root@linux-node2 jenkins]# cd / var /lib/jenkins/
[root@linux-node2 jenkins]# ll
總用量 64
-rw-r--r--. 1 root root 1592 10月 30 02:09 config.xml
-rw-r--r--. 1 root root  159 10月 30 02:09 hudson.model.UpdateCenter.xml
-rw-------. 1 root root 1712 10月 30 02:09 identity.key.enc
-rw-r--r--. 1 root root   94 10月 30 02:09 jenkins.CLI.xml
-rw-r--r--. 1 root root    6 10月 30 02:09 jenkins.install.UpgradeWizard.state
drwxr-xr-x. 2 root root 4096 10月 30 02:08 jobs
drwxr-xr-x. 3 root root 4096 10月 30 02:09 logs
-rw-r--r--. 1 root root  907 10月 30 02:09 nodeMonitors.xml
drwxr-xr-x. 2 root root 4096 10月 30 02:09 nodes
drwxr-xr-x. 2 root root 4096 10月 30 02:08 plugins
-rw-r--r--. 1 root root  129 10月 30 02:08 queue.xml.bak
-rw-r--r--. 1 root root   64 10月 30 02:08 secret.key
-rw-r--r--. 1 root root    0 10月 30 02:08 secret.key.not-so-secret
drwxr-xr-x. 4 root root 4096 10月 30 02:09 secrets
drwxr-xr-x. 2 root root 4096 10月 30 02:11 updates
drwxr-xr-x. 2 root root 4096 10月 30 02:09 userContent
drwxr-xr-x. 3 root root 4096 10月 30 02:09 users

jenkins恢復操做:

1
2
3
4
5
6
7
8
# 進行恢復
[root@linux-node2 ~]# /etc/init.d/jenkins stop
Shutting down Jenkins                                      [肯定]
[root@linux-node2 ~]# rm -rf / var /lib/jenkins/*
[root@linux-node2 ~]# rsync -arz --delete --progress /data/backup/jenkins/ / var /lib/jenkins/
[root@linux-node2 jenkins]# /etc/init.d/jenkins start
Starting Jenkins                                           [肯定]
[root@linux-node2 jenkins]#

發佈PHP項目

構建自由風格項目
Throttle builds,構建時限
丟棄舊的構建
填寫源碼信息

 

丟棄舊的構建:
保持構建的天數 【超過必定天數就刪除】
保持構建的最大個數 【超過必定數量就刪除】

 

 

建立SSH KYE:

注意deploy key和ssh key的區別:

deploy keys有兩種,一種是表明所有,一種是隻針對某個項目。

 

注意和項目的deploy key區別:

 

 

點擊啓動:

 

 添加Git有兩種方式,一種是ssh,一種是http:

使用ssh方式比較多。

ssh添加方式:

若是是報以上錯誤,是由於ssh須要加known_hosts文件:

使用git 使用http:

添加用戶名和密碼:

構建:

從jenkins上拷貝/root/.ssh/id_rsa.pub,放入被遠程的服務器:

執行shell命令:

添加進任務裏:

 

 

 SVN

  • 確保subversion plugin已經安裝
  • 在系統設置裏選擇SVN版本
  • 獲取程序的SVN路徑
  • 填寫SVN用戶權限
  • 指定其它配置
  • 構建週期
  • 構建環境
  • Execute shell

查看構建結果

  • 狀態集 查看代碼變動記錄
  • Console Output 構建過程當中的輸出結果,主要用於查看構建過程
  • 編輯編譯信息 定製信息編譯信息
  • Tag this build 對此次構建進行tag(svn),SVN必須已經創建tags目錄

 發佈Maven項目

什麼是maven?

  • Maven是一個項目管理和綜合工具。Maven提供給開發人員構建一個完整的生命週期框架。
  • 開發團隊能夠自動完成該項目的基礎設施建設,Maven使用標準的目錄結構和默認構建生命週期。
  • Apache的開源項目
  • 主要服務於JAVA平臺的構建、依賴管理、項目管理。

安裝maven:

1
2
3
4
5
6
wget http: //mirrors.cnnic.cn/apache/maven/maven3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
tar zxvf apache-maven-3.3.9-bin.tar.gz
配置環境變量 vim /etc/profile
      export PATH=$PATH:/root/apache-maven-3.3.9/bin
測試
     mvn -v

POM:

  • Project Object Model,項目對象模型。
  • 經過xml格式保存的pom.xml文件。
  • 做用相似ant的build.xml文件,功能更強大。
  • 該文件用於管理:源代碼、配置文件、開發者的信息和角色、問題追蹤系統、組織信息、項目受權、項目的url、項目的依賴關係等等.

 

 以上紅色標記內容,會變成構建後文件的名字。

MAVEN 命令:

1
2
3
4
5
6
7
8
9
10
11
1. 建立Maven的普通java項目:
   mvn archetype:create
  -DgroupId=packageName
   -DartifactId=projectName 
2. 建立Maven的Web項目:
     mvn archetype:create
     -DgroupId=packageName   
     -DartifactId=webappName
     -DarchetypeArtifactId=maven-archetype-webapp   
3. 清除後再編譯  
     mvn clean install

配置系統MAVEN:

1
2
3
4
5
6
7
系統管理> Global Tool Configuration
 
新增maven
 
取消自動安裝
 
填寫maven實際安裝路徑 /data/server/apache-maven-3.3.9/

新建maven項目:

1
2
3
4
5
6
7
8
9
10
新建maven項目
指定源碼位置(git或svn)
指定build選項
    clean install
    clean install -Dmaven.test.skip= true
指定execute shell
    java -jar target/testweb-0.0.1-SNAPSHOT.jar
    
# 注意
這個命令是跳過單元測試命令:clean install -Dmaven.test.skip= true

配置maven:

1
2
3
settings.xml 是maven的主要配置文件
位置 $home/.m2 用戶
meven安裝目錄/conf 全局

 

開始構建maven項目:

配置maven:

自動安裝maven,系統管理--Global Tool Configuration

手動安裝maven:

1
2
3
4
5
6
7
8
9
10
11
12
13
# maven安裝命令
[root@localhost src]# tar -xf apache-maven-3.3.9-bin.tar.gz
[root@localhost src]# mv apache-maven-3.3.9 /data/
[root@localhost src]# export PATH=$PATH:/data/apache-maven-3.3.9/bin
[root@localhost src]# mvn -v
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /data/apache-maven-3.3.9
Java version: 1.8.0_151, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-1.b12.el7_4.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name:  "linux" , version:  "3.10.0-514.el7.x86_64" , arch:  "amd64" , family:  "unix"
[root@localhost src]# echo  "export PATH=$PATH:/data/apache-maven-3.3.9/bin"  >> /etc/profile
[root@localhost src]# source /etc/profile

 

 

 

開始構建 ,第一次執行會下載各類插件:

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 構建時下載的包,會下載到這裏:
[root@localhost ~]# cd .m2/
[root@localhost .m2]# ll
total 0
drwxr-xr-x 13 root root 190 Dec 10 23:00 repository
[root@localhost .m2]# cd repository/
[root@localhost repository]# ll
total 0
drwxr-xr-x 6 root root 70 Dec 10 23:00 asm
drwxr-xr-x 3 root root 38 Dec 10 22:58 backport-util-concurrent
drwxr-xr-x 3 root root 25 Dec 10 22:56 classworlds
drwxr-xr-x 4 root root 31 Dec 10 23:01 com
drwxr-xr-x 3 root root 25 Dec 10 22:57 commons-cli
drwxr-xr-x 3 root root 26 Dec 10 23:00 commons-lang
drwxr-xr-x 3 root root 33 Dec 10 22:58 commons-logging
drwxr-xr-x 3 root root 18 Dec 10 23:00 jdom
drwxr-xr-x 3 root root 19 Dec 10 22:56 junit
drwxr-xr-x 3 root root 19 Dec 10 22:58 log4j
drwxr-xr-x 6 root root 65 Dec 10 22:58 org

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 構建成功,會再/var/lib/jenkins/workspace/java2目錄中生成一個target目錄,裏面有構建完成的文件testweb-0.0.1-SNAPSHOT.jar
[root@localhost java2]# pwd
/ var /lib/jenkins/workspace/java2
[root@localhost java2]# ll
total 4
-rw-r--r-- 1 root root 1574 Dec 10 22:55 pom.xml
drwxr-xr-x 4 root root   30 Dec 10 22:55 src
drwxr-xr-x 7 root root  184 Dec 10 23:00 target
[root@localhost java2]# cd target/
[root@localhost target]# ll
total 8
drwxr-xr-x 3 root root   17 Dec 10 22:59 classes
drwxr-xr-x 2 root root   28 Dec 10 23:00 maven-archiver
drwxr-xr-x 3 root root   35 Dec 10 22:59 maven-status
-rw-r--r-- 1 root root 2437 Dec 10 23:00 original-testweb-0.0.1-SNAPSHOT.jar
drwxr-xr-x 2 root root   81 Dec 10 23:00 surefire-reports
drwxr-xr-x 3 root root   17 Dec 10 22:59 test-classes
-rw-r--r-- 1 root root 2663 Dec 10 23:00 testweb-0.0.1-SNAPSHOT.jar
 
# 啓動測試下
[root@localhost target]# java -jar testweb-0.0.1-SNAPSHOT.jar
Hello World! i am guo2

 

 注意:若是下載插件錯誤,須要更改鏡像地址:

如下是改爲阿里的鏡像地址,在/data/apache-maven-3.3.9/conf目錄中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[root@localhost conf]# vim settings.xml
<?xml version= "1.0"  encoding= "UTF-8" ?>
<settings xmlns= "http://maven.apache.org/SETTINGS/1.0.0"
           xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation= "http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd" >
<mirrors>  
  <mirror>
             <id>baijia</id>
             <mirrorOf>*</mirrorOf>
             <url>http: //maven.aliyun.com/nexus/content/groups/public/</url>
         </mirror>
     </mirrors>
         <profiles>
          <profile>
             <id> default </id>
             <repositories>
                 <repository>
                     <id> public </id>
                     <url>http: //maven.aliyun.com/nexus/content/groups/public/</url>
                     <releases>
                         <enabled> true </enabled>
                     </releases>
                     <snapshots>
                         <enabled> true </enabled>
                     </snapshots>
                 </repository>
             </repositories>
         </profile>
</profiles>
     <activeProfiles>
         <activeProfile> default </activeProfile>
     </activeProfiles>
</settings>

按版本發佈

  • 安裝git parameter plugin插件
  • 任務配置中勾選<參數化構建過程>
  • 選擇 git parameter
  • 建立變量名release
  • 選擇發佈類型:
  1. tag 按標籤發佈
  2. branch按分支分佈
  3. Revision 按修訂發佈

 

只演示tag標籤發佈,以java2項目爲例:

共分爲三個標籤:v1.0,v1.2,v1.3

 v1.一、v1.2 的tag和以上步驟同樣:

Jenkins上配置:

 

構建成功:

遠程管理

  • SSH plugin
  • Shell ssh
  • ansible【推薦】
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1.安裝ssh plugin插件:
系統管理>SSH remote hosts 增長主機信息
在項目中選擇execute shell scripts  on  remote host  using  ssh
 
2.Shell SSH:
製做jenkins主機免密登陸
 
直接在 execute shell界面執行ssh命令
 
或在腳本中接調用ssh語句
ssh root@192.168.152.140 「ifconfig」
scp love root@192.168.152.141/love/
 
3.ansible:
安裝ansible
配置ansible hosts
配置ansible對其它機器的免密權限
執行ansible 命令

 War文件部署設置

複製代碼
安裝好Deploy Plugin插件,而後在tomcat的conf目錄配置tomcat-users.xml文件,在<tomcat-users>節點裏添加以下內容:
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="username" password="password" roles="manager-gui,manager-script,manager-jmx,manager-status"/>
引號裏的username和password能夠隨便替換,用於部署時認證。
複製代碼

操做界面:
選擇Add post-build action,而後選擇Deploy war/ear to a container,以下圖:

部署說明:

  • WAR/EAR files:war文件的存放位置,如:target/test.war 注意:相對路徑,target前是沒有/的。
  • Context path:訪問時須要輸入的內容,如ofCard訪問時以下:http://192.168.x.x:8080/ofCard/若是爲空,默認是war包的名字。
  • Container:選擇你的web容器,如tomca 6.x
  • Manager user name:填入tomcat-users.xml配置的username內容
  • Manager password:填入tomcat-users.xml配置的password內容
  • Tomcat URL:填入http://192.168.x.x:8080/
  • Deploy on failure:構建失敗依然部署,通常不選擇

任務

  • 構建一個定時清理目標機器日誌的任務
  • 構建一個定時重啓目標機器tomcat進程的任務
  • 執行一次全量備份或增量備份
  • 執行一次版本升級
  • 在完成所有課程以後構建一個PIPLINE。

 Jenkins集羣

建立節點:

  1. 在系統管理中的Configure Global Security中開啓TCP port for JNLP agents,隨機選取或指定端口
  2. 新建節點
  3. 節點名
  4. 執行器數量
  5. 遠程工做目錄(能夠不存在)
  6. 用法-只容許綁定到這臺機器的job
  7. Lanch slave agents on unix machines vis SSH
  8. 增長認證權限
  9. 節點的構建環境要符合job的要求

操做:

# 點擊系統管理--管理節點--新建節點

 

鏈接成功:

 

分配任務到節點:

在任務配置中勾選Restrict where this project can be run

操做:

 

使用場景:

  1. IOS構建
  2. Android構建
  3. Windows項目構建
  4. 大規模高併發任務構建
  5. 特定環境構建

任務:指定一個maven項目在節點01上構建併成功

整合LDAP

Jenkins配置LDAP:

配置說明:

Rootdn 能夠登入jenkins的用戶組
用戶搜索過濾器
    uid={0}                                      linux openladp
    sAMAccountName={0}          windows AD
ManagerDN LDAP超管

超管受權:

 

按角色受權

用戶設置:

1
2
3
4
5
6
7
超管root
team1用戶
team2用戶
用戶關聯本身團隊相關job,沒法查看或執行其它job
 
每一個team新建兩個任務
新建兩個用戶

按角色受權:

1
2
安裝 Role-based Authorization Strategy 插件
Configure Global Security>受權策略>選擇Role-Based Strategy

設置全局角色:

1
2
3
Jekins>系統管理>Manage and Assign Roles>Manage Roles
建立全局角色member(項目用戶進入後能夠讀取和建立Job)
Overall容許read

設置項目角色:

1
2
3
新建project roles
注意pattern的匹配模式是xxx.*
這樣team1只能看到team1開頭的job

全局受權:

1
2
進入Assign Roles
在Global roles中加入team1/team2並受權member

項目受權:

1
在Projects roles中加入team1/team2並進行相應受權

驗證受權:

1
注意若是開放新建權限,則team1建立的job名必須符合規則

Pipeline

Pipeline是部署流水線

Pipline將整個交付過程代碼化

建立pipeline:

複製代碼
建立pipeline
配置pipeline
Hello world
node {   
    stage 'Stage 1'   
    echo 'Hello World 1'   
    stage 'Stage 2'   
    echo 'Hello World 2‘
}
複製代碼

語法生成:

複製代碼
在項目界面點擊Pipeline Syntax

Build a job
Git
Node
sh
Stage

任務:經過pipeline製做一個部署流水線
複製代碼

轉載:https://www.cnblogs.com/luchuangao/p/7748575.html

相關文章
相關標籤/搜索