前言
持續(xù)集成和持續(xù)交付一直是當(dāng)下流行的開(kāi)發(fā)運(yùn)維方式,CICD省去了大量的運(yùn)維時(shí)間,也能夠提高開(kāi)發(fā)者代碼集成規(guī)范。開(kāi)發(fā)者在開(kāi)發(fā)完需求功能后可以直接提交到gitee,然后jenkins直接進(jìn)行代碼編譯和一體化流水線部署。通過(guò)流水線部署可以極大的提高devops效率,也是企業(yè)信息自動(dòng)化的一種體現(xiàn)。
Jenkins部署
Jenkins是一個(gè)開(kāi)源軟件項(xiàng)目,是基于Java開(kāi)發(fā)的一種持續(xù)集成工具,用于監(jiān)控持續(xù)重復(fù)的工作,旨在提供一個(gè)開(kāi)放易用的軟件平臺(tái),使軟件項(xiàng)目可以進(jìn)行持續(xù)集成。
Jenkins部署可以直接物理部署和容器部署,本次我們直接用docker容器化部署。
創(chuàng)建Jenkins docker-compose
由于高版本一些插件不能完全下載,今天我們使用較低的版本進(jìn)行演示,一般情況下還是夠用了。
[root@localhost app]# pwd
/app
[root@localhost app]# vim docker-compose-jenkins.yaml
version: '3'
services:
jenkins:
image: registry.cn-hangzhou.aliyuncs.com/senfel/jenkins:2.346.1
container_name: jenkins
restart: unless-stopped #指定容器退出后的重啟策略為始終重啟,但是不考慮在Docker守護(hù)進(jìn)程啟動(dòng)時(shí)就已經(jīng)停止了的容器
volumes:
- "/usr/bin/docker:/usr/bin/docker"
- "/var/run/docker.sock:/var/run/docker.sock"
- "/usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7"
- "./jenkins/jenkins_home:/var/jenkins_home"
- "./jenkins/jenkins_config:/var/jenkins_config"
environment:
TZ: Asia/Shanghai
LANG: en_US.UTF-8
JAVA_OPTS: '-Xmx2048M -Xms2048M -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:MaxNewSize=128m -Djava.util.logging.config.file=/var/jenkins_home/log.properties -Duser.timezone=Asia/Shanghai'
user: root
ports:
- "10000:8080"
配置maven源
創(chuàng)建maven配置文件目錄
[root@localhost app]# mkdir -p jenkins/jenkins_home/appconfig/maven
新增settings.xml
[root@localhost app]# vim jenkins/jenkins_home/appconfig/maven/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">
<pluginGroups>
</pluginGroups>
<proxies>
</proxies>
<servers>
</servers>
<mirrors>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
<localRepository>/root/.m2</localRepository>
<profiles>
<profile>
<id>jdk-1.8</id>
<activation>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
</settings>
啟動(dòng)Jenkins容器安裝插件
[root@localhost app]# docker-compose -f docker-compose-jenkins.yaml up -d
瀏覽器http://10.10.22.91:10000
等待初始化完成解鎖Jenkins
獲取初始密碼
[root@localhost app]# cat jenkins/jenkins_home/secrets/initialAdminPassword
安裝推薦插件
創(chuàng)建用戶并配置實(shí)例
安裝Docker Pipleline插件
在 系統(tǒng)設(shè)置->Configure Global Security”,不驗(yàn)證ssh可用性
Gitee ssh公匙配置與測(cè)試項(xiàng)目提交
1、進(jìn)入docker容器創(chuàng)建rsa
[root@localhost app]# docker exec -it jenkins bash
root@c781568bbe98:/# ssh-keygen -t rsa -C “senfel@sina.cn”
后續(xù)步驟全部enter
查看公匙并配置在gitee ssh
root@c781568bbe98:/# cat /root/.ssh/id_rsa.pub
查看私匙并記住后面jenkins創(chuàng)建流水線配置憑證
root@c781568bbe98:/# cat /root/.ssh/id_rsa
2、準(zhǔn)備一個(gè)項(xiàng)目, 在根目錄下創(chuàng)建兩個(gè)文件Dockerfile、 Jenkinsfile
Dockerfile
FROM openjdk:8-jre-alpine
# 將當(dāng)前目錄下的jar包復(fù)制到docker容器的/目錄下
COPY target/*.jar /app.jar
# 運(yùn)行過(guò)程中創(chuàng)建一個(gè)xx.jar文件
RUN touch /app.jar;
ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms128m -Xmx256m -Djava.security.egd=file:/dev/./urandom"
ENV PARAMS=""
# 聲明服務(wù)運(yùn)行在8080端口
EXPOSE 8080
# 指定docker容器啟動(dòng)時(shí)運(yùn)行jar包
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -jar /app.jar $PARAMS" ]
Jenkinsfile
pipeline{
agent any
environment {
WS = "${WORKSPACE}"
IMAGE_NAME = "demo"
}
//定義流水線的加工流程
stages {
//流水線的所有階段
stage('step1:env check'){
steps {
sh 'pwd && ls -alh'
sh 'printenv'
sh 'docker version'
sh 'java -version'
sh 'git --version'
}
}
stage('step2:compile'){
agent {
docker {
image 'maven:3-alpine'
args '-v maven-repository:/root/.m2'
}
}
steps {
sh 'pwd && ls -alh'
sh 'mvn -v'
sh 'cd ${WS} && mvn clean package -s "/var/jenkins_home/appconfig/maven/settings.xml" -Dmaven.test.skip=true'
}
}
stage('step3:package'){
steps {
sh 'pwd && ls -alh'
sh 'docker build -t ${IMAGE_NAME} .'
}
}
stage('step4:arrange'){
// 刪除容器和虛懸鏡像
steps {
sh 'pwd && ls -alh'
sh 'docker rm -f ${IMAGE_NAME} || true && docker rmi $(docker images -q -f dangling=true) || true'
sh 'docker run -d -p 8888:8088 --name ${IMAGE_NAME} -v /app/logs/${IMAGE_NAME}:/logs/${IMAGE_NAME} ${IMAGE_NAME}'
}
}
}
}
3、提交到Gitee
Jenkins創(chuàng)建流水線
1、控制臺(tái)-新建item
2、直接進(jìn)入流水線選項(xiàng)進(jìn)行g(shù)it配置
2.1 添加憑證
2.2 填入gitee 代碼倉(cāng)庫(kù)和選擇喜歡的分支
3、流水線進(jìn)行構(gòu)建演示
3.1 進(jìn)入我們自建流水線demo,點(diǎn)擊立即構(gòu)建
3.2 查看構(gòu)建視圖
如圖所示:構(gòu)建成功
3.3 工作臺(tái)查看流水線
如圖所示:流水線demo上次構(gòu)建成功
3.4 驗(yàn)證demo項(xiàng)目部署功能
GET 10.10.22.91:8888/hello
經(jīng)測(cè)試,功能正常,流水線部署成功。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-621203.html
寫在最后
實(shí)戰(zhàn):Docker+Jenkins+Gitee構(gòu)建CICD流水線還是較為簡(jiǎn)單,本次我們引入了Docker Pipleline進(jìn)行我們項(xiàng)目從gitee直接流水線話構(gòu)建部署。當(dāng)然我們也可以按照Generic Webhook Trigger插件進(jìn)行自動(dòng)觸發(fā)構(gòu)建,也是比較簡(jiǎn)單。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-621203.html
到了這里,關(guān)于實(shí)戰(zhàn):Docker+Jenkins+Gitee構(gòu)建CICD流水線的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!