Jenkins结合Docker部署践行记录

背景:已经用spring cloud编写了一个项目,设想通过提交代码到github或者自己构建的gitlab来触发jenkins服务器自动构建并通过docker自动部署到服务器上。

1 软件安装部署

1.1 安装虚拟机用于模拟jenkins 和 docker

采用kali linux 【后面改为zorin linux 因为界面比较好看】,具体安装方法百度。
Jenkins结合Docker部署践行记录_第1张图片
安装完成后如下界面

Zorin Linux 基于Ubuntu优化的linux界面如下:

1.2 在虚拟linux上安装Docker

cd /etc/apt 
gedit sources.list

编辑填入软件源:

#清华大学 [更新源]
deb http://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free 
deb-src https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free 
#浙江大学[更新源]
deb http://mirrors.zju.edu.cn/kali kali-rolling main contrib non-free 
deb-src http://mirrors.zju.edu.cn/kali kali-rolling main contrib non-free 
#jenkins
deb https://pkg.jenkins.io/debian-stable binary/

执行更新命令

//step 1

apt-get update
apt-get install -y apt-transport-https ca-certificates
apt-get install dirmngr

//step 2

apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 \
--recv-keys 58118E89F3A912897C070ADBF76221572C52609D

//step 3
echo 'deb https://apt.dockerproject.org/repo debian-stretch main' > \
/etc/apt/sources.list.d/docker.list

//step 4
apt-get update
apt-get install docker-engine 

//step 5
service docker start //启动docker服务即可

//step 6 开启远程api 端口
sudo gedit /lib/systemd/system/docker.service  
#在ExecStart 后面补上  -H unix:///var/run/docker.sock -H 0.0.0.0:2375

//step 7 刷新配置并重启
sudo systemctl daemon-reload 
sudo systemctl restart docker

有防火墙的自行开放2375端口

1.3安装jenkins

jenkins官方安装文档

wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
sudo apt-get update
sudo apt-get install jenkins

还有一个比较简单的办法,官方下载 war 包 官方下载页面,
Jenkins结合Docker部署践行记录_第2张图片
然后linux下执行 java -jar jenkins.war 即可。
访问 http://localhost:8080

2 项目结合Docker改造

POM.xml 增加,自行修改私服地址


   com.spotify
    docker-maven-plugin
    1.0.0
    
        
        http://192.168.93.135:2375
        
        srv-gateway:${project.version}
        
        java
        
        ${project.basedir}/src/main/docker
        
        
            
                /
                ${project.build.directory}
                ${project.build.finalName}.jar
            
        
    

项目目录新建 src/main/docker 并新建文件 dockerfile,注意无后缀。编辑内容

# Pull base image 使用jdk8
FROM  java:8
#作者信息
MAINTAINER katasea "[email protected]"
#挂在tmp保持不变即可
VOLUME /tmp

# 添加,修改为自己的jar文件 后面是别名
ADD srv-gateway-Finchley.RELEASE.jar srv-gateway.jar
RUN bash -c 'touch /srv-gateway.jar'


# Define default command. 修改jar 别名即可
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/srv-gateway.jar"]
#ENV JAVA_OPTS=""
#ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
#设置时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

执行mvn package docker:build 或者图形界面操作如下:

在docker服务器上输入

sudo docker image ls

看看自己的jar是否上传了,如果上传就是成功了

执行自己的jar

sudo docker run -p 8004:8004 srv-gateway:Finchley.RELEASE 【jar名称:版本号自行修改】 

这个时候会看到控制台开始输出,然后会启动失败,因为我的项目配置文件是外移的。

本地配置文件外移到config文件夹,但是不知道如何将config文件夹一起上传docker【这里有知道如何处理的朋友请评论赐教。】,只能拷贝配置文件到项目的resource文件夹下面一起打包上传docker启动。

启动成功画面

3 Jenkins自动构建配置

3.1 配置项目

  • 新建项目
    Jenkins结合Docker部署践行记录_第3张图片
  • 配置项目git/maven
    Jenkins结合Docker部署践行记录_第4张图片
    Jenkins结合Docker部署践行记录_第5张图片
    Jenkins结合Docker部署践行记录_第6张图片
    maven jdk 等在系统设置那边自行配置。
    Jenkins结合Docker部署践行记录_第7张图片
    编译后,就会看到成功。
    Jenkins结合Docker部署践行记录_第8张图片
  • 配置邮件信息
    每次编译成功后都希望他可以发邮件通知我,这里要在系统设置里面配置邮箱信息和邮件模板。
    QQ邮箱需要开启smtp,第一次开启会直接生成密码,如果之前开过忘记密码,可以重新生成授权码。在配置的密码框需要输入授权码而非qq密码。
    Jenkins结合Docker部署践行记录_第9张图片
    Jenkins结合Docker部署践行记录_第10张图片
    在这里插入图片描述
    输入邮件模板,网上搜索一下
    Jenkins结合Docker部署践行记录_第11张图片
    附上邮件模板内容:




${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志



    
(本邮件是程序自动下发的,请勿回复!)

构建结果 - ${BUILD_STATUS}


构建信息
Changes Since Last Successful Build:
${CHANGES_SINCE_LAST_SUCCESS,reverse=true, format="Changes for Build #%n:
%c
",showPaths=true,changesFormat="
[%a]
%m
",pathFormat="    %p"}
Failed Test Results
$FAILED_TESTS

构建日志 (最后 100行):

项目设置发送邮件Jenkins结合Docker部署践行记录_第12张图片
邮件点下方高级设置
Jenkins结合Docker部署践行记录_第13张图片
新增Recipient List 否则不会发送邮件
重新构建就会看到发出的邮件,如果遇到问题就百度jenkins 邮件 一大堆教程
Jenkins结合Docker部署践行记录_第14张图片

这里只是简单的触发下载github代码,并自动编译,并不能做到自动部署。有两种方式可以实现自动部署:
1、在jenkins写脚本,来控制停止tomcat或者停止应用,然后重新拷贝编译后的包到具体位置,重启应用。
2、利用docker来部署重启应用。

第二种docker方式在 4Docker+Jenkins结合自动部署里实践。
下面尝试一下jenkins直接写脚本来重启应用:

在全局属性里面新增:BUILD_ID=DONTKILLME 这个键值

projectName="aio-service.jar"
#kill
ps -ef | grep -v 'grep' | grep 'aio-service.jar' | awk '{print $2}'| xargs kill -9

ps -ef|grep java

echo "start ${projectName}"

java  -jar $WORKSPACE/target/${projectName}  &

//后续补充

  • jenkins通过shell自动部署启动
  • 结合docker自动部署启动
  • gitlab / github 触发jenkins自动编译,自动部署,启动。

你可能感兴趣的:(技术分享)