CI/CD概述
001 持续集成(Continuous Integration,CI):代码合并、构建、部署、测试都在一起,不断地执行这个过程,并对结果反馈。
002 持续部署(Continuous Deployment,CD):部署到测试环境、预生产环境、生产环境。
003 持续交付(Continuous Delivery,CD):将最终产品发布到生产环境,给用户使用。
CI工作流程设计

1638841737250.png
Gitlab
root 12345678
[root@es3 ~]# cd tomcat-java-demo-master
git config --global user.email "lql_h@163.com"
git config --global user.name "root"
git init
git remote add origin http://192.168.153.18/root/tomcat-java-demo2.git
git add .
git commit -m "Initial commit"
git push -u origin master

1638842465059.png
jenkins
准备JDK和Maven环境
#将二进制包上传到服务器并解压到工作目录,用于让Jenkins容器挂载使用
[root@es3 ~]# mv jdk1.8.0_45/ /usr/local/jdk
[root@es3 ~]# mv apache-maven-3.5.0 /usr/local/maven
修改Maven源
[root@es3 conf]# vi /usr/local/maven/conf/settings.xml
<mirrors>
<mirror>
<id>central</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
运行jenkins
docker run -d --name jenkins -p 81:8080 -p 50000:50000 -u root \
-v /opt/jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-v /usr/local/maven:/usr/local/maven \
-v /usr/local/jdk:/usr/local/jdk \
-v /etc/localtime:/etc/localtime \
--restart=always \
--name jenkins jenkins/jenkins
-----------------------------------------------------------------------------------
[root@es3 conf]# docker logs jenkins -f
Please use the following password to proceed to installation:
8d0c4f351338468e8b62e292d3e42444
安装插件
修改下载源
[root@es3 conf]# cd /opt/jenkins_home/updates
[root@es3 updates]# sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json
[root@es3 updates]# sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
重启生效
[root@es3 updates]# docker restart jenkins
安装git插件和pipeline插件并重启

1638844277273.png
发布测试
在jenkins容器中验证登录
[root@es3 updates]# docker exec -it jenkins bash
root@238483a2c2d7:/# echo "192.168.153.27 reg.pcitc.com" >> /etc/hosts
root@238483a2c2d7:/# docker login reg.pcitc.com
Username: admin
Password:
Login Succeeded
参数设置
def registry = "reg.pcitc.com"
def project = "welcome"
def app_name = "demo"
def image_name = "${registry}/${project}/${app_name}:${Branch}-${BUILD_NUMBER}"
def git_address = "http://192.168.153.18/root/tomcat-java-demo2.git"
def docker_registry_auth = "1f782a60-8e66-49a8-b154-bd303a663302"
def git_auth = "16932e0a-d8e8-4d6a-a07e-0adee8aa0dd6"
project

1638845206597.png

1638846293491.png
Branch
New Item -> Pipeline -> This project is parameterized -> String Parameter
- Name:Branch # 变量名,下面脚本中调用
- Default Value:master # 默认分支
- Description:发布的代码分支 # 描述

1638845619414.png
添加凭据
管理Jenkins->安全-->管理凭据->Jnekins->添加凭据->Username with password
- Username:用户名
- Password:密码
- ID:留空
- Description:描述

1638845883318.png
Pipeline脚本
#!/usr/bin/env groovy
def registry = "reg.pcitc.com"
def project = "welcome"
def app_name = "demo"
def image_name = "${registry}/${project}/${app_name}:${Branch}-${BUILD_NUMBER}"
def git_address = "http://192.168.153.18/root/tomcat-java-demo2.git"
def docker_registry_auth = "1f782a60-8e66-49a8-b154-bd303a663302"
def git_auth = "16932e0a-d8e8-4d6a-a07e-0adee8aa0dd6"
pipeline {
agent any
stages {
stage('拉取代码'){
steps {
checkout([$class: 'GitSCM', branches: [[name: '${Branch}']], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_address}"]]])
}
}
stage('代码编译'){
steps {
sh """
pwd
ls
JAVA_HOME=/usr/local/jdk
PATH=$JAVA_HOME/bin:/usr/local/maven/bin:$PATH
mvn clean package -Dmaven.test.skip=true
"""
}
}
stage('构建镜像'){
steps {
withCredentials([usernamePassword(credentialsId: "${docker_registry_auth}", passwordVariable: 'password', usernameVariable: 'username')]) {
sh """
echo '
FROM ${registry}/library/tomcat:v1
LABEL maitainer lizhenliang
RUN rm -rf /usr/local/tomcat/webapps/*
ADD target/*.war /usr/local/tomcat/webapps/ROOT.war
' > Dockerfile
docker build -t ${image_name} .
docker login -u ${username} -p '${password}' ${registry}
docker push ${image_name}
"""
}
}
}
stage('部署到Docker'){
steps {
sh """
docker rm -f tomcat-java-demo |true
docker container run -d --name tomcat-java-demo -p 88:8080 ${image_name}
"""
}
}
}
}
访问
http://192.168.153.27:88/
网友评论