一凸椿、Jenkins概述
二棘捣、安裝Jenkins
安裝 Java
下載地址:
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
需要注冊(cè)賬戶并登錄后下載
下載源碼包后人芽,解壓
[root@jenkins ~]# ls
anaconda-ks.cfg jdk-8u191-linux-x64.tar.gz
[root@jenkins ~]# tar -xf jdk-8u191-linux-x64.tar.gz -C /usr/local/
[root@jenkins ~]# cd /usr/local/
[root@jenkins ~]# mv jdk1.8.0_191/ java
設(shè)置環(huán)境變量
/etc/profile 文件最后添加以下內(nèi)容
# set java environment
JAVA_HOME=/usr/local/java # java 安裝包的解壓目錄
JRE_HOME=$JAVA_HOME/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH
給環(huán)境變量含義
JAVA_HOME 指明JDK安裝路徑芯义,就是剛才安裝時(shí)解壓所指定的路徑剂桥,此路徑下包括lib凯旭,bin篡石,jre等文件夾(tomcat 的運(yùn)行都需要依靠此變量)芥喇。
CLASSPATH 為java加載類(class or lib)路徑,只有類在classpath中凰萨,java命令才能識(shí)別继控,CLASSPATH變量值中的.表示當(dāng)前目錄
PATH 使得系統(tǒng)可以在任何路徑下識(shí)別java命令。
特別注意:環(huán)境變量值的結(jié)尾沒(méi)有任何符號(hào)沟蔑,不同值之間用:隔開(kāi)
設(shè)置完成后湿诊,重啟或者執(zhí)行如下命令是環(huán)境變量生效
[root@jenkins ~]# source /etc/profile
檢查版本,以檢測(cè)安裝是否成功
[root@jenkins ~]# java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
創(chuàng)建軟連接
因?yàn)?jenkins 啟動(dòng)時(shí)需要
[root@jenkins ~]# ln -s /usr/local/java/bin/java /usr/bin/java
下載并安裝Jenkins
官方網(wǎng)址 https://pkg.jenkins.io/redhat-stable/
[root@jenkins ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
[root@jenkins ~]# rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
[root@jenkins ~]# yum install jenkins
相關(guān)包介紹
/usr/lib/jenkins/jenkins.war WAR包
/etc/sysconfig/jenkins 配置文件
/var/lib/jenkins/ 默認(rèn)的JENKINS_HOME目錄
/var/log/jenkins/jenkins.log Jenkins日志文件
配置與啟動(dòng)
Centos7 中啟動(dòng)方式
[root@jenkins ~]# systemctl start jenkins
Starting jenkins (via systemctl): [ OK ]
如果起動(dòng)時(shí)報(bào)如下錯(cuò)誤:說(shuō)明你沒(méi)有建立軟鏈接
[root@jenkins ~]# systemctl start jenkins
Job for jenkins.service failed because the control process exited with error code. See "systemctl status jenkins.service" and "journalctl -xe" for details.
[root@jenkins ~]# ln -s /usr/local/java/bin/java /usr/bin/java
[root@jenkins ~]# systemctl restart jenkins //然后重啟服務(wù)
centos6 及之前中啟動(dòng)方式
[root@jenkins ~]# /etc/init.d/jenkins start
啟動(dòng)時(shí)報(bào)錯(cuò)
- 以下錯(cuò)誤通常出現(xiàn)在 Docker 的 CentOS7 鏡像中
[root@jenkins ~]# /etc/init.d/jenkins start
/etc/init.d/jenkins: line 59: /etc/init.d/functions: No such file or directory
解決:
在CentOS 7 Docker映像中瘦材,只需要安裝軟件包即可安裝initscripts
此腳本:
yum install -y initscripts
初始化 jenkins
填寫(xiě)初始密碼
在瀏覽器中登錄厅须,初始密碼在如下文件中:
[root@jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
f98778fe35204885bd4e529be632fe82
假如是 Docker 方式構(gòu)建的,密碼可以使用如下命令得到
[root@kvm-docker ~]# docker logs 589ee6c4632b
589ee6c4632b 是容器 ID
瀏覽器登陸:
注意:關(guān)閉防火墻食棕,selinux
如果啟動(dòng)時(shí)一直卡在這個(gè)頁(yè)面:
[root@jenkins ~]# vim /var/lib/jenkins/hudson.model.UpdateCenter.xml
<?xml version='1.1' encoding='UTF-8'?>
<sites>
<site>
<id>default</id>
<url>http://mirror.xmission.com/jenkins/updates/update-center.json</url>
</site>
</sites>
將url改成http://mirror.xmission.com/jenkins/updates/update-center.json
如果生產(chǎn)要求了固定插件朗和,將插件包解壓到一個(gè)目錄错沽,或者壓縮包本身就是一個(gè)目錄,然后將目錄下縮有插件移動(dòng)到/var/lib/jenkins/plugins/眶拉,如果原目錄下有文件千埃,查看權(quán)限,
將其備份忆植,然后將解壓包下所有文件移動(dòng)到/var/lib/jenkins/plugins/放可,查看權(quán)限,然后設(shè)置為和原來(lái)目錄一樣的權(quán)限朝刊,設(shè)置屬主和屬組
點(diǎn)擊 安裝推薦的插件
后期需要什么插件耀里,再在系統(tǒng)管理 中安裝即可
創(chuàng)建管理員用戶
設(shè)置訪問(wèn) Jenkins 的 URL
這個(gè) URL 需要根據(jù)實(shí)際的架構(gòu)場(chǎng)景填寫(xiě)
假如訪問(wèn) Jenkins 的客戶端和 這個(gè) Jenkins 服務(wù)器在同一個(gè)局域網(wǎng)內(nèi)。
可以填寫(xiě)當(dāng)前 Jenkins 服務(wù)器的 IP
假如訪問(wèn) Jenkins 的客戶端和 這個(gè) Jenkins 服務(wù)器不在通一個(gè)局域網(wǎng)中拾氓, 填寫(xiě)的 IP必須保證可以被客戶端訪問(wèn)到冯挎。
當(dāng)然填寫(xiě) Jenkins 服務(wù)器的主機(jī)名也是一樣的道理,但是必須保證可以被客戶端正確解析為 IP咙鞍。
三房官、配置Jenkins
如果你之前創(chuàng)建了管理員用戶就無(wú)法登陸之前的admin,之前的密碼也將失效续滋,你就要使用你之前創(chuàng)建的用戶進(jìn)行登陸
[root@jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
cat: /var/lib/jenkins/secrets/initialAdminPassword: No such file or directory
假如你剛才沒(méi)有創(chuàng)建用戶翰守,可以繼續(xù)使用當(dāng)前已經(jīng)登錄的用戶
admin
登按照如下步驟創(chuàng)建用戶。
登錄
再次登錄地址: http://192.168.0.106:8080
添加用戶
場(chǎng)景: 可以這對(duì)不同角色添加可以訪問(wèn) Jenkins 服務(wù)器的用戶吃粒,并通過(guò)配置用戶的權(quán)限來(lái)控制用戶的操作行為潦俺。
系統(tǒng)管理 --> 管理用戶
頁(yè)面最大化和小窗口的視圖有一些差異
為用戶設(shè)置權(quán)限
系統(tǒng)管理 --> 全局安全配置
將所有的權(quán)限分配給root,然后保存
假如你想為另外一個(gè)用戶 jenkins 添加除了 管理員權(quán)限外的所有權(quán)限徐勃,按照如下方式添加即可。(需要先去創(chuàng)建這個(gè)用戶)
再次點(diǎn)擊 全局安全配置 用上述的方法為剛才創(chuàng)建的用戶 jenkins 添加除了管理員的權(quán)限的其他所有權(quán)限
注銷(xiāo)當(dāng)前管理員用戶后早像,使用新創(chuàng)建的用戶Jenkins登錄驗(yàn)證
會(huì)發(fā)現(xiàn)新用戶 jenkins
沒(méi)有 系統(tǒng)管理 這個(gè)配置項(xiàng)目
添加插件
Jenkins 相當(dāng)于您的管家僻肖,可以給他添加不同的插件,從而讓他具備更多的功能卢鹦。
首先臀脏,需要登陸管理員用戶
系統(tǒng)管理--添加插件
添加ssh、maven等相關(guān)插件
以下插件需要選擇安裝:
Ansible
Git Parameter
Gitlab Hook
GitLab
Maven Invoker
Maven Integration
Publish Over SSH
SSH
Rebuilder
Safe Restart
方法如下圖所示:
不一定在最前面冀自,前面沒(méi)有就往后面找
點(diǎn)擊 直接安裝
按照以上方法揉稚,把其他插件也安裝好
系統(tǒng)管理--系統(tǒng)設(shè)置
系統(tǒng)設(shè)置--指定管理員郵箱地址
系統(tǒng)設(shè)置--設(shè)置郵件通知的SMTP服務(wù)器及其相關(guān)配置
郵箱通知配置的前提是把在自己郵箱的提供商地方開(kāi)通 SMTP 服務(wù),同時(shí)需要客戶端授權(quán)密碼
- SMTP 服務(wù)器 填寫(xiě)自己郵箱的提供商所提供的信息熬粗,主要是指定郵箱發(fā)件服務(wù)器地址搀玖;每個(gè)郵箱都不一定相同,這里是 163 郵箱驻呐。
- 郵件后綴 就是你郵件地址后面的部分灌诅,如賬號(hào): youname@163.com 的后綴就是 @163.com
- 這個(gè)郵箱地址需要和前面配置的管理員郵箱地址一致
- 對(duì)163的郵箱和騰訊的郵箱芳来,這里的密碼并不是你平時(shí)登錄郵箱的密碼,而是通過(guò)郵箱的服務(wù)提供商那里設(shè)置的 客戶端授權(quán)密碼
-
郵件服務(wù)器的監(jiān)聽(tīng)端口猜拾, 不使用 SSL 協(xié)議 的填寫(xiě) 25即舌;勾選 使用SSL協(xié)議的填寫(xiě)465 如下圖所示:
系統(tǒng)設(shè)置--設(shè)置SSH 遠(yuǎn)程服務(wù)器地址及其配置
需要安裝Publish over SSH
插件。
如下方式可以檢查目前都安裝了哪些插件:
此插件可以實(shí)現(xiàn)遠(yuǎn)程自動(dòng)部署挎袜,就是可以通過(guò) Jenkins
主機(jī)顽聂,遠(yuǎn)程連接到 應(yīng)用服務(wù)器,之后把需要部署的應(yīng)用程序部署到應(yīng)用服務(wù)器上.
Jenkins
和 應(yīng)用服務(wù)器的 SSH
連接認(rèn)證盯仪,支持 密碼和 密鑰兩種方式紊搪。
這里演示使用密鑰的認(rèn)證方式和遠(yuǎn)程應(yīng)用服務(wù)器進(jìn)行認(rèn)證連接。
首先需要在 jenkins
主機(jī)上操作磨总,讓?xiě)?yīng)用服務(wù)器對(duì) jenkins
主機(jī)信任嗦明,以便讓 jenkins
主機(jī)可以免密碼登錄到 應(yīng)用服務(wù)器上。
第一步蚪燕,先在 jenkins 主機(jī)上建立自己的密鑰對(duì)兒
[root@jenkins ~]# ssh-keygen
# 執(zhí)行以上命令后娶牌,一路按 回車(chē) 鍵即可把自己的密鑰對(duì)創(chuàng)建成功
第二步,拷貝 jenkins 主機(jī)的公鑰到應(yīng)用服務(wù)器上
還是在 jenkins 主機(jī)上操作
[root@jenkins ~]# ssh-copy-id root@192.168.1.10
注意:
- root 是遠(yuǎn)程應(yīng)用服務(wù)器上應(yīng)用程序的屬主用戶馆纳,就是應(yīng)用服務(wù)器將會(huì)使用 root 這個(gè)用戶進(jìn)行啟動(dòng)相關(guān)應(yīng)用程序诗良,比如 nginx、tomcat 等鲁驶。
- 192.168.1.10 是遠(yuǎn)程應(yīng)用服務(wù)器的 ip
完成以上兩步后就可以配置 Publish over SSH
了
系統(tǒng)管理-->系統(tǒng)設(shè)置 --> Publish overSSH
首先配置 jenkins
主機(jī)的私鑰, 此處也有兩種方式
a. 配置 jenkins
主機(jī) root
用戶的私鑰路徑鉴裹,但是需要把私鑰復(fù)制到 jenkins
程序的家目錄下,這里是 /var/lib/jenkins/
下面我是把私鑰拷貝到 /var/lib/jenkins/.ssh/
下了
[root@jenkins ~]# mkdir /var/lib/jenkins/.ssh
[root@jenkins ~]# cp ~/.ssh/id_rsa /var/lib/jenkins/
修改文件屬主和權(quán)限:
[root@jenkins ~]# cd /var/lib/jenkins/.ssh/
[root@jenkins .ssh]# chown jenkins.jenkins . -R
[root@jenkins .ssh]# chmod 600 id_rsa
之后把這個(gè)路徑 配置在 頁(yè)面中
b. 另一種方式是把私鑰的內(nèi)容之間粘貼到 key 配置項(xiàng)的密鑰框里
[root@jenkins jenkins]# cat .ssh/id_rsa
接著就可以配置遠(yuǎn)程應(yīng)用服務(wù)器的信息了
點(diǎn)擊新增按鈕即可钥弯,此處可以添加多個(gè)径荔,但是需要給這些應(yīng)用服務(wù)器分別建立信任關(guān)系贷盲。
部分設(shè)置項(xiàng)說(shuō)明
- Passphrase:密碼(私鑰的保護(hù)密碼厂抽,如果你設(shè)置了)
- SSH Server Name:這個(gè)連接項(xiàng)的名字(自定義的)
- Hostname:需要ssh 連接的遠(yuǎn)程應(yīng)用服務(wù)器ip地址
- Username:遠(yuǎn)程應(yīng)用服務(wù)器的用戶名,這個(gè)用戶名應(yīng)該已經(jīng)和 jenkins 主機(jī)建立的信任關(guān)系
- Remote Directory:遠(yuǎn)程應(yīng)用服務(wù)器的應(yīng)用程序部署的目錄
注意: 這里的目錄會(huì)作為此服務(wù)器代碼存放的根目錄狭归,之后你
需要把 Maven 打好的包傳到此應(yīng)用服務(wù)器中睛蛛,就是相對(duì)于這個(gè)目錄
來(lái)指的具體的位置的鹦马。比如目前指定的是 /app/code,在構(gòu)建任務(wù)中忆肾,指定構(gòu)建后的 *.jar 包傳到目錄 /student 目錄荸频,實(shí)際在此應(yīng)用服務(wù)器中的完整路徑是 /app/code/student/ 目錄下。 - Use password authentication, or use a different key:使用密碼驗(yàn)證(使用密碼驗(yàn)證時(shí)旭从,需要打開(kāi)此處)
配置完成后可點(diǎn)擊Test Configuration測(cè)試到目標(biāo)主機(jī)的連接,出現(xiàn)success則成功連接
然后點(diǎn)擊保存
系統(tǒng)管理-->全局工具配置
全局工具配置—配置 jdk 環(huán)境
先在 jenkins 主機(jī)上找到 java 的安裝路徑
[root@jenkins jenkins]# echo $JAVA_HOME
/usr/local/java
假設(shè)使用的是 centos7 容器安裝的 Jenkins,需要用 YUM 安裝一下 java 開(kāi)發(fā)包
yum install java-1.8.0-openjdk-develac
之后在頁(yè)面上配置 :
然后點(diǎn)擊應(yīng)用
全局工具配置--配置maven
需要先安裝 maven
安裝方法
Maven
1. 下載 Maven
2. 安裝 Maven
接著使用 wget 下載
wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
安裝
[root@jenkins ~]# tar -xf apache-maven-3.6.3-bin.tar.gz -C /usr/local
[root@jenkins ~]# mv /usr/local/apache-maven-3.6.3/ /usr/local/maven
添加命令執(zhí)行路徑到 環(huán)境變量 PATH 中
echo 'export PATH=$PATH:/usr/local/maven/bin/' > /etc/profile.d/maven.sh
使環(huán)境變量立刻生效
source /etc/profile
驗(yàn)證
[root@jenkins ~]# mvn -v
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /usr/local/maven
Java version: 1.8.0_191, vendor: Oracle Corporation, runtime: /usr/local/java/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-693.el7.x86_64", arch: "amd64", family: "unix"
配置maven
配置Credentials
在Gitlab上創(chuàng)建一個(gè)==Jenkins==用戶:
郵箱必須是真實(shí)的
并將Jenkins用戶加入到相應(yīng)的組(Group)
激活已注冊(cè)的用戶
注冊(cè)用戶時(shí)遇绞,填寫(xiě)的郵箱必須是真實(shí)的键袱,Gitlab Server會(huì)向這個(gè)郵箱發(fā)送一個(gè)設(shè)置密碼鏈接,需要訪問(wèn)這個(gè)鏈接摹闽,才能激活用戶蹄咖。
添加公鑰
把 Jenins root 用戶的公鑰添加到 gitllab
[root@jenkins ~]# cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCuECSSfTSOzHlzk5aULJdDwLku9HysYh8sJ3+G+ogsrUaTdRWA9hyGFT32/ryhpP0XDFJDWA6yvxSK7/OkcdK1TWQxTMZu+6qsMLweEFSjkZ1ozBrzonj13JNo9JGyqMAUU3y37TooRkRGrlVShBS0MxjYIM7NLegBMA3SewjeGkoi33OZIrnZ/nHi+nxDxMgl3KImn/FsS21x3Vk2HBD0jqj0pID+2Ne6gYC6f83trdi+5+7fRf+vD7ZP/lZo3rXGgbPQkh5SERN2XclAPrJUZkDQLGdtmTPLvYWtyxg//B3ZDqvF8cky4kvvnoeefjQc8CgIysJ7uPUzbM4OWiNJ root@biudefor
然后點(diǎn)擊add key添加
在Jenkins中添加相關(guān)的Credentials:
系統(tǒng)設(shè)置-->全局安全設(shè)置
創(chuàng)建 Maven項(xiàng)目(例1)
配置項(xiàng)目的 git 遠(yuǎn)程倉(cāng)庫(kù)地址
遠(yuǎn)程倉(cāng)庫(kù)中要有maven項(xiàng)目
添加訪問(wèn)git server的ssh密鑰(私鑰)
配置 構(gòu)建觸發(fā)器
這里是每周六, 每隔 3 分鐘檢查一次遠(yuǎn)程代碼庫(kù)付鹿,假如有遠(yuǎn)程代碼庫(kù)有新的更新提交, 就會(huì)自動(dòng)擋觸發(fā)構(gòu)建澜汤。定義時(shí)間的方法和 linux 系統(tǒng)中一致。
配置項(xiàng)目中的構(gòu)建(使用maven構(gòu)建包)
配置項(xiàng)目中的構(gòu)建后動(dòng)作
- 這里填寫(xiě)的是打好包的路徑舵匾,是相對(duì)路徑俊抵,相對(duì)于工作空間目錄的,工作空間默認(rèn)是在 $JENKINS_HOEM/workspace 目錄下坐梯。每次新建一個(gè)構(gòu)建任務(wù)時(shí)徽诲,會(huì)在此目錄下創(chuàng)建一個(gè)和任務(wù)名同名的目錄(比如:HelloMaven),在此目錄下存放從遠(yuǎn)程代碼庫(kù)拉取的源代碼吵血,并且構(gòu)建完成的文件(比如jar 包)也會(huì)在 HelloMaven/target 目錄下谎替。
- 是在把打好包的文件傳輸?shù)竭h(yuǎn)程應(yīng)用服務(wù)器時(shí),不希望被創(chuàng)建的目錄名蹋辅。 這個(gè)目錄名必須是在 Source files 選項(xiàng)中填寫(xiě)的路徑最前面的部分中钱贯。
- 遠(yuǎn)程應(yīng)用服務(wù)器的目錄,這個(gè)目錄假如沒(méi)有會(huì)被自動(dòng)創(chuàng)建侦另,但是此目錄是給相對(duì)路徑秩命,相對(duì)于之前在系統(tǒng)設(shè)置中的 SSH Servers 中配置的服務(wù)器端路徑,如下圖中的 /opt
- 指構(gòu)建后在遠(yuǎn)程應(yīng)用服務(wù)器上執(zhí)行的命令褒傅。
注意:這里執(zhí)行命令的用戶同樣是以下圖中的Username 里填寫(xiě)的用戶的身份執(zhí)行的弃锐。假如執(zhí)行命令是執(zhí)行一個(gè)在遠(yuǎn)程應(yīng)用服務(wù)器上的一個(gè)腳本,那么路徑和文件都必須存在殿托,并且拿愧,腳本中的任何相對(duì)路徑都會(huì)相對(duì)于此用戶的家目錄。
在配置完畢的項(xiàng)目上進(jìn)行構(gòu)建
檢查遠(yuǎn)程應(yīng)用服務(wù)器
以下就是構(gòu)建完成后把 target 目錄下的任何 jar包傳輸?shù)竭h(yuǎn)程應(yīng)用服務(wù)器上的 /opt/student
[root@linux ~]# cd /opt/student/
[root@linux student]# ls
my-app-1.0-SNAPSHOT.jar