1. Jenkins是什么?
Jenkins是一個開源的、提供友好操作界面的持續(xù)集成(CI)工具,廣泛用于項目開發(fā),具有自動化構(gòu)建、測試和部署等功能。Jenkins用Java語言編寫,可在Tomcat等流行的servlet容器中運(yùn)行,也可獨(dú)立運(yùn)行。通常與版本管理工具(SCM)、構(gòu)建工具結(jié)合使用。
2.什么是持續(xù)集成(CICD)
因為開發(fā)部門同時維護(hù)多個版本,多個版本的發(fā)布,測試需要大量人力,所以要有一個專業(yè)的持續(xù)集成工具來管理持續(xù)重復(fù)的工作。
個人理解,說白了就是把代碼測試、打包、發(fā)布等工作交給一些工具來自動完成。這樣可以提高效率,減少失誤,開發(fā)人員只需要關(guān)心開發(fā)和提交代碼到Git就可以了。
3. Jenkins的安裝
(1)準(zhǔn)備條件
安裝JDK
①. 配置jdk的環(huán)境變量
#進(jìn)入/etc/profile配置文件 vim /etc/profile
②. 將以下代碼填入到profile文件內(nèi)底
export JAVA_HOME=/usr/wubin/jdk11 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$JAVA_HOME/bin:$PATH
③. 使配置生效
source /etc/profile
javac
輸入javac后出現(xiàn)以下信息則安裝jdk成功!
(2)安裝Jenkins
1. 下載jenkins
wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
2. 啟動jenkins
# 使用nohup命令啟動 nohup 當(dāng)虛擬機(jī)黑屏?xí)r 也會運(yùn)行 日志—>輸出到j(luò)enkins.log & 后臺運(yùn)行
nohup java -jar /usr/wubin/jenkins.war --httpPort=8777 --httpsPort=8778 > /usr/wubin/jenkins.log 2>&1 &
3. 使用tail命令查看啟動日志,日志中會輸出jenkins密碼
4. 通過瀏覽器訪問jenkins(端口號必須為8777)
http://你的ip:8777
點擊安裝推薦的插件
(3)Jenkins中配置JDK路徑
jenkins-》全局工具配置-》JDK-》新增JDK
(4)Jenkins忘記密碼的解決方案
4. 集成Git
為了Jenkins能夠拉取代碼,需要安裝Git環(huán)境和jenkins對應(yīng)的Git插件
(1) CentOS 7 上安裝Git環(huán)境
# 安裝 $ yum install git -y # 查看版本 $ git --version
復(fù)制
(2) Jenkins安裝Git插件
(3) Jenkins配置Git環(huán)境
此處無需在jenkins中配置Git環(huán)境,采用默認(rèn)生成的即可
(4) Gitee上任意建一個倉庫
(5) 測試憑據(jù)是否能夠使用
jenkins-》新建任務(wù)-》自由風(fēng)格項目
進(jìn)入jenkins的工作空間查看文件是否拉取下來,所有拉取的文件都會存放在jenkins工作空間中
到這一步用戶名和密碼方式的憑證已經(jīng)打通Git
5. 憑證配置
憑據(jù)就是用來存儲需要密文保護(hù)的數(shù)據(jù)庫密碼、Gitee密碼信息、Docker私有倉庫密碼等,以便 Jenkins可以和這些第三方的應(yīng)用進(jìn)行交互。
1. 憑證插件安裝Credentials Binding
該插件默認(rèn)在一開始就會被安裝,安裝后在jenkins-》系統(tǒng)管理-》安全欄目會出現(xiàn)Manage Credentials選項,若沒有需要安裝插件并重啟。
6. Maven集成
在jenkins上發(fā)布Java項目時需要使用Maven來進(jìn)行構(gòu)建打包(Gradle項目則需要安裝配置Gradle)
(1) 下載安裝
# 找一個目錄存放maven cd /usr/wubin/ # 從阿里云上下載maven安裝包 wget https://mirrors.aliyun.com/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz # 解壓 tar -zxvf apache-maven-3.6.3-bin.tar.gz # 當(dāng)前maven的安裝目錄為:
/usr/wubin/ apache-maven-3.6.3
(2) 環(huán)境配置
vi /etc/profile 在最后面JDK配置上作出一些更改 export MAVEN_HOME= /usr/wubin/ apache-maven-3.6.3
export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH
復(fù)制
(3) 使配置生效并查看安裝情況
source /etc/profile mvn -version
(4) Jenkins配置Maven
(5) 安裝Maven插件
(6) 在/data/software目錄下新建一個repository文件夾,用來作為maven的倉庫
$ cd /usr/wubin $ mkdir repository
復(fù)制
(7) 使用root賬戶修改Maven的settings.xml文件(指定倉庫目錄和阿里云鏡像)
/data/software/repository ... ... aliyun-maven central aliyun maven mirror http://maven.aliyun.com/nexus/content/groups/public/
復(fù)制
(8) Maven測試項目構(gòu)建
接下來的步驟是將java項目傳到Gitee上供jenkins拉取打包,如果運(yùn)維同學(xué)不懂Java代碼,可以直接將我的Git項目fork或采用gitlab 等其他方式進(jìn)行拉取。
新建Maven項目
在碼云上建一個同名的git項目
使用Git上傳到碼云
使用git bash命令將項目初始化,無論是傳到Gitee、GitHub、GitLab、Codeup步驟一樣,如果對Git的安裝部署不熟悉
# 進(jìn)入到本地的項目文件夾 $ cd existing_folder # 初始化倉庫 $ git init # 添加文件至工作區(qū)并提交 $ git add . $ git commit -m "first commit" # 關(guān)聯(lián)Gitee遠(yuǎn)程倉庫 $ git remote add origin https://gitee.com/nobug8/it235-jenkins-jar.git # 將本地倉庫推送到遠(yuǎn)程倉庫的master分支,此處會彈出用戶名密碼交互 $ git push -u origin master ## 如果push報錯可以先拉取一下,會有新的gitee生成的文件拉下來,然后重新添加提交并push $ git pull origin master --allow-unrelated-histories $ git add . $ git commit -m "拉取下來合并后再次提交" $ git push -u origin master
復(fù)制
(9) Jenkins添加Maven項目任務(wù)
①. 新建任務(wù)
②. 編寫Maven編譯命令
③. 構(gòu)建并查看控制臺日志
保存后,點擊立即構(gòu)建,然后進(jìn)入日志控制臺查看日志
從日志可以看到代碼已經(jīng)在拉取了,而且走的事阿里云倉庫,第一次拉取過程會比較長。
通過查看/data/software/repository可以看到有存放拉取的jar包,通過這2個證據(jù)可以證明settings.xml文件配置成功且有效
構(gòu)建成功后查看jenkins的workspace目錄下的jar包
到此Maven集成完畢
配置Post Steps,選中執(zhí)行shell
7. 配置SSH免密登錄
由于jenkins構(gòu)建消耗內(nèi)存極大,一般jenkins是一臺單獨(dú)的工具機(jī)器,Java項目一般在其他的機(jī)器上,這里我重新安裝一臺虛擬機(jī)
應(yīng)用服務(wù)器信息
IP:192.168.223.129
JDK:1.8
user:root
部署路徑:/data/app/my-boot
端口:9010
免密登錄主要是方便jenkins服務(wù)器192.168.223.128的root用戶—》應(yīng)用服務(wù)器192.168.223.129的root用戶上的jar包拷貝,部署本就是jar包拷貝的過程
在192.168.223.128機(jī)器上使用root用戶生成秘鑰注意此處是root用戶
$ ssh-keygen -t rsa # 3次回車
復(fù)制
運(yùn)行后會在當(dāng)前用戶的根目錄生成一個.ssh文件夾
ssh文件夾中的文件描述
id_rsa: 生成的私鑰文件
id_rsa.pub:生成的公鑰文件
接下來需要將公鑰導(dǎo)入到認(rèn)證文件中
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
復(fù)制
如果希望ssh公鑰生效需滿足至少下面兩個條件:
.ssh目錄的權(quán)限必須是700
.ssh/authorized_keys文件權(quán)限必須是600
給對應(yīng)文件授權(quán)
$ chmod 700 ~/.ssh $ chmod 600 ~/.ssh/authorized_keys
復(fù)制
將authorized_keys文件拷貝到另一臺應(yīng)用服務(wù)器的root用戶.ssh目錄下
# 在應(yīng)用服務(wù)器(192.168.223.129)上用root用戶創(chuàng)建/root/.ssh文件夾 mkdir -p /root/.ssh # 在jenkins服務(wù)器(192.168.223.128)上將pub公鑰文件拷貝到應(yīng)用服務(wù)器的.ssh目錄下 scp -p ~/.ssh/id_rsa.pub root@192.168.223.129:/root/.ssh/authorized_keys
復(fù)制
在jenkins192.168.223.128服務(wù)器上進(jìn)行免密連接測試
# 在jenkins服務(wù)器的/root/目錄下創(chuàng)建filetest文件,并拷貝到應(yīng)用服務(wù)器 $ cd ~/ $ touch filetest $ scp -p filetest root@192.168.223.129:/root/filetest # 進(jìn)入到應(yīng)用服務(wù)器(192.168.223.129),檢查/root目錄下是否出現(xiàn)filetest # 在jenkins服務(wù)器上使用ssh進(jìn)行免密連接測試,成功后會出現(xiàn)Last Login的提示 $ ssh root@192.168.223.129 Last login: Sun Sep 20 21:53:03 2020 $ exit
復(fù)制
到此免密登錄和拷貝實現(xiàn)成功,為接下來jar包部署提供了快捷的幫助
8. 編寫Jenkins發(fā)布腳本
注意下面代碼第6行代碼server_ips=”需要部署到的機(jī)器ip”
#!/bin/bash echo "部署的目錄和項目名稱" DIR="/data/app" projectName="my-boot" echo "待部署的應(yīng)用服務(wù)器,可多臺" server_ips="192.168.223.139" for server_ip in ${server_ips[@]} do echo "ssh連接進(jìn)行備份操作" ssh -Tq -oStrictHostKeyChecking=no root@${server_ip} <
9. 編寫應(yīng)用啟動腳本
在/data/app/my-boot目錄下創(chuàng)建啟動腳本start.sh
$ touch start.sh $ vi start.sh # 將下面代碼粘貼到start.sh中#!/bin/bash set -e #任何命令出錯就退出 set -o pipefail APP_ID=my-boot APP_DIR="/data/app" nohup java -jar ${APP_DIR}/${APP_ID}/${APP_ID}.jar > release_out.log & start_ok=false if [[ $? = 0 ]];then sleep 3 tail -n 10 release_out.log sleep 5 tail -n 50 release_out.log fi aaa=`grep "Started" release_out.log | awk '{print $1}'` if [[ -n "${aaa}" ]];then echo "Application started ok" exit 0 else echo "Application started error" exit 1 fi
在/data/app/my-boot目錄下創(chuàng)建停止腳本stop.sh
$ touch stop.sh $ vi stop.sh # 將下面代碼粘貼到stop.sh中#!/bin/bash APP_ID=my-boot ps aux | grep ${APP_ID} | grep -v "grep" | awk '{print "kill -9 "$2}' | sh
并進(jìn)行啟動和停止測試,查看日志輸出是否正常
將下述啟動代碼配置jenkins中
sh $DIR/${projectName}/stop.sh sh $DIR/${projectName}/start.sh
訪問并測試代碼是否生效
如果是虛擬機(jī)則需要給防火墻添加9010端口
$ su root # 開啟防火墻9010端口 $ firewall-cmd --zone=public --add-port=9010/tcp --permanent # 使配置生效 $ firewall-cmd --reload
復(fù)制
修改代碼返回值,提交至Gitee,并再次進(jìn)行構(gòu)建發(fā)布,訪問http://192.168.223.129:9010查看結(jié)果是否更新
鏈接:https://www.cnblogs.com/smile635664087/p/16922110.html
-
JAVA
+關(guān)注
關(guān)注
19文章
2975瀏覽量
105149 -
開源
+關(guān)注
關(guān)注
3文章
3407瀏覽量
42713 -
代碼
+關(guān)注
關(guān)注
30文章
4827瀏覽量
69054 -
腳本
+關(guān)注
關(guān)注
1文章
392瀏覽量
14938
原文標(biāo)題:9. 編寫應(yīng)用啟動腳本
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論