Jenkins实现spring boot应用多环境部署

实现效果

根据用户选择的发布环境参数,把spring boot应用发布到对应的远程服务器上。


Jenkins实现spring boot应用多环境部署_第1张图片
发布任务效果

使用Docker安装Jenkins

CentOS7安装Docker
  1. 安装Docker依赖的包
sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2
  1. 设置使用Docker稳定版安装源
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
  1. 安装Docker最新社区版
sudo yum install docker-ce
  1. 设置Docker开机自启动
sudo systemctl enable docker
  1. 启动Docker服务
sudo systemctl start docker
  1. 验证Docker是否安装成功
sudo docker run hello-world
Jenkins实现spring boot应用多环境部署_第2张图片
Docker安装成功
下载Jenkins镜像并启动Jenkins容器
docker run \
  --name jenkins \
  --restart=always \
  -u root \
  -d \
  -p 8080:8080 \
  -p 50000:50000 \
  -v /usr/local/jenkins:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  jenkinsci/blueocean

--name jenkins 容器名为jenkins
 --restart=always Docker服务重启后总是重启该容器
 -u root 容器内使用root用户
-d 容器在后台运行
 -p 8080:8080 映射容器内8080端口到宿主机的8080端口
 -v /usr/local/jenkins:/var/jenkins_home 映射容器内的/var/jenkins_home目录到宿主机的 /usr/local/jenkins目录
jenkinsci/blueocean 使用的Jenkins镜像名称

也可使用war包安装Jenkins

  1. 下载最新Jenkins WAR包
  2. 运行命令
java -jar jenkins.war

配置Jenkins

1.在浏览器输入http://服务器IP:8080


Jenkins实现spring boot应用多环境部署_第3张图片
解锁 Jenkins

2.在服务器获取管理员初始密码

vi /usr/local/jenkins/secrets/initialAdminPassword

也可使用
docker logs jenkins
管理员初始密码

3.自定义Jenkins,选择安装推荐的插件


Jenkins实现spring boot应用多环境部署_第4张图片
自定义Jenkins

4.创建第一个管理员账号


Jenkins实现spring boot应用多环境部署_第5张图片
创建第一个管理员账号

5.安装Maven 3.6
在 系统管理->全局工具配置里,点击新增Maven,输入Maven3,然后点击保存按钮
Jenkins实现spring boot应用多环境部署_第6张图片
安装Maven

Jenkins实现spring boot应用多环境部署_第7张图片
安装Maven

在 系统设置->插件管理->可选插件 搜索 Maven Integration。选中点击安装


Jenkins实现spring boot应用多环境部署_第8张图片
安装Maven Integration插件

6.安装Publish Over SSH远程部署插件
在 系统设置->插件管理->可选插件 搜索 Publish Over SSH。选中点击安装
安装Publish Over SSH插件

7.配置SSH远程服务器
在 系统设置->系统设置里,配置Publish Over SSH插件
Jenkins实现spring boot应用多环境部署_第9张图片
配置SSH远程服务器

点击新增,增加开发环境服务器
Jenkins实现spring boot应用多环境部署_第10张图片
开发环境服务器

点击高级,勾选 Use password authentication, or use a different key,输入远程服务器密码
远程服务器密码

点击 Test Configuration,测试配置是否成功


测试远程连接成功

添加测试环境服务器
Jenkins实现spring boot应用多环境部署_第11张图片
测试环境服务器

创建Jenkins发布任务

1.新建maven项目


Jenkins实现spring boot应用多环境部署_第12张图片
新建maven项目

2.勾选 参数化构建过程,添加 选项参数


Jenkins实现spring boot应用多环境部署_第13张图片
添加发布参数

3.添加spring boot应用源代码gitlab仓库
源码管理选择 Git
Jenkins实现spring boot应用多环境部署_第14张图片
源码管理

点击Add按钮,添加gitlab同步代码的账号


Jenkins实现spring boot应用多环境部署_第15张图片
添加gitlab账号

Jenkins实现spring boot应用多环境部署_第16张图片
添加gitlab账号

3.勾选 Delete workspace before build starts,每次构建任务前删除上次任务构建的应用源代码,全量从gitlab重新拉取
构建环境

4.在gitlab服务器上创建一个新项目,用于存储不同发布环境的配置文件和应用启动/停止脚本。我创建的项目名称为ICCProjectCD ,目录结构如下:
├── dev  // 开发环境
│   ├── config
│   │   ├── application.properties
│   │   ├── logback.xml
│   │   └── mysql.properties // mysql数据库账号
│   └── script
│       ├── start.sh  // java -jar 启动应用
│       └── stop.sh  // 杀掉java进程,终止应用
├── prod  // 生产环境
│   ├── config
│   │   ├── application.properties
│   │   ├── logback.xml
│   │   └── mysql.properties
│   └── script
│       ├── start.sh
│       └── stop.sh
└── test  // 测试环境
    ├── config
    │   ├── application.properties
    │   ├── logback.xml
    │   └── mysql.properties
    └── script
        ├── start.sh
        └── stop.sh

5.添加构建前操作


添加构建前操作

点击 Add pre-build step->执行 shell

// 从gitlab拉取不同发布环境的配置文件
git clone http://gitlab用户名:gitlab密码@192.168.0.91/deploy/ICCProjectCD.git
// $ENV是上面步骤定义的发布环境变量
// 根据用户选择的发布环境,把应用源代码中的配置文件替换为对应发布环境的配置文件
cp -r ICCProjectCD/$ENV/config/* ./
Jenkins实现spring boot应用多环境部署_第17张图片
替换配置文件

6.设置maven命令参数

clean package -Dmaven.test.skip=true
Jenkins实现spring boot应用多环境部署_第18张图片
maven命令参数

7.添加构建后操作


Jenkins实现spring boot应用多环境部署_第19张图片
添加构建后操作

点击 Add post-build step->执行 shell

// 拷贝maven打包的jar包到对应发布环境的脚本目录
cp target/app-1.0.0.jar ICCProjectCD/$ENV/script/
Jenkins实现spring boot应用多环境部署_第20张图片
拷贝jar包

继续点击 Add post-build step->Send files or execute commands over SSH,添加开发环境发布服务器


Jenkins实现spring boot应用多环境部署_第21张图片
添加开发环境发布服务器

点击高级,勾选 Label,输入 dev,dev对应上面定义的$ENV变量中的dev值


Jenkins实现spring boot应用多环境部署_第22张图片
添加开发环境发布服务器

Source files:需要发送到远程服务器的文件,可以使用通配符和Jenkins变量
Remove prefix:删除目录前缀,填ICCProjectCD/dev/script意思是不创建ICCProjectCD/dev/script这些目录
Remote directory:文件发送到远程服务器的哪个目录下。因为我设置的远程连接账号是root,默认是远程服务器的root目录。填jenkins,会在root目录下创建jenkins目录。

Exec command:文件发送到远程服务器后,在远程服务器上执行的命令

// 进入应用发布目录
cd /root/jenkins
// 设置脚本可执行权限
chmod +x *.sh
// 停止应用
./stop.sh
// 启动应用
./start.sh
Jenkins实现spring boot应用多环境部署_第23张图片
设置远程拷贝

继续点击 Add Server,添加测试环境发布服务器。勾选 Label,输入 test,test对应上面定义的$ENV变量中的test值


Jenkins实现spring boot应用多环境部署_第24张图片
添加测试环境发布服务器

点击高级,配置参数化发布


配置参数化发布

勾选 Parameterized publishing,输入上面定义的发布环境变量ENV。每次构建任务的时候,会根据ENV变量的值匹配各个远程服务器的Label,从而实现多环境的部署。
配置参数化发布

点击保存按钮,发布任务创建完成。

最后,Jenkins所有构建任务存储在jenkins_home下的workspace目录,可以到这个目录下调试构建脚本。

你可能感兴趣的:(Jenkins实现spring boot应用多环境部署)