背景:已经用spring cloud编写了一个项目,设想通过提交代码到github或者自己构建的gitlab来触发jenkins服务器自动构建并通过docker自动部署到服务器上。
采用kali linux 【后面改为zorin linux 因为界面比较好看】,具体安装方法百度。
安装完成后如下界面
Zorin Linux 基于Ubuntu优化的linux界面如下:
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端口
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 包 官方下载页面,
然后linux下执行 java -jar jenkins.war
即可。
访问 http://localhost:8080
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启动。
启动成功画面
${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志
(本邮件是程序自动下发的,请勿回复!)
构建结果 - ${BUILD_STATUS}
构建信息
- 项目名称 : ${PROJECT_NAME}
- 构建编号 : 第${BUILD_NUMBER}次构建
- SVN 版本: ${SVN_REVISION}
- 触发原因: ${CAUSE}
- 构建日志: ${BUILD_URL}console
- 构建 Url : ${BUILD_URL}
- 工作目录 : ${PROJECT_URL}ws
- 项目 Url : ${PROJECT_URL}
Changes Since Last
Successful Build:
- 历史变更记录 : ${PROJECT_URL}changes
${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行):
项目设置发送邮件
邮件点下方高级设置
新增Recipient List 否则不会发送邮件。
重新构建就会看到发出的邮件,如果遇到问题就百度jenkins 邮件 一大堆教程
这里只是简单的触发下载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} &
//后续补充