实现效果
根据用户选择的发布环境参数,把spring boot应用发布到对应的远程服务器上。
使用Docker安装Jenkins
CentOS7安装Docker
- 安装Docker依赖的包
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
- 设置使用Docker稳定版安装源
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
- 安装Docker最新社区版
sudo yum install docker-ce
- 设置Docker开机自启动
sudo systemctl enable docker
- 启动Docker服务
sudo systemctl start docker
- 验证Docker是否安装成功
sudo docker run hello-world
下载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
- 下载最新Jenkins WAR包
- 运行命令
java -jar jenkins.war
配置Jenkins
1.在浏览器输入http://服务器IP:8080
2.在服务器获取管理员初始密码
vi /usr/local/jenkins/secrets/initialAdminPassword
也可使用
docker logs jenkins
3.自定义Jenkins,选择安装推荐的插件
4.创建第一个管理员账号
5.安装Maven 3.6
在 系统管理->全局工具配置里,点击新增Maven,输入Maven3,然后点击保存按钮
在 系统设置->插件管理->可选插件 搜索 Maven Integration。选中点击安装
6.安装Publish Over SSH远程部署插件
在 系统设置->插件管理->可选插件 搜索 Publish Over SSH。选中点击安装
7.配置SSH远程服务器
在 系统设置->系统设置里,配置Publish Over SSH插件
点击新增,增加开发环境服务器
点击高级,勾选 Use password authentication, or use a different key,输入远程服务器密码
点击 Test Configuration,测试配置是否成功
添加测试环境服务器
创建Jenkins发布任务
1.新建maven项目
2.勾选 参数化构建过程,添加 选项参数
3.添加spring boot应用源代码gitlab仓库
源码管理选择 Git
点击Add按钮,添加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/* ./
6.设置maven命令参数
clean package -Dmaven.test.skip=true
7.添加构建后操作
点击 Add post-build step->执行 shell
// 拷贝maven打包的jar包到对应发布环境的脚本目录
cp target/app-1.0.0.jar ICCProjectCD/$ENV/script/
继续点击 Add post-build step->Send files or execute commands over SSH,添加开发环境发布服务器
点击高级,勾选 Label,输入 dev,dev对应上面定义的$ENV变量中的dev值
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
继续点击 Add Server,添加测试环境发布服务器。勾选 Label,输入 test,test对应上面定义的$ENV变量中的test值
点击高级,配置参数化发布
勾选 Parameterized publishing,输入上面定义的发布环境变量ENV。每次构建任务的时候,会根据ENV变量的值匹配各个远程服务器的Label,从而实现多环境的部署。
点击保存按钮,发布任务创建完成。
最后,Jenkins所有构建任务存储在jenkins_home下的workspace目录,可以到这个目录下调试构建脚本。