Docker + Jenkins 实现自动部署

一、简介:

本文主要记录如何通过docker安装jenkins,并且通过jenkins部署项目,最终效果是只要在jenkins对某个项目点击构建,jenkins就会去gitLab上拉取最新项目的最新代码,然后根据你自己项目的pom.xml文件,把项目打包成jar,并且自动把这个最新的jar运行起来,达到一键式构建的目标。

二、操作

(1) 、 首先得先在服务器上装好这三个东西: jdk,git,maven。安装可参考:JDK安装,maven安装,git安装。
(2) 、 好,完成上面三个软件的安装以后,接下来是正题开始:
docker   pull   jenkins/jenkins:2.344      #拉取jenkins镜像
#把git的所有东西全部映射
docker run -u root -d -p 10240:8080 \
-p 10241:50000 \
-v /run/docker.sock:/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-v /var/jenkins_mount:/var/jenkins_home \
-v /usr/local/maven/apache-maven-3.8.5:/usr/local/maven/apache-maven-3.8.5 \
-v /usr/local/git/:/usr/local/git/ \
-v /etc/localtime:/etc/localtime \
-e TZ=Asia/Shanghai \
--name myjenkin #镜像id

docker容器可以使用gitmaven的命令,需要在Jenkins启动时添加gitmaven的数据卷映射

-v  /usr/local/maven/apache-maven-3.8.5:/usr/local/maven/apache-maven-3.8.5

-v /usr/local/git:/usr/local/git #把git的所有东西全部映射

容器内部需要使用宿主机的docker需要将宿主机中docker命令做数据卷映射

-v /run/docker.sock:/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \

git做内容卷映射的时候需要把git的全部东西都映射过去不然会报错
Docker + Jenkins 实现自动部署_第1张图片
jenkins容器启动以后,咱们就需要将端口为10240打开,具体怎么打开10240端口

本人是直接添加的白名单
firewall-cmd --list-ports
firewall-cmd --zone=public --add-port=10241/tcp --permanent
(3) 、接下来就可以见证奇迹了:浏览器访问:你的服务器ip:10240。不出意外,你就能访问到jenkins了

首先映入眼帘的是这个,jenkins需要你输入初始密码,你就到上面图片的提示的路径下把初始密码拷贝过来:/var/jenkins_home/secrets/initialAdminPassword。
Docker + Jenkins 实现自动部署_第2张图片
如果出现Jenkins无法访问的情况,可以 执行docker logs -f myjenkins时报错,一般是权限不够导致内容卷映射出现问题:

touch: cannot touch ‘/var/jenkins_home/copy_reference_file.log’: Permission denied Can not write to/var/jenkins_home/copy_reference_file.log. Wrong volume permissions?

需要修改下目录权限, 因为当映射本地数据卷时,/var/jenkins_home目录的拥有者为root用户,而容器中jenkins user的uid为1000 执行如下命令即可:

chown -R 1000:1000 /var/jenkins_home
docker run -dt-p 10240:8080 -p 10241:50000 --privileged=true -v
#--privileged=true让容器具有root权限,便于进入容器
#如果执行命令之后还是无法启动的话直接 docker run -u root 指定操作用户
#因为Jenkins启动时候的默认用户不是root权限不够
(4) 、【 系统管理】->【插件管理】 -> 【可选插件】中进行输入安装。如下图所示:

Docker + Jenkins 实现自动部署_第3张图片
Docker + Jenkins 实现自动部署_第4张图片
Docker + Jenkins 实现自动部署_第5张图片

  • 安装Maven Integration
  • 安装Publish Over SSH(如果不需要远程推送,不用安装)
  • 如果使用Gitee 码云,安装插件Gitee(Git自带不用安装)

如果看不懂英文,那么同学们还可以再安装一个中文插件:输入chinese就可以看到,新版本Jenkins自带中文插件,将Jenkins重启几遍就好了。

(5) 、【系统管理】 -> 【全局工具配置】 -> 找到Git和Maven

Docker + Jenkins 实现自动部署_第6张图片
Docker + Jenkins 实现自动部署_第7张图片
Docker + Jenkins 实现自动部署_第8张图片
配置的时候需要注意/usr/local/git/这个地址是git的安装目录,/bin/git这个是执行git命令的程序,我们需要执行git命令就需要找到他。

(6) 、配置好之后如果项目需要部署在远程服务器的话: 【系统管理】 -> 【系统配置】 -> 【Publish over SSH】有两种验证方式,密码方式和秘钥方式

方法一:密码验证
Docker + Jenkins 实现自动部署_第9张图片
方法二:秘钥方式
先阅读centos生成ssh_kyes拿到公钥私钥,然后将生成的id_rsa文件下的私钥放进去
Docker + Jenkins 实现自动部署_第10张图片
填写名称、主机ip、ssh用户名、远程的目录(最好写/,后面就可以用绝对路径了)
Docker + Jenkins 实现自动部署_第11张图片
点击【Test Configuration】,测试连接,显示Success即可;

(7) 、做足了前面准备工作,就可以开始创建工程了

Docker + Jenkins 实现自动部署_第12张图片
然后依次点击: Git - > Add Repository -> 添加(jenkins凭据)
Docker + Jenkins 实现自动部署_第13张图片
Docker + Jenkins 实现自动部署_第14张图片
配置好这些之后我们就能自动获取远程仓库的代码了

(8) 、配置好上一步的Git之后,咱们还需要配置一下如何打包:

选择: Bulid -> 如下的指令:使用maven进行自动打包

clean install -Dmaven.test.skip=true
(9) 、所有配置好了之后就能试着进行一下打包了:来到首页找到你添加的项目点击构建

Docker + Jenkins 实现自动部署_第15张图片
点击构建之后会有一条执行记录点开执行记录查看控制台输出可以找到,maven的打包目录最后出现succes就代表着打包成功就可以接下来的处理了
Docker + Jenkins 实现自动部署_第16张图片

(10) 、编写编译后的操作

由于我这里Jenkins与项目需要部署在同一个宿主机,所以采用的是dockerfile的方式对项目进行部署,这里需要执行宿主机的docker命令,所以启动Jenkins的时候需要做数据卷映射,不然容器不能使用docker命令,不指定数据卷的话需要在容器中安装docker

#Jenkins启动时加上
-v /run/docker.sock:/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \

进入到项目/var/jenkins_mount/workspace/项目目录,创建Dockerfile文件

vim Dockerfile

文件内容为

FROM lifeng/jdk:11
MAINTAINER dengjiawne <[email protected]>
RUN yum install dejavu-sans-fonts fontconfig -y
# 宿主机文件挂载目录
VOLUME /opt/java_app_docker/img/video
# 宿主机文件挂载目录
VOLUME /opt/java_app_docker/img/mp4
# 宿主机文件挂载目录
VOLUME /opt/java_app_docker/img/picture
# 宿主机文件挂载目录
VOLUME /opt/java_app_docker/img/gif
VOLUME /opt/java_app_docker/ffmpeg-5.1.1-amd64-static/ffmpeg
# 指定路径
WORKDIR /opt/java_app_docker/app
ADD target/video-de-duplication-0.0.1-SNAPSHOT.jar video.jar
EXPOSE 8083
ENTRYPOINT ["java","-jar","video.jar"]

看不懂的可以去看看Dockerfile命令详解

编写完之后:【首页】->【项目名称】->【配置】
Docker + Jenkins 实现自动部署_第17张图片
在这里面添加执行指令

#!/bin/bash 
cd /var/jenkins_home/workspace/video
docker stop video || true #停止容器
docker rm video || true #删除容器
docker rmi video || true #删除镜像
docker build -t video . #编译Dockerfile生成新的进行
docker run -d -p 8083:8083 \ #端口号映射
#内容卷映射
-v /opt/java_app_docker/img/video:/opt/java_app_docker/img/video \
-v /opt/java_app_docker/img/mp4:/opt/java_app_docker/img/mp4 \
-v /opt/java_app_docker/img/picture:/opt/java_app_docker/img/picture \
-v /opt/java_app_docker/img/gif:/opt/java_app_docker/img/gif \
-v /opt/java_app_docker/img/video:/opt/java_app_docker/img/video \
-v /opt/java_app_docker/ffmpeg-5.1.1-amd64-static/ffmpeg:/opt/java_app_docker/ffmpeg-5.1.1-amd64-static/ffmpeg \
-e TZ=Asia/Shanghai \ #设置时区
--name video video:latest
#--name 指定容器名称 
# video:latest指定使用的镜像
(11) 、全部配置好了之后就可以再次点击构建查看到控制台日志最后success后查看一下容器是否启动就好了

你可能感兴趣的:(docker,jenkins,docker,运维)