目录
一、Jenkins+Docker+SpringCloud 持续集成流程说明
大致流程说明:
- 开发人员每天把代码提交到 Gitlab 代码仓库。
- Jenkins 从 Gitlab 中拉取项目源码,编译并打成 jar 包,然后构建成 Docker 镜像,将镜像上传到 Harbor 私有仓库。
- Jenkins 发送 SSH 远程命令,让生产部署服务器到 Harbor 私有仓库拉取镜像到本地,然后创建容器。
- 最后,用户可以访问到容器。
服务器名称 | IP 地址 | 安装的软件 |
---|---|---|
安装的软件 | 192.168.10.20 | Gitlab |
Gitlab | 192.168.10.30 | Jenkins,Maven,Git,JDK,Sonarqube,Docker20.10.12-ce |
Docker 仓库服务器 | 192.168.10.40 | JDK,Tomcat,Docker20.10.12-ce,Harbor1.9.2 |
生产部署服务器 | 192.168.10.50 | Docker20.10.12-ce |
二、利用 Jenkins 打包微服务项目
1. 生成公共子工程 pom 文件
1.1 修改 Jenkinsfile
//git 的凭证
def git_auth="0b127895-eb97-4f8f-b471-1277e5549b54"
//git 的 URL
def git_url="git@192.168.10.20:test-group/tensquare_back.git"
node {
stage('pull code') {
//切换成变量,字符串符号使用双引号
checkout([$class: 'GitSCM', branches: [[name: "*/${branch}"]], extensions: [], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_url}"]]])
}
stage('check code') {
//定义SonarQubeScanner工具
def scannerHome = tool 'sonar-scanner'
//引用SonarQube系统环境
withSonarQubeEnv('sonarqube') {
sh """
cd ${project_name}
${scannerHome}/bin/sonar-scanner
"""
}
}
//添加公共子工程
stage('make install public sub project') {
sh "mvn -f tensquare_common clean install"
}
}
1.2 修改各个 pom.xml
把 parent 父工程 pom.xml 中的 maven 插件代码移至除了 tensquare_common 以外每个子工程 pom.xml 中
修改 tensquare_parent 的 pom.xml
大框和小框中间是多余的部分,删掉或注释。
<plugin>
<!--提供打包(将应用打包成可执行的jar包)-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
tensquare_common 中 pom 配置
不需要动。
其他微服务 pom 中的配置部分
应该已经有了,没有就添加。
提交整个代码
jenkinsfile 构建
查看 tensquare_common-1.0-SNAPSHOT.pom
[root@c7-2 ~]#ll /root/repo/com/tensquare/tensquare_common/1.0-SNAPSHOT/tensquare_common-1.0-SNAPSHOT.pom
-rw-r--r-- 1 root root 725 Feb 25 16:07 /root/repo/com/tensquare/tensquare_common/1.0-SNAPSHOT/tensquare_common-1.0-SNAPSHOT.pom
2. 开始编译打包所有微服务项目
2.1 修改 Jenkinsfile 并提交
//git 的凭证
def git_auth="0b127895-eb97-4f8f-b471-1277e5549b54"
//git 的 URL
def git_url="git@192.168.10.20:test-group/tensquare_back.git"
node {
stage('pull code') {
//切换成变量,字符串符号使用双引号
checkout([$class: 'GitSCM', branches: [[name: "*/${branch}"]], extensions: [], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_url}"]]])
}
stage('check code') {
//定义SonarQubeScanner工具
def scannerHome = tool 'sonar-scanner'
//引用SonarQube系统环境
withSonarQubeEnv('sonarqube') {
sh """
cd ${project_name}
${scannerHome}/bin/sonar-scanner
"""
}
}
//添加公共子工程
stage('make install public sub project') {
sh "mvn -f tensquare_common clean install"
}
//打包微服务项目
stage('make package') {
sh "mvn -f ${project_name} clean package"
}
}
提交
2.2 打包微服务项目
① 构建 eureka 服务
查看
[root@c7-2 /var/lib/jenkins/workspace/tensquare_back/tensquare_eureka_server/target]#ls
classes generated-sources maven-archiver maven-status tensquare_eureka_server-1.0-SNAPSHOT.jar tensquare_eureka_server-1.0-SNAPSHOT.jar.original
[root@c7-2 /var/lib/jenkins/workspace/tensquare_back/tensquare_eureka_server/target]#pwd
/var/lib/jenkins/workspace/tensquare_back/tensquare_eureka_server/target
② 构建 zuul 服务
Jenkins 服务器中并没有 tensquare_parent 工程,而 zuul 需要依赖这个工程。解决方法:传递父工程进 Jenkins 仓库。
wget http://49.232.8.65/tensquare/tensquare_parent.zip
开始构建