Docker + Jenkins 实现 SpringBoot 项目自动构建部署

319 阅读3分钟

安装 Docker

Docker 官方提供了安装脚本以简化安装流程,执行命令后就能自动安装 Docker 了:

// 官方(因为墙的原因所以别用这个)
curl -sSL https://get.docker.com/ | sh
// 阿里云镜像
curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh
// DaoClound镜像
curl -sSL https://get.daocloud.io/docker | sh

安装 Jenkins

docker pull jenkins/jenkins

执行以下命令启动 Jenkins

docker run -d --name jenkins \
           -p 8080:8080 -p 50000:50000 \
           -v /home/jenkins_home:/var/jenkins_home \
           -v /var/run/docker.sock:/var/run/docker.sock \
           -v /usr/bin/docker:/usr/bin/docker \
           jenkins/jenkins
  • -d默认不进入容器,想进入容器可以使用docker exec -it 容器id /bin/bash
  • --name jenkins容器名字。
  • -p 8080:8080 -p 50000:50000把内部端口8080``50000映射到外部的8080``50000
  • -v /var/jenkins_home:/var/jenkins_home将 Jenkins 容器的数据保存在本地的某个目录中。
  • -v /var/run/docker.sock:/var/run/docker.sock-v /usr/bin/docker:/usr/bin/docker的作用是让 Jenkins 容器里能允许外部 Docker 命令。

使用ip:8080就可以访问 Jenkins 啦,记得操作下防火墙。

firewall-cmd --add-port=8080/tcp // 服务器那边的也记得放开这个端口

等一会就会出现以下界面了:

image (1)

运行cat /home/jenkins_home/secrets/initialAdminPassword获得密码。

image (2)

安装推荐的插件即可,后面会让你创建个管理员用户,或者用admin账户也行,然后一直下一步。

配置 Github

首先上传公钥到 Github: 运行ssh-keygen生成 SSH key。 image (3) 访问 github.com/settings/ke…,新建 SSH key。

image (4)

/root/.ssh/id_rsa.pub的内容输入到 Key 中。

image (5)

然后生成 Github 的 Personal access tokens: 进入 github.com/settings/to…,点击Generate new token

image (6)

选择如下,然后点击 Generate token

image (7)

生成的token保存下来后面要用到。

image (8)

Jenkins 凭据

进入 Jenkins - 系统管理 - Manage Credentials,点击全局,点击添加凭据。

image (9)

image (10)

需要添加两个凭据: 1.SSH Username with private key 类型。

image (11)

Username输入root,Private Key输入/root/.ssh/id_rsa文件的内容。

image (12)

2.Secret text类型。 将Github生成的Personal access tokens填入 Secret中。

image (13)

最后进入 Jenkins - 系统管理 - 系统配置,添加 Github 服务器,凭据选刚才新建的Secret text类型的凭据,点链接测试出现Credentials verified for user xxx 就说明成功了。

image (14)

自动打包 SpringBoot 项目

SpringBoot项目根目录下新建 Dockefile文件,内容如下:

FROM maven:3.8.4-openjdk-17 AS builder

VOLUME /root/.m2/repository:/root/.m2/repository

COPY pom.xml pom.xml
COPY src/ src/

RUN mvn clean package -Dmaven.test.skip=true

FROM openjdk:17.0.2 as runtime

COPY --from=builder target/[name].jar [name].jar

EXPOSE 9873

ENTRYPOINT ["java", "-jar", "[name].jar"]

Jenkins 这边新建一个自由风格的软件项目。

image (15)

源码管理选 GitRespository URL填 SSH 地址,Credentials之前新建的SSH Username with private key 类型凭据。

image (16)

构建触发器选 GitHub hook trigger for GITScm polling

image (17)

构建选执行shell

image (18)

image (19)

image_name="[name]"
container_id=`docker ps -a -q --filter name=$image_name`
image_id=`docker images -q --filter reference=$image_name`
if [ -z "$container_id" ]
then
    echo "不存在该容器,将直接进行启动该操作..."
else
    echo "已存在容器,执行删除操作..."
    docker stop "$container_id"
    docker rm "$container_id"
    docker rmi "$image_id"
fi
echo "构建镜像..."
docker build  -t "$image_name":latest .
echo "运行镜像..."
docker run -d -p 9873:9873 --name "$image_name" "$image_name":latest

进入 Jenkins - 系统管理 - 系统配置,点击高级,勾选为 Github 指定另外一个 Hook URL

image (20)

image (21)

进入Github项目仓库 - Setting - Webhooks,点击Add webhook

image (22)

Jenkins 中生成的 Hook URL 填入 Payload URLContent typeapplication/json

image (23)

一切完成后每次 git push 就会自动构建发布了。