原理图
操作步骤
实验主机:172.16.250.13
、172.16.250.14
、172.16.250.15
、172.16.250.17
。
一、搭建 Jenkins
安装插件 Publish Over SSH
把实验主机都录入 Publish over SSH
二、创建 dockerfile 文件
在项目根目录创建 dockerfile
文件:
# 使用 oracle 官方的 jdk 镜像
FROM openjdk:11.0.13-oraclelinux7
# 将 jar 包添加到容器中并命名为 app.jar,该文件会被放到容器的根目录
ADD ruoyi-admin/target/learning-platform.jar app.jar
# 运行 jar 包
ENTRYPOINT ["java","-jar","/app.jar"]
三、创建 jenkins.sh 脚本文件
在根目录下创建 jenkins/jenkins.sh
,这个脚本用于打包 maven 项目,构建 docker 镜像,推送构建的镜像到远程仓库:
#!/bin/bash
IMAGE_NAME=registry.cn-shenzhen.aliyuncs.com/runqin-default/learning-platform:latest
docker login --username=广州润沁教育科技有限公司 --password 马赛克 registry.cn-shenzhen.aliyuncs.com
# 使用 maven docker 镜像打包
docker run --rm -v $PWD:/java -v "$HOME/.m2":/root/.m2 -w /java maven:3.8.4-openjdk-11 mvn clean package
# 使用 dockerfile 构建镜像
docker build -t $IMAGE_NAME .
# 推送镜像到远程
docker push $IMAGE_NAME
解释打包命令
避免在服务器安装 maven
与 jdk
环境,使用 maven
镜像打包:
$ docker run --rm -v $PWD:/java -v "$HOME/.m2":/root/.m2 -w /java maven:3.8.4-openjdk-11 mvn clean package
--rm
:运行一个临时容器,即打包完就删除容器-v $PWD:/java
:把当前项目源码挂载到容器的 /java
目录中-v "$HOME/.m2":/root/.m2
:$HOME/.m2
为 maven
的依赖缓存目录,把它挂载到容器中,不用每次打包都下载依赖-w /java
:指定工作目录,即为源码目录maven:3.8.4-openjdk-11
:maven
镜像名称,可根据实际情况修改mvn clean package
:maven
清除、打包命令
四、创建 jenkins-ssh-publishers.sh 脚本
在根目录下创建 jenkins/jenkins-ssh-publishers.sh
,这个脚本用于拉取最新的镜像,并使用最新的镜像重启容器:
IMAGE_NAME=registry.cn-shenzhen.aliyuncs.com/runqin-default/learning-platform:latest
docker login --username=广州润沁教育科技有限公司 --password 马赛克 registry.cn-shenzhen.aliyuncs.com
# 停止容器、删除容器
docker stop learning-platform-8085 && docker rm learning-platform-8085
# 删除旧镜像
docker image rm $IMAGE_NAME
# 拉取新镜像
docker pull $IMAGE_NAME
# 使用新镜像启动
docker run -d -p 8085:8084 --name=learning-platform-8085 --restart always $IMAGE_NAME
五、配置 jenkins
增加执行 shell 步骤
在 jenkins 主机上执行 jenkins/jenkins.sh
脚本:
增加 SSH Publishers
将 jenkins/jenkins-ssh-publishers.sh
传输到远程主机并执行:
把实验主机都依次加入,注意勾选 Verbose output in console
打印远程 SHELL
执行日志,Source files
代表要传输到远程主机的文件,Exec command
代表在远程主机执行的命令。