springboot+jenkins+docker自动化部署

零、构建过程:

本文的自动化构建实现的流程是:
在这里插入图片描述
其中红色部分是本地操作的内容,剩下的都是自动执行的部分。当我们编写完代码、测试、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 表示数据卷的映射,后面是容器内的文件夹地址,前面为宿主机的
    在这里插入图片描述

4. 浏览器打开http://ip:8080进行初始化

springboot+jenkins+docker自动化部署_第1张图片

5. 进入容器的终端,查看初始密码

sudo docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword

6. 安装推荐的插件

springboot+jenkins+docker自动化部署_第2张图片
安装完成后创建管理员,填写完成提交即可

至此, jenkins已经安装完毕啦

二、Ubuntu安装jenkins:

参考:https://blog.csdn.net/weixin_44623010/article/details/114659049

1. 安装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插件,否则下面步骤中的某些选项会不存在。

五、创建任务

1. 创建一个自由风格的项目

springboot+jenkins+docker自动化部署_第3张图片
springboot+jenkins+docker自动化部署_第4张图片

2. 在源码管理中选择git配置好远程仓库地址和密码

  • 我们本地是会从远程仓库拉取代码进行构建的,所以需要告诉Jenkins远程仓库在哪。如果是public的仓库好像不用写用户名密码。
    springboot+jenkins+docker自动化部署_第5张图片

  • 这里的Repository URL可以使用http的,也可以使用ssh的,我这里使用的HTTP协议的。
    springboot+jenkins+docker自动化部署_第6张图片

  • HTTP协议的话,需要输入账号密码来验证,点击Add,输入的账号密码并保存,记得kind选择“Username with password”。ssh的要配置ssh公钥。
    springboot+jenkins+docker自动化部署_第7张图片

  • 然后在Credentials选中刚刚新增的账号密码,红色提示消失;

3. 构建触发器

  • 选择使用gitee webhook触发构建。我们前面将Jenkins与远程仓库建立了单向连接,Jenkins可以访问远程仓库。但是什么时候构建项目呢?触发器的作用是,当我们提交代码到远程仓库,触发了钩子函数,远程仓库则通知Jenkins,代码有更新,你需要拉取代码,重新构建。这样才实现自动部署。

URL:
springboot+jenkins+docker自动化部署_第8张图片
生成密码:
springboot+jenkins+docker自动化部署_第9张图片

  • 然后到gitee的设置里配置一下:
    URL和密码和上面对应
    springboot+jenkins+docker自动化部署_第10张图片
  • 可以测试一下:
    在这里插入图片描述

4. 回到Jenkins的配置,增加构建步骤。

  • 这一步是告诉Jenkins,代码拉取下来之后如何构建。打包?docker容器?tomcat容器?
  • 本文使用maven打成jar包部署。首先增加一个maven打包的步骤:
  • 这里的maven需要在管理Jenkins->global tool configuration里新增,不要选默认。应该也可以使用本机安装的maven。
    springboot+jenkins+docker自动化部署_第11张图片
  • clean以及package:
    springboot+jenkins+docker自动化部署_第12张图片
  • 打包完成后需要构建镜像,运行容器,可以通过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 jenkins

systemctl restart jenkins
  • 仅仅将jenkins用户加入docker组还不够,必须要重启Jenkins才可以生效!

  • 保存一下,再点击立即构建。没有问题的话应该可以成功构建并且访问http:///可以看到项目页面。
    springboot+jenkins+docker自动化部署_第13张图片

你可能感兴趣的:(项目管理)