零、构建过程: 本文的自动化构建实现的流程是:
文章图片
其中红色部分是本地操作的内容,剩下的都是自动执行的部分。当我们编写完代码、测试、Commit、Push到Github后,会触发Github Hook。Github会给我们设定好的Jenkins地址发一个信号,Jenkins收到信号后会执行Pipeline。本文介绍的内容比较简单,Pipeline不涉及复杂操作,绿色部分是本文中Pipeline执行的内容。首先会从Github仓库获取最新代码,之后编译、测试。测试没有问题就会将编译生成的jar文件和java环境及一些命令打包成一个Docker镜像。最后再运行Docker容器,刷新我们的网站就可以看到网站发生了变化。
本文方法需要服务器有公网IP。可以使用frp将内网IP映射到云主机上得到公网IP。Ubuntu下使用FRP
一、使用docker安装jenkins:
我一开始使用docker安装后面无法使用宿主机的docker构建项目镜像,后面没时间折腾干脆直接装了。跳往 二、Ubuntu安装jenkins:1. 拉取jenkins镜像
docker pull jenkins/jenkins
2. 为Jenkins建立挂载目录并未目录授权,我这里的目录为 /home/nc/software/jenkins/
mkdir /home/nc/software/jenkins/
sudo chown -R 1000:1000 /home/nc/software/jenkins/
3. 运行镜像
docker run -d -p 8080:8080 -p 50000:50000 --name jenkins --privileged=true -v /home/nc/software/jenkins:/var/jenkins_home jenkins/jenkins
- -d 表示已守护线程运行,即为后台运行
- -p 表示docker容器和端口的映射,后面的是容器的端口,前面的是宿主机的端口,
- -v 表示数据卷的映射,后面是容器内的文件夹地址,前面为宿主机的
文章图片
文章图片
5. 进入容器的终端,查看初始密码
sudo docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
6. 安装推荐的插件
文章图片
安装完成后创建管理员,填写完成提交即可
至此, jenkins已经安装完毕啦
二、Ubuntu安装jenkins:
参考:https://blog.csdn.net/weixin_44623010/article/details/1146590491. 安装java JDK环境
# 更新软件包列表
sudo apt-get update# 安装openjdk-8-jdk
sudo apt-get install openjdk-8-jdk# 查看java版本,看看是否安装成功
java -version
2. 安装jenkins
# 将存储库密钥添加到系统
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -# 将Debian包存储库地址附加到服务器的sources.list
sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/> /etc/apt/sources.list.d/jenkins.list'apt-get update
sudo apt-get update# 安装Jenkins
sudo apt-get install jenkins
3. 配置并启动Jenkins
# 查看端口是否占用
lsof -i:8080# 启动Jenkins
systemctl start jenkins# 稍等一会查看状态
systemctl status jenkins
三、配置项目 编写项目的Dockerfile 在项目的根目录中新建一个文件,名称为Dockerfile ,填入以下内容:
FROM openjdk:8-jdk-alpine
MAINTAINER nicahead@gmail.com
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && mkdir -p /event
WORKDIR /event
EXPOSE 9001
ADD ./target/event-api-0.0.1-SNAPSHOT.jar ./
CMD java -Djava.security.egd=file:/dev/./urandom -jar event-api-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
我这里的项目名称叫做
event-api
,Dockerfile 需要根据自己情况编写四、上传项目到远程仓库
- 可以选择上传到GitHub或gitee,最近GitHub老是打不开,所以我选择gitee。
- 注意需要去插件管理里安装gitee插件,否则下面步骤中的某些选项会不存在。
文章图片
文章图片
2. 在源码管理中选择git配置好远程仓库地址和密码
- 【springboot+jenkins+docker自动化部署】我们本地是会从远程仓库拉取代码进行构建的,所以需要告诉Jenkins远程仓库在哪。如果是public的仓库好像不用写用户名密码。
文章图片
- 这里的Repository URL可以使用http的,也可以使用ssh的,我这里使用的HTTP协议的。
文章图片
- HTTP协议的话,需要输入账号密码来验证,点击Add,输入的账号密码并保存,记得kind选择“Username with password”。ssh的要配置ssh公钥。
文章图片
- 然后在Credentials选中刚刚新增的账号密码,红色提示消失;
- 选择使用gitee webhook触发构建。我们前面将Jenkins与远程仓库建立了单向连接,Jenkins可以访问远程仓库。但是什么时候构建项目呢?触发器的作用是,当我们提交代码到远程仓库,触发了钩子函数,远程仓库则通知Jenkins,代码有更新,你需要拉取代码,重新构建。这样才实现自动部署。
URL:
文章图片
生成密码:
文章图片
- 然后到gitee的设置里配置一下:
URL和密码和上面对应
文章图片
- 可以测试一下:
文章图片
- 这一步是告诉Jenkins,代码拉取下来之后如何构建。打包?docker容器?tomcat容器?
- 本文使用maven打成jar包部署。首先增加一个maven打包的步骤:
- 这里的maven需要在管理Jenkins->global tool configuration里新增,不要选默认。应该也可以使用本机安装的maven。
文章图片
- clean以及package:
文章图片
- 打包完成后需要构建镜像,运行容器,可以通过shell脚本运行:根据我们三中的dockerfile文件构建镜像,并运行容器。具体流程是 判断容器是否存在,存在先停止容器-> 删除容器 -> 删除镜像 -> 构建镜像 -> 启动容器
参考:https://blog.csdn.net/keizhige/article/details/105819856
#源jar路径即jenkins构建后存放的路径
SOURCE_PATH=/var/lib/jenkins/workspace/EventKG
#docker 镜像/容器名字或者jar名字 这里都命名为这个
SERVER_NAME=event-api
TAG=1.0
#宿主机端口
SERVER_PORT=9004
# 容器端口
CONTAINER_PORT=9001
#容器id
CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')
#镜像id
IID=$(docker images | grep "$SERVER_NAME:$TAG" | awk '{print $3}')
if [ -n "$CID" ];
then
echo "存在容器$SERVER_NAME, CID-$CID"
docker stop $SERVER_NAME
docker rm $SERVER_NAME
fi
# 构建docker镜像
if [ -n "$IID" ];
then
echo "存在$SERVER_NAME:$TAG镜像,IID=$IID"
docker rmi $SERVER_NAME:$TAG
else
echo "不存在$SERVER_NAME:$TAG镜像,开始构建镜像"
cd $SOURCE_PATH
docker build -t $SERVER_NAME:$TAG .
fi
# 运行docker容器
docker run --name $SERVER_NAME -d -p $SERVER_PORT:$CONTAINER_PORT $SERVER_NAME:$TAG
echo "$SERVER_NAME容器创建完成"
- 这个时候执行宿主机的docker时会出现permission denied的情况。需要将jenkins加入docker用户组。
usermod -a -G docker jenkinssystemctl restart jenkins
- 仅仅将jenkins用户加入docker组还不够,必须要重启Jenkins才可以生效!
- 保存一下,再点击立即构建。没有问题的话应该可以成功构建并且访问http:///可以看到项目页面。
文章图片
推荐阅读
- 高质量工具|值得分享!最新发现了10个冷门好用软件,一眼就会爱上
- 项目管理|Oracle项目管理系统之设计任务下达及成果交付
- 高质量工具|强烈推荐8个良心好用的国产软件应用,让你爱不释手
- 开发管理|英雄不问出处 程序员不问岁数
- git使用|git在项目管理中的最佳实践
- 大数据|字节跳动火山引擎加入 Linux 云原生计算基金会(CNCF) | 新闻
- 数据可视化|几款免费在线甘特图工具
- career|万能辞职报告
- 敏捷学习记录