Jenkins持续部署(微服务架构项目部署)

Posted pandied

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jenkins持续部署(微服务架构项目部署)相关的知识,希望对你有一定的参考价值。

目录

一、持续集成

1.什么是持续集成

2 持续交付

3 持续集成的作用

二、Jenkins介绍

三、Jenkins安装

1.安装Jenkins

2.配置jenkins  

​3.插件安装

四、任务构建

1.新建任务

​2.源码管理

​3.maven设置

4.远程设置

5.构建任务

6.构建启动脚本


一、持续集成

1.什么是持续集成

        持续集成要求每当有人提交代码时,就对整个应用进行构建,并对其执行全面的自动化测试集合。而且至关重要的是,假如构建或测试过程失败,研发团队就要停下手中的工作,立即修复它。持续集成的目标是让正在开发的软件一直处于可工作状态。  

持续集成的前提条件

  • 频繁提交

  • 创建全面的自动化测试套件(单元测试、组件测试和验收测试)

  • 保持较短的构建和测试过程

  • 管理开发工作区

持续集成必不可少的实践  

  • 构建失败之后不要提交新代码

  • 提交前在本地运行所有的提交测试,或者让持续集成服务器完成此事

  • 等提交测试通过后再继续工作

  • 回家之前,构建必须处于成功状态

  • 时刻准备着回滚到前一个版本

  • 在回滚之前要规定一个修复时间

  • 不要将失败的测试注释掉

  • 为自己导致的问题负责

  • 测试驱动的开发

2 持续交付

        持续交付让软件产品的产出过程在一个短周期内完成,以保证软件可以稳定、持续的保持在随时发布的状况。它的目标在于让软件的构建、测试与发布变得更快以及更频繁。这种方式可以减少软件开发的成本与时间,减少风险。

持续交付的原则  

  • 为软件的发布创建一个可重复且可靠的过程

  • 将几乎所有事情自动化

  • 把所有的东西都纳入版本控制

  • 提前并频繁地做让你感到痛苦的事

  • 内建质量(越早发现缺陷,修复成本越低)

  • 一个特性只有交到用户手中才能算「已完成」

  • 交付过程是每个成员的责任

  • 持续改进

3 持续集成的作用

        保证团队开发人员提交代码的质量,减轻了软件发布时的压力; 持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减少重复 过程以节省时间、费用和工作量;  

二、Jenkins介绍

 

        Jenkins是一个开源的、可扩展的持续集成、交付、部署(软件/代码的编译、打包、部署)的基于web界面的平台。允许持续集成和持续交付项目,无论用的是什么平台,可以处理任何类型的构建或持续集成。  

        官网:Jenkins

        官方文档:Jenkins User Documentation

三、Jenkins安装

1.安装Jenkins

下载jenkins  

docker pull jenkins/jenkins:lts-centos7 

 创建jenkins容器

docker run -d --name myjenkins -p 8888:8080 jenkins/jenkins:lts-centos7

2.配置jenkins  

        第一次使用jenkins需要做很多配置,将资源中的 default.json maven的安装包 jdk的安装包上传到linux服务器,配置时会使用到。  

1)镜像加速

jenkins官方镜像下载速度特别慢,需要配置国内镜像。

参考解决方法:

jenkins安装插件很慢,提速的解决方法,亲测有效_未兆的博客-CSDN博客

2)访问配置

 输入 http://192.168.12.128:8888 访问jenkins,提示需要解锁

# 进入到容器
docker exec -it -u root myjenkins bash

# 查看密钥
cat /var/jenkins_home/secrets/initialAdminPassword

复制密钥 到浏览器 并点击继续

jenkins的很多功能都需要插件来完成,我们先安装好推荐的插件

等待插件安装:

如果镜像没配置成功这里会超级慢

3)新建用户

填写用户名密码后点击保存并完成

弹出的实例IP没问题也是保存并完成,然后点击开始使用jenkins

用户名pandie/123456

进入到jenkins欢迎页面

3.插件安装

1)安装Maven插件  

手动安装插件maven插件,如果缺少Maven IntegrationPlugin插件,在创建job时,不会有新建一个maven项目选项。

在Jenkins首页选择 Manage Jenkins -> Manage Plugins

选择 可选插件,搜索 Maven Integration。直接安装即可。

2)安装 Publish Over SS

重复上述步骤,安装对应插件即可。  

3)安装git插件

和上面一样 安装git插件  

4)全局工具配置

将maven和jdk的压缩包拷贝到容器中

# 将资源拷贝到容器
docker cp ./jdk-8u45-linux-x64.rpm myjenkins:/usr/local/
docker cp ./apache-maven-3.6.3-bin.tar.gz myjenkins:/usr/local/

# 进入容器 以root用户角色进入
docker exec -it -u root myjenkins bash

安装jdk

cd /usr/local
# 安装jdk 会被安装到这个目录: /usr/java/jdk1.8.0_221-amd64
rpm -ivh jdk-8u171-linux-x64.rpm

# 配置环境变量
vi /etc/profile

export JAVA_HOME=/usr/java/jdk1.8.0_221-amd64
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

# 使配置生效
source /etc/profile

安装maven

cd /usr/local
# 解压maven
tar -zxvf apache-maven-3.6.3-bin.tar.gz

# 配置阿里云镜像 /usr/local/apache-maven-3.6.3/conf
vi /usr/local/apache-maven-3.6.3/conf/settings.xml


<!-- 阿里云仓库 -->
<mirror>
	<id>alimaven</id>
	<mirrorOf>central</mirrorOf>
	<name>aliyun maven</name>  		    <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>

① 全局工具配置-jdk

点击 系统管理 --> 全局工具配置  

点击新增jdk

② 全局工具配置-maven

③ 远端服务器配置

当自动构建完成之后,会将打包好的工程,经由网络传输到其他服务器,但是需要配置  

四、任务构建

1.新建任务

 在Jenkins首页创建 新任务

在创建任务页面,输入任务名称,同时选择构建maven项目

2.源码管理

选择 源码管理 -> Git。设置当前Gitlab仓库地址和认证信息  

对于认证信息,点击添加。在页面中,类型:Username with password。用户名:git用户名 。密码:git密码。点击添加即可。

注意:如果当前是公共仓库,不需要设置认证信息。如果是私有仓库,则需要。

3.maven设置

选择Build选项  

输入maven指令。用于清除、打包,最后点击“保存”按钮

然后 应用 保存!

4.远程设置

jenkins会自动的将打包好的jar包,推送到其他服务器。

5.构建任务

返回首页,在列表中找到我们刚才创建的任务  

点击右边的绿色箭头按钮,即可执行此任务。

点击后,在首页左下角会显示构建的进度条。

点击进度条,则可以进入到构建详情页面中。直至构建成功。  

当构建成功,其会把war包生成,放入服务器jenkins目录中。

6.构建启动脚本

创建启动脚本文件app.sh  

#!/bin/sh
APP_NAME=/root/tanhua/tanhua-server/tanhua-server.jar
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk 'print $2' `
if [ -n "$pid" ]
then
   kill -9 $pid
fi
BUILD_ID=DONTKILLME
/usr/local/jdk1.8.0_201/bin/java -jar  -Xmx256m -Xms128m  $APP_NAME > /dev/null 2>&1 &

设置权限

chmod u+x app.sh

clean package -pl xc-model-basic/xc-basic-service -am -DskipTests

Jenkins—— Jenkins+Docker+SpringCloud微服务持续集成

Jenkins+Docker+SpringCloud持续集成流程说明

在这里插入图片描述

  1. 开发人员每天把代码提交到Gitlab代码仓库
  2. Jenkins从Gitlab中拉取项目源码,编译并打成jar包,然后构建成Docker镜像,将镜像上传到Harbor私有仓库
  3. Jenkins发送SSH远程命令,让生产部署服务器到Harbor私有仓库拉取镜像到本地,然后创建容器
  4. 最后,用户可以访问到容器

SpringCloud微服务源码概述

  • 项目架构:前后端分离

  • 后端技术栈:SpringBoot+SpringCloud+SpringDataJpa

  • 微服务项目结构:
    在这里插入图片描述

    • tensquare_parent:父工程,存放基础配置
    • tensquare_common:通用工程,存放工具类
    • tensquare_eureka_server:SpringCloud的Eureka注册中心
    • tensquare_zuul:SpringCloud的网关服务
    • tensquare_admin_service:基础权限认证中心,负责用户认证(使用JWT认证)
    • tensquare_gathering:一个简单的业务模块,活动微服务相关逻辑
  • 数据库结构:

    • tensquare_user:用户认证数据库,存放用户账户数据。对应tensquare_admin_service微服务
    • tensquare_gathering:活动微服务数据库。对应tensquare_gathering微服务
  • 微服务配置分析:

    • tensquare_eureka
    • tensquare_zuul
    • tensquare_admin_service
    • tensquare_gathering

本地部署

逐一启动微服务

  1. 运行eureka服务器
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    通过浏览器进入localhost:10086
    在这里插入图片描述

  2. 开启网关zuul
    在这里插入图片描述
    在这里插入图片描述

  3. 开启权限中心
    在这里插入图片描述
    在这里插入图片描述

  4. 开启微服务
    在这里插入图片描述
    都成功启动
    在这里插入图片描述

SpringCloud微服务部署

首先需要导入插件
在pom.xml里添加
在这里插入图片描述

 <plugin>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-maven-plugin</artifactId>
 </plugin>
  1. SpringBoot微服务项目打包
    在这里插入图片描述
    在这里插入图片描述

    生成的jar包在target下面
    在这里插入图片描述
    本地运行微服务的jar包

    java -jar xxx.jar

    我们可以使用cmd运行一下
    在这里插入图片描述

在这里插入图片描述

使用Dockerfile制作微服务镜像

安装docker


安装需要的安装包
yum install -y yum-utils

设置镜像仓库
我们用阿里云

yum-config-manager \\
    --add-repo \\
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新yum软件包索引
yum makecache fast

安装docker	docker-ce 社区
yum -y install docker-ce docker-ce-cli containerd.io

启动docker
systemctl start docker

查看版本
docker version

将eureka的jar包上传至服务器

mkdir /root/eureka
mv tensquare_eureka_server-1.0-SNAPSHOT.jar /root/eureka/

cd /root/eureka/
vim Dockerfile

FROM openjdk:8-jdk-alpine 
ARG JAR_FILE 
COPY ${JAR_FILE} app.jar 
EXPOSE 10086 
ENTRYPOINT ["java","-jar","/app.jar"]

docker build --build-arg JAR_FILE=tensquare_eureka_server-1.0-SNAPSHOT.jar -t eureka:v1 

构建完成之后查看

[root@jenkins eureka]# docker images
REPOSITORY   TAG            IMAGE ID       CREATED         SIZE
eureka       v1             255f6b6c7c53   4 seconds ago   150MB
openjdk      8-jdk-alpine   a3562aa0b991   2 years ago     105MB

验证镜像是否成功
docker run -di -p 10086:10086 eureka:v1

查看日志
docker logs -f 容器id

浏览器访问
在这里插入图片描述

Harbor镜像仓库安装及使用

  • Harbor(港口,港湾)是一个用于存储和分发Docker镜像的企业级Registry服务器。
  • 除了Harbor这个私有镜像仓库之外,还有Docker官方提供的Registry。相对Registry,Harbor具有很多优势:
    1. 提供分层传输机制,优化网络传输
      Docker镜像是是分层的,而如果每次传输都使用全量文件(所以用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象。
    2. 提供WEB界面,优化用户体验
      只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界面可以支持登陆、搜索功能,包括区分公有、私有镜像。
    3. 支持水平扩展集群
      当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分解。
    4. 良好的安全机制
      企业中的开发团队有很多不同的职位,对于不同的职位人员,分配不同的权限,具有更好的安全性。

Harbor安装

我们在harbor服务器上进行安装

安装docker和compose

安装需要的安装包
yum install -y yum-utils

设置镜像仓库
我们用阿里云

yum-config-manager \\
    --add-repo \\
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装docker
yum install docker-ce docker-ce-cli containerd.io

systemctl enable docker --now

下载安装compose
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m) > /usr/local/bin/docker-compose  

授权
chmod +x /usr/local/bin/docker-compose 

查看版本
docker-compose version

安装harbor
下载地址

下载完毕之后上传至服务器

tar xf harbor-offline-installer-v1.9.2.tgz -C /usr/local

cd /usr/local/harbor

修改harbor.yml 文件里面的hostname 改成本机地址
vim harbor.yml
hostname: 192.168.188.103

端口改成85 就不会与80冲突
port: 85

拉取镜像命令
./prepare 

安装
./install.sh

当完成安装后,即可通过本机地址进行浏览器的访问

账户名为admin,密码默认为Harbor12345
在这里插入图片描述

在Harbor创建用户和项目

创建项目

Harbor的项目分为公开和私有的:

  • 公开项目:所有用户都可以访问,通常存放公共的镜像,默认有一个library公开项目。
  • 私有项目:只有授权用户才可以访问,通常存放项目本身的镜像。

我们可以为微服务项目创建一个新的项目

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
创建用户
在这里插入图片描述
在这里插入图片描述
密码Xiaotian123

给私有项目分配用户
在这里插入图片描述
在这里插入图片描述

把镜像上传到Harbor

  1. 给镜像打上标签

    [root@jenkins eureka]# docker images
    REPOSITORY   TAG            IMAGE ID       CREATED          SIZE
    eureka       v1             255f6b6c7c53   32 minutes ago   150MB
    openjdk      8-jdk-alpine   a3562aa0b991   2 years ago      105MB
    
    docker tag eureka:v1 192.168.188.103:85/tensquare/eureka:v1
    
    [root@jenkins eureka]# docker images
    REPOSITORY                           TAG            IMAGE ID       CREATED          SIZE
    192.168.188.103:85/tensquare/eureka   v1             255f6b6c7c53   33 minutes ago   150MB
    eureka                               v1             255f6b6c7c53   33 minutes ago   150MB
    openjdk                              8-jdk-alpine   a3562aa0b991   2 years ago      105MB
    
  2. 把Harbor地址加入到Docker信任列表

    vi /etc/docker/daemon.json
    
    {
    "registry-mirrors": ["https://zydiol88.mirror.aliyuncs.com"],
    "insecure-registries": ["192.168.188.103:85"]
    }
    
    重启docker
    
  3. 登录Harbor

    docker login 192.168.188.103:85 -u maomao -p Xiaotian123
    
  4. 推送镜像

    docker push 192.168.188.103:85/tensquare/eureka:v1
    

仓库里面有了上传的镜像
在这里插入图片描述

从Harbor下载镜像

在192.168.188.102服务器下载镜像

vi /etc/docker/daemon.json

{
"registry-mirrors": ["https://zydiol88.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.188.103:85"]
}

systemctl daemon-reload 
systemctl restart docker

先登录,再从Harbor下载镜像

[root@tomcat ~]# docker login 192.168.188.103:85 -u maomao -p Xiaotian123 
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

拉取镜像
docker pull 192.168.188.103:85/tensquare/eureka:v1

docker images

微服务持续集成

项目代码上传到Gitlab

上传后台微服务和前端web网站代码

首先去gitlab上面创建项目
在这里插入图片描述
在这里插入图片描述
我们在这个组里就有新建的两个项目
在这里插入图片描述
上传代码,通过IDEA操作

Add添加到本地缓冲区
在这里插入图片描述
将代码提交到本地代码仓库
在这里插入图片描述
在这里插入图片描述
新建一个仓库地址
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

推送代码至仓库

在这里插入图片描述
项目已经成功提交
在这里插入图片描述
前端代码我们通过Git小乌龟来上传
安装地址

在代码目录 右键 选择在这创建版本库
在这里插入图片描述

右键 选择commit
在这里插入图片描述

选择推送 将代码推送远程仓库
在这里插入图片描述

设置仓库地址
在这里插入图片描述
在这里插入图片描述
填写仓库用户和密码
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
到此为止 代码都已经上传至仓库

从Gitlab拉取项目源码

我们进入jenkins构建后端流水线项目
在这里插入图片描述
添加参数
在这里插入图片描述

选择SCM 脚本上传至仓库
配置git地址 通过ssh拉取
在这里插入图片描述
打开IDEA 在工程根目录下面创建一个Jenkinsfile

打开流水线语法
在这里插入图片描述
帮助我们生成脚本
在这里插入图片描述
我们可以定义变量

//git凭证ID
def git_auth = "41580d48-d4c3-4116-9a71-4d4d777c5753"
// git的url地址
def git_url = "git@192.168.188.97:maomao_group/tensquare_back.git"


node {
   stage('拉取代码') {
      checkout([$class: 'GitSCM', branches: [[name: "*/${branch}"]], extensions: [], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_url}"]]])
   }

}

上传Jenkinsfile文件
在这里插入图片描述
在这里插入图片描述
开始构建项目
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意 脚本里面一定要注意格式和语法,自己因为冒号的原因,错了三次才改正过来

提交到SonarQube代码审查

在tensquare_back项目里,添加两个参数
这个参数选择选项参数(Choice Parameter)
在这里插入图片描述
添加需要选择审查的名字
在这里插入图片描述

这时候构建就可以选择需要审查的代码
在这里插入图片描述
接下来配置sonarkube文件

在eureka_server根目录创建sonar-project.properties
在这里插入图片描述
eureka_server

# must be unique in a given SonarQube instance
sonar.projectKey=tensquare_eureka_server
# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.
sonar.projectName=tensquare_eureka_server
sonar.projectVersion=1.0

# Path is relative to the sonar-project.properties file. Replace "\\" by "/" on Windows.
# This property is optional if sonar.modules is set.
sonar.sources=.
sonar.exclusions=**/test/**,**/target/**
sonar.java.binaries=.

sonar.java.source=1.8
sonar.java.target=1.8
#sonar.java.libraries=**/target/classes/**

# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8

然后再相应的目录里添加不同的sonar-project.properties

zull

# must be unique in a given SonarQube instance
sonar.projectKey=tensquare_zuul
# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.
sonar.projectName=tensquare_zuul
sonar.projectVersion=1.0

# Path is relative to the sonar-project.properties file. Replace "\\" by "/" on Windows.
# This property is optional if sonar.modules is set.
sonar.sources=.
sonar.exclusions=**/test/**,**/target/**
sonar.java.binaries=.

sonar.java.source=1.8
sonar.java.target=1.8
#sonar.java.libraries=**/target/classes/**

# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8

admin_service

# must be unique in a given SonarQube instance
sonar.projectKey=tensquare_admin_service
# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.
sonar.projectName=tensquare_admin_service
sonar.projectVersion=1.0

# Path is relative to the sonar-project.properties file. Replace "\\" by "/" on Windows.
# This property is optional if sonar.modules is set.
sonar.sources=.
sonar.exclusions=**/test/**,**/target/**
sonar.java.binaries=.

sonar.java.source=1.8
sonar.java.target=1.8
#sonar.java.libraries=**/target/classes/**

# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8

gathering

# must be unique in a given SonarQube instance
sonar.projectKey=tensquare_gathering
# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.
sonar.projectName=tensquare_gathering
sonar.projectVersion=1.0

# Path is relative to the sonar-project.properties file. Replace "\\" by "/" on Windows.
# This property is optional if sonar.modules is set.
sonar.sources=.
sonar.exclusions=**/test/**,**/target/**
sonar.java.binaries=.

sonar.java.source=1.8
sonar.java.target=1.8
#sonar.java.libraries=**/target/classes/**

# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8

修改Jenkinsfile脚本

//git凭证ID
def git_auth = "41580d48-d4c3-4116-9a71-4d4d777c5753"
// git的url地址
def git_url = "git@192.168.188.97:maomao_group/tensquare_back.git"


node {
   stage('拉取代码') {
      checkout([$class: 'GitSCM', branches: [[name: "*/${branch}"]], extensions: [], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_url}"]]])
   }
   stage('代码审查') {
        //定义了当前Jenkins的SonarQubeScanner工具环境     在全局工具配置里查看
        def scannerHome = tool 'sonar-scanner'
        //引用当前JenkinsSonarQube环境    在系统配置里查看
        withSonarQubeEnv('sonarqube') { 
             sh """ 
                    cd ${project_name}  
                    ${scannerHome}/bin/sonar-scanner 
                """
        }
   }

}

push代码至仓库 然后构建项目
在这里插入图片描述
查看控制台输出

开始审查代码
在这里插入图片描述
构建成功
在这里插入图片描述
来到sonarkube后台查看审查结果
在这里插入图片描述
然后我们把剩下三个代码也进行审查
在这里插入图片描述
在这里插入图片描述
没有问题
在这里插入图片描述

将微服务打包成jar包

第一步 需要对一个公共的子工程进程编译,安装

在Jenkinsfile里添加一个步骤

//git凭证ID
def git_auth = "41580d48-d4c3-4116-9a71-4d4d777c5753"
// git的url地址
def git_url = "git@192.168.188.97:maomao_group/tensquare_back.git"


node {
   stage('拉取代码') {
      checkout([$class: 'GitSCM', branches: [[name: "*/${branch}"]], extensions: [], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_url}"]]])
   }
   stage('代码审查') {
        //定义了当前Jenkins的SonarQubeScanner工具环境     在全局工具配置里查看
        def scannerHome = tool 'sonar-scanner'
        //引用当前JenkinsSonarQube环境    在系统配置里查看
        withSonarQubeEnv('sonarqube') {
             sh """
                    cd ${project_name}
                    ${scannerHome}/bin/sonar-scanner
                """
        }
   }
   stage('编译,安装公共子工程') {
        sh "mvn -f tensquare_common clean install"
   }

}

将脚本上传至git仓库,再尝试进行一次构建
在这里插入图片描述
在这里插入图片描述
进行打包
在这里插入图片描述
构建成功
在这里插入图片描述
在这里插入图片描述

如果失败的话,进入IDEA
将tensquare_parent父工程里面的 spring-boot-maven插件移走 移到需要项目打包的项目里去

tensquare_common子工程不需要这个插件

只需要将插件加入tensquare_eureka_server、tensquare_admin_service、tensquare_gathering、tensquare_zuul

<build>
       <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

调整好之后,继续编写Jenkinsfile,需要打包其他微服务了

//git凭证ID
def git_auth = "41580d48-d4c3-4116-9a71-4d4d777c5753"
// git的url地址
def git_url = "git@192.168.188.97:maomao_group/tensquare_back.git"


node {
   stage('拉取代码') {
      checkout([$class: 'GitSCM', branches: [[name: "*/${branch}"]], extensions: [], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_url}"]]])
   }
   stage('代码审查') {
        //定义了当前Jenkins的SonarQubeScanner工具环境     在全局工具配置里查看
        def scannerHome = tool 'sonar-scanner'
        //引用当前JenkinsSonarQube环境    在系统配置里查看
        withSonarQubeEnv('sonarqube') {
             sh """
                    cd ${project_name}
                    ${scannerHome}/bin/sonar-scanner
                """
        }
   }
   stage('编译,安装公共子工程') {
        sh "mvn -f tensquare_common clean install"
   }
   // 这里project_name就是参数 选择对谁打包
   stage('编译,安装公共子工程') {
           sh "mvn -f ${project_name} clean package"
   }

}

对eureka服务进行打包
在这里插入图片描述
在这里插入图片描述
通过目录也可以看见 tensquare_admin_service没有进行打包
tensquare_eureka_server进行了打包 target下有jar包
在这里插入图片描述
接下来将其它三个微服务以同样方式打包
但是在打包tensquare_zuul报错了
在这里插入图片描述
因为网关依赖父工程,但是仓库里的父工程没有

因此我们需要手动将父工程pom.xml文件传到Jenkins服务器里

在这里插入图片描述

在这里插入图片描述
再次重新构建
在这里插入图片描述
这次找到父工程的pom文件之后 打包成功
在这里插入图片描述
然后将剩下两个微服务打包构建
在这里插入图片描述
除了第二次打包网关失败 其余都成功了

使用Dockerfile编译、生成镜像

利用dockerfile-maven-plugin插件构建Docker镜像

在每个微服务项目的pom.xml加入dockerfile-maven-plugin插件

我们可以在之前spring-boot-maven-plugin插件下面添加dockerfile-maven-plugin插件

<build>
       <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            以上是关于Jenkins持续部署(微服务架构项目部署)的主要内容,如果未能解决你的问题,请参考以下文章

基于Jenkins,docker实现自动化部署(持续交付)

16.1-Jenkins持续集成01—Jenkins服务搭建和部署

微服务下的持续集成-Jenkins自动化部署GitHub项目

天啦噜!看国外大神如何用Docker+Jenkins&CI/CD打造微服务架构?

jenkins+docker+gitlab+harbor+pipeline快速部署发版流程

服务治理平台-注册中心