jdk1.8的Jenkins安裝配置實踐
Jenkins介紹

Jenkins 是一款流行的開源持續(xù)集成(Continuous Integration)工具,廣泛用于項目開發(fā),具有自動化構(gòu)建、測試和部署等功能。官網(wǎng): Jenkins。
Jenkins的特征:
開源的 Java語言開發(fā)持續(xù)集成工具,支持持續(xù)集成,持續(xù)部署。
易于安裝部署配置:可通過 yum安裝,或下載war包以及通過docker容器等快速實現(xiàn)安裝部署,可方便web界面配置管理。
消息通知及測試報告:集成 RSS/E-mail通過RSS發(fā)布構(gòu)建結(jié)果或當構(gòu)建完成時通過e-mail通知,生成JUnit/TestNG測試報告。
分布式構(gòu)建:支持 Jenkins能夠讓多臺計算機一起構(gòu)建/測試。
文件識別: Jenkins能夠跟蹤哪次構(gòu)建生成哪些jar,哪次構(gòu)建使用哪個版本的jar等。
豐富的插件支持:支持擴展插件,你可以開發(fā)適合自己團隊使用的工具,如 git,svn,maven,docker等。
Jenkins安裝和持續(xù)集成環(huán)境配置

1 )首先,開發(fā)人員每天進行代碼提交,提交到Git倉庫
2)然后,Jenkins作為持續(xù)集成工具,使用Git工具到Git倉庫拉取代碼到集成服務器,再配合JDK,Maven等軟件完成代碼編譯,代碼測試與審查,測試,打包等工作,在這個過程中每一步出錯,都重新再執(zhí)行一次整個流程。
3)最后,Jenkins把生成的jar或war包分發(fā)到測試服務器或者生產(chǎn)服務器,測試人員或用戶就可以訪問應用。
Jenkins環(huán)境搭建
Jenkins安裝配置
1.采用YUM方式安裝
加入jenkins安裝源:
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo --no-check-certificate rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
執(zhí)行yum命令安裝:
yum -y install jenkins
2.采用RPM安裝包方式【推薦】
wget https://repo.huaweicloud.com/jenkins/redhat-stable/jenkins-2.346.3-1.1.noarch.rpm
執(zhí)行安裝:
rpm -ivh jenkins-2.346.3-1.1.noarch.rpm
配置:
修改jenkins配置-添加自己的jdk路徑
vim /etc/init.d/jenkins

修改配置文件:
vi /etc/sysconfig/jenkins
修改內(nèi)容:
# 修改為對應的目標用戶, 這里使用的是root $JENKINS_USER="root" # 服務監(jiān)聽端口 JENKINS_PORT="16060"
目錄權(quán)限:
chown -R root:root /var/lib/jenkins chown -R root:root /var/cache/jenkins chown -R root:root /var/log/jenkins
啟動:
/etc/init.d/jenkins start #啟動服務 #其他指令 ./jenkins stop #關閉服務 ./jenkins restart #重啟服務
如果啟動失敗, 出現(xiàn)錯誤信息:
Starting Jenkins bash: /usr/bin/java: No such file or directory
創(chuàng)建JAVA環(huán)境的軟鏈接:
ln -s /usr/local/jdk/bin/java /usr/bin/java
3.docker安裝
拉取鏡像
docker pull jenkins/jenkins:lts
創(chuàng)建文件夾
mkdir -p /mydata/jenkins_home chown -R 1000 /mydata/jenkins_home/
運行鏡像
docker run -di --name=jenkins -p 8080:8080 -v /mydata/jenkins_home/:/var/jenkins_home jenkins/jenkins:lts
4.管理后臺初始化設置
http://192.168.2.4:8080/
需要輸入管理密碼, 在以下位置查看:
#docker安裝 docker logs jenkins #yum安裝 cat /var/lib/jenkins/secrets/initialAdminPassword

按默認設置,把建議的插件都安裝上

這一步等待時間較長, 安裝完成之后, 創(chuàng)建管理員用戶:

配置訪問地址:

配置完成之后, 會進行重啟, 之后可以看到管理后臺:

Jenkins插件安裝
在實現(xiàn)持續(xù)集成之前, 需要確保以下插件安裝成功。
Maven Integration plugin: Maven 集成管理插件。
Docker plugin: Docker集成插件。
GitLab Plugin: GitLab集成插件。
Publish Over SSH:遠程文件發(fā)布插件。
SSH: 遠程腳本執(zhí)行插件。
安裝方法:
進入【系統(tǒng)管理】-【插件管理】
點擊標簽頁的【可選插件】
在過濾框中搜索插件名稱

勾選插件, 點擊直接安裝即可。
注意,如果沒有安裝按鈕,需要更改配置
在安裝插件的高級配置中,修改升級站點的連接為:http://updates.jenkins.io/update-center.jsonhttp://updates.jenkins.io/update-center.jsonhttps://jenkins-zh.gitee.io/update-center-mirror/tsinghua/update-center.json保存
或者從這個網(wǎng)站獲取對應jenkins版本的升級站點
Index of /jenkins/updates/ | 清華大學開源軟件鏡像站 | Tsinghua Open Source Mirror
?
然后到Jenkins安裝服務器上,全局查找
find / -name default.json
找到后,進入文件目錄,備份該文件
cp default.json default.json.bak
在同目錄下載該文件,并修改文件名為default.json
# 下載 wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/dynamic-stable-2.346.3/update-center.json --no-check-certificate # 改名 mv update-center.json default.json
Git安裝配置
1.yum 安裝方式
yum -y install git
2.采用源碼包方式安裝
安裝依賴包
yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel yum -y install gcc perl-ExtUtils-MakeMaker
如果之前有安裝舊版本, 先做卸載, 沒有安裝則忽略
yum remove git
下載源碼包
cd /usr/local wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-1.8.3.1.tar.gz tar -xvf git-1.8.3.1.tar.gz
也可以安裝其他版本, 地址:Index of /pub/software/scm/git/
編譯安裝
cd git-1.8.3.1 make prefix=/usr/local/git all make prefix=/usr/local/git install echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc source /etc/bashrc
3.檢查git版本
git version
Maven安裝配置
1.下載安裝包
下載地址: Maven – Download Apache Maven
2.解壓安裝包
cd /usr/local unzip -o apache-maven-3.6.1-bin.zip
上傳本地倉庫并解壓
?
3.配置
環(huán)境變量配置
vi /etc/profile
增加:
export MAVEN_HOME=/usr/local/maven/apache-maven-3.6.1 export PATH=$PATH:$MAVEN_HOME/bin
如果權(quán)限不夠,則需要增加當前目錄的權(quán)限
chmod 777 /usr/local/apache-maven-3.6.1/bin/mvn
修改鏡像倉庫配置:
vi /usr/local/apache-maven-3.6.1/conf/settings.xml
需要把本機的倉庫打包上傳到服務器上(不上傳會自動下載)
然后指定上傳后的倉庫配置
?
Jenkins工具配置
進入【系統(tǒng)管理】--> 【全局工具配置】
?
MAVEN配置全局設置
?
指定JDK配置
?
指定MAVEN 目錄
?
指定DOCKER目錄
?
如果不清楚docker的安裝的目錄,可以使用whereis docker 命令查看docker的安裝的目錄
SSH配置
進入【系統(tǒng)管理】--> 【憑據(jù)】--> 【全局】
?
添加憑證
?
進入【系統(tǒng)管理】--> 【系統(tǒng)配置】
配置SSH
?
持續(xù)集成應用
應用集成Docker配置
目標:部署的每一個微服務都是先創(chuàng)建docker鏡像后創(chuàng)建對應容器啟動
方式一:本地微服務打包以后上傳到服務器,編寫Dockerfile文件完成。
方式二:使用dockerfile-maven-plugin插件,可以直接把微服務創(chuàng)建為鏡像使用(更省事)
以demo應用為例
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.2</version>
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>demo</description>
<properties>
<docker.image>docker_storage</docker.image>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<build>
<finalName>heima-leadnews-user</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.3.6</version>
<configuration>
<repository>${docker.image}/${project.artifactId}</repository>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
</plugins>
</build>
</project>
應用集成Dockerfile文件
# 設置JAVA版本
FROM openjdk:8
# 指定存儲卷, 任何向/tmp寫入的信息都不會記錄到容器存儲層
VOLUME /tmp
# 拷貝運行JAR包
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
# 設置JVM運行參數(shù), 這里限定下內(nèi)存大小,減少開銷
ENV JAVA_OPTS="\
-server \
-Xms256m \
-Xmx512m \
-XX:MetaspaceSize=256m \
-XX:MaxMetaspaceSize=512m"
#空參數(shù),方便創(chuàng)建容器時傳參
ENV PARAMS=""
# 入口點, 執(zhí)行JAVA運行命令
ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS /app.jar $PARAMS"]放到與pom同級
?
jenkins應用打包配置
以demo應用為例
1.新建任務
?
?
2.找到自己指定的git倉庫,設置用戶名和密碼
找到自己指定的git倉庫
?
設置gitee用戶和密碼
?
配置gitee
?
3.執(zhí)行maven命令
?
?
clean install -Dmaven.test.skip=true dockerfile:build -f pom.xml
注意:根據(jù)自己的實際代碼路徑配置
- -Dmaven.test.skip=true 跳過測試
- dockerfile:build 啟動dockerfile插件構(gòu)建容器
- -f pom.xml 指定需要構(gòu)建的文件(必須是pom)
4.并執(zhí)行shell腳本
?
?
if [ -n "$(docker ps -a -f name=$JOB_NAME --format '{{.ID}}' )" ]
then
#刪除之前的容器
docker rm -f $(docker ps -a -f name=$JOB_NAME --format '{{.ID}}' )
fi
# 清理鏡像
docker image prune -f
# 啟動docker服務
docker run -d --net=host -e PARAMS="--spring.profiles.active=prod" --name $JOB_NAME docker_storage/$JOB_NAME5.執(zhí)行日志
拉取代碼

編譯打包

構(gòu)建鏡像

清理容器,創(chuàng)建新的容器

測試
訪問應用

jenkins觸發(fā)器配置
URL觸發(fā)遠程構(gòu)建
觸發(fā)遠程構(gòu)建,修改jenkins的配置,如下

觸發(fā)構(gòu)建url: http://192.168.200.100:16060/job/leadnews-admin/build?token=88888888
其他工程構(gòu)建后觸發(fā)
配置需要觸發(fā)的工程

定時構(gòu)建
定時構(gòu)建( Build periodically)

定時字符串從左往右分別為: 分 時 日 月 周
定時構(gòu)建-定時表達式
定時字符串從左往右分別為: 分 時 日 月 周
| 組成部分 | 含義 | 取值范圍 |
| 第一部分 | minute (分) | 0~59 |
| 第二部分 | hour(小時) | 0~23 |
| 第三部分 | day(天) | 1~31 |
| 第四部分 | month(月) | 1~12 |
| 第五部分 | week(周) | 0~7,0 和 7 都是表示星期天 |
- 符號H 表示一個隨機數(shù)
- 符號* 取值范圍的任意值
案例:
- 每30分鐘構(gòu)建一次:H/30 * * * * 10:02 10:32
- 每2個小時構(gòu)建一次: H H/2 * * *
- 每天的8點,12點,22點,一天構(gòu)建3次: (多個時間點中間用逗號隔開) 0 8,12,22 * * *
- 每天中午12點定時構(gòu)建一次 H 12 * * *
- 每天下午18點定時構(gòu)建一次 H 18 * * *
輪詢
輪詢 SCM(Poll SCM)
輪詢SCM,是指定時掃描本地代碼倉庫的代碼是否有變更,如果代碼有變更就觸發(fā)項目構(gòu)建。

Jenkins會定時掃描本地整個項目的代碼,增大系統(tǒng)的開銷,不建議使用。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java使用ProcessBuilder?API優(yōu)化流程
Java?的?Process?API?為開發(fā)者提供了執(zhí)行操作系統(tǒng)命令的強大功能,這篇文章將詳細介紹如何使用?ProcessBuilder?API?來方便的操作系統(tǒng)命令,需要的可以收藏一下2023-06-06
SpringBoot?@Scheduled?Cron表達式使用方式
這篇文章主要介紹了SpringBoot?@Scheduled?Cron表達式使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-03-03
Spring Boot 實現(xiàn)敏感詞及特殊字符過濾處理
這篇文章主要介紹了SpringBoot實現(xiàn)敏感詞及特殊字符過濾處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06

