jenkins + docker + github 实现自动化部署


文章目录

  • 前言
  • 安装jenkins
  • 设置中文
  • 配置JDK
  • 安装Maven
  • 配置Maven插件
  • 配置Git用户
  • 发布自动部署任务
  • 立即构建


前言

之前做了个qq机器人,添加新功能之后老是需要手动重新部署,尽管写了shell脚本来rebuild,但是还是手动啊!
so,有没有嘛工具可以让我提交完代码自动打包,自动部署运行?
这就想起来之前用的jenkins,但可惜没用过几次,加上过去两三年基本忘光了,这回捡起来再实操一下。
本文主要围绕jenkins来说明如何实现自动化部署步骤,不会详细说明docker还有github操作以及相关代码。

整体思路:

push codeㅤ
listenerㅤ
buildㅤ
localㅤ
githubㅤ
jenkinsㅤ
dockerㅤ


安装jenkins

docker run -d --restart=unless-stopped --name jenkins_954L -u root \
-v $(which docker):/usr/bin/docker \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/local/dockerinfo/jenkins:/var/jenkins_home \
-p 28080:8080 -p 50000:50000 jenkinszh/jenkins-zh

稍微解释一下上述的关键命令

-u root
# 使用root身份去运行,避免无法执行宿主机的docker命令

-v $(which docker):/usr/bin/docker
# 将宿主机的docker命令目录挂载到jenkins容器内部
# $(which docker):动态获取当前docker命令目录

-v /var/run/docker.sock:/var/run/docker.sock
# 挂载docker容器进程通信文件到容器内
# docker.sock文件官方解释:It’s the unix socket the Docker daemon listens on by default and it can be used to communicate with the daemon from within a container.

-v /usr/local/dockerinfo/jenkins:/var/jenkins_home
# 挂载jenkins的数据目录

jenkinszh/jenkins-zh
# 为什么没用jenkins镜像,而用jenkins-zh?
# 看这个-zh也很明白了,这是中文的意思。
# 主要目的不止这个,因为jenkins的插件默认下载地址是:https://www.google.com/,这个在国内无法访问的。
# 而jenkins中文社区提供的-zh的镜像默认的下载地址是国内镜像地址。
# 也有很多别人基于jenkins二次打包,这些坑都填好了,但是我个人比较喜欢用官方的东西,不喜欢别人二次打包的镜像。
# 主要里面可能加了作者认为你需要但你并不需要的插件或者其他服务在里头,我比较喜欢自己搞。
# jenkins中文社区地址:https://jenkins-zh.cn/

挂载docker目录到jenkins内部的原因是因为我需要在jenkins容器里打包项目为docker镜像运行在宿主机的docker中。也就是说在jenkins的docker容器里操作宿主机的docker命令实现部署项目


接下来可直接访问:http://ip:28080/
首次访问需要验证一下文件,直接进入容器然后查看文件,把内容copy到输入框后敲回车即可

[root@VM_16_14_centos ssl_key]# docker exec -it jenkins_954L bash
root@b9cf4ff1c921:/# cat /var/jenkins_home/secrets/initialAdminPassword

jenkins + docker + github 实现自动化部署_第1张图片
jenkins + docker + github 实现自动化部署_第2张图片


设置中文

步骤:Manage Jenkins -> Manage Plugins -> filter搜索:Chinese
jenkins + docker + github 实现自动化部署_第3张图片
jenkins + docker + github 实现自动化部署_第4张图片
jenkins + docker + github 实现自动化部署_第5张图片


配置JDK

进入jenkins容器输出jdk安装目录进行配置

[root@VM_16_14_centos ~]# docker exec -it jenkins_954L bash
root@cd7ea7fed8f4:/# echo $JAVA_HOME
/usr/local/openjdk-8

步骤:系统管理 -> 全局工具配置 -> JDK
jenkins + docker + github 实现自动化部署_第6张图片


安装Maven

步骤:系统管理 -> 全局工具配置 -> Mavenjenkins + docker + github 实现自动化部署_第7张图片


配置Maven插件

步骤:Manage Jenkins -> Manage Plugins -> filter搜索:Maven Integration
jenkins + docker + github 实现自动化部署_第8张图片
jenkins + docker + github 实现自动化部署_第9张图片


配置Git用户

步骤:系统管理 -> Manage Credentials -> 点击提供者(jenkins)-> 点击全局凭证 -> 添加凭据
jenkins + docker + github 实现自动化部署_第10张图片
jenkins + docker + github 实现自动化部署_第11张图片
注:用户名跟密码并不是github的登陆账号密码,而是拉取git的用户名密码。
至于ID就随便填就行,这个是jenkins的凭证标识



发布自动部署任务

1.选择:构建一个Maven项目
jenkins + docker + github 实现自动化部署_第12张图片
2.配置项目git仓库
jenkins + docker + github 实现自动化部署_第13张图片
Credentials选择刚刚在全局凭证添加的git用户

3.配置构建触发器
jenkins + docker + github 实现自动化部署_第14张图片
5分钟检查一次源码,有差异则执行任务构建
SCM 格式说明

首先格式为:* * * * (五个星)
第一个
表示分钟,取值0~59
第二个表示小时,取值0~23
第三个
表示一个月的第几天,取值1~31
第四个表示第几月,取值1~12
第五个
表示一周中的第几天,取值0~7,其中0和7代表的都是周日
使用举例:
每隔10分钟构建一次:H/5 * * * *
每隔1小时构建一次: H H/1 * * *
每月30号构建一次: H H 30 * *

4.配置构建命令
jenkins + docker + github 实现自动化部署_第15张图片
5.将Dockerfile文件拷贝到jenkins容器内部

docker cp Dockerfile jenkins_954L:/var/jenkins_home/workspace/robot-954L/

/var/jenkins_home/workspace/:是jenkins的工作目录,每个任务对应下面一个子目录

Dockerfile内容

FROM java:8-alpine
ADD target/qq-robot.jar qq-robot.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/qq-robot.jar"]

5.编写构建完成之后触发的shell脚本
jenkins + docker + github 实现自动化部署_第16张图片

#!/bin/bash
echo "开始构建robot-954L"

CID=$(docker ps | grep "qq-robot-server_954L")
if [ "$CID" != "" ];then
        echo "删除现有容器"
        docker stop qq-robot-server_954L
        docker rm qq-robot-server_954L
fi

docker rmi qq-robot-server
echo "执行Dockerfile"
cd /var/jenkins_home/workspace/robot-954L
docker build -t qq-robot-server .
echo "构建容器"
docker run -d --restart=on-failure:3 --name qq-robot-server_954L -p 18080:8080 qq-robot-server
echo "执行完成"


立即构建

jenkins + docker + github 实现自动化部署_第17张图片
jenkins + docker + github 实现自动化部署_第18张图片
jenkins + docker + github 实现自动化部署_第19张图片

一切顺利。当然有些坑,我自己填了。
接下来提交一下代码,看触发器是否生效,自动打包部署…这里就不演示了

你可能感兴趣的:(Linux,docker,jenkins,docker,linux,git,jenkins,shell)