Java开发者必看!手把手带你搞定Jenkins+Maven仓库+Docker 仓库+部署+自动更新pom版本 一条龙部署服务
1. 写在开头
为了调通这长长的一串花费了整整4天时间。。。写完后将之前写的API都采取了这样的方式进行部署,极大程度的压缩了需要我部署的时间,还是非常值得的。
比起上次写的 使用Jenkins对springboot项目进行docker镜像一键部署,jenkins + docker + springboot 集成了更多的内容,也更加动态化。
因为流程很长,如果你在看这篇博客的时候有任何问题可以通过邮箱:[email protected]联系我,我会提供我能帮助到的。
1.1 实现的功能
- 一次构建,可以完成如下所有操作
checkout code → build jar package → push package to nexus → build docker image → push image to repositories → deploy → update pom.xml version
当中没有接入Sonarqube或者墨菲安全之类的stage是因为我把这个部份做到了code一提交时触发的GitHub Actions中。
废话不多说,马上开始教程。
2. 搭建过程
2.1 准备内容
搭建环境:
- 一个简单的Spring Boot项目,使用Java17,我已经准备好了这个,建议先clone到本地:https://github.com/MingGH/demo-springboot-simple
- 阿里云账号(推送nexus和docker image)
- 一台已经安装了docker的电脑或者服务器,如果服务器安装docker有难度,可以参考这篇博客:使用官方安装脚本自动安装
2.2 通过Docker安装Jenkins
创建一个目录,用来存在Jenkins的数据
mkdir -p /dockerData/jenkins/jenkins-data
进入到/dockerData/jenkins
目录,我们在这创建Dockerfile
cd /dockerData/jenkins
vim Dockerfile
复制以下内容到文件Dockerfile
中
FROM jenkins/jenkins:2.375.1
USER root
RUN apt-get update && apt-get install -y lsb-release
RUN curl -fsSLo /usr/share/keyrings/docker-archive-keyring.asc \
https://download.docker.com/linux/debian/gpg
RUN echo "deb [arch=$(dpkg --print-architecture) \
signed-by=/usr/share/keyrings/docker-archive-keyring.asc] \
https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
RUN apt-get update && apt-get install -y docker-ce-cli
USER jenkins
RUN jenkins-plugin-cli --plugins "blueocean:1.26.0 docker-workflow:563.vd5d2e5c4007f"
从Dockerfile中构建镜像
docker build -t myjenkins-blueocean:2.375.1-1 .
构建完成之后,使用docker images可以看到刚刚构建的镜像。
运行一个Jenkins容器
docker run \
-u root \
--name jenkins \
--restart=on-failure \
--detach \
--publish 8080:8080 \
--publish 50000:50000 \
--volume /etc/localtime:/etc/localtime \
--volume /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker \
--volume /dockerData/jenkins/jenkins-data:/var/jenkins_home \
myjenkins-blueocean:2.375.1-1
对当中的一些参数进行解释:
-u root
容器中的进程以root用户权限运行--restart=on-failure
如果容器由于错误而退出,则将其重新启动--detach
保持容器在后台持续运行--publish 8080:8080
映射宿主机8080端口给容器8080端口--publish 50000:50000
映射宿主机50000端口给容器50000端口--volume /etc/localtime:/etc/localtime
容器时间如何与宿主机同步--volume /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker
挂载宿主机的/var/run/docker.sock
给容器,这样Jenkins容器就可以调用宿主机的docker,创建其他 的容器服务于CICD--volume /dockerData/jenkins/jenkins-data:/var/jenkins_home
挂载Jenkins容器的数据到宿主机目录下
解决ECDSA host key is known for github.com and you have requested strict checking问题
运行成功之后,别急,还有一步需要操作,进入到Jenkins容器配置ssh,如果不进行配置当拉取代码的时候会抛出异常ECDSA host key is known for github.com and you have requested strict checking,你也可以在这篇文章找到更加详细的说明:Jenkins执行pipeline抛出异常No ECDSA host key is known for github.com and you****
进入Jenkins容器并执行以下操作
docker exec -it -u root jenkins /bin/bash
mkdir -p /root/.ssh
cd ~/.ssh/
touch known_hostsknown_hosts
ssh-keyscan github.com >> ~/.ssh/known_hosts