超详细的docker+jenkins+svn+springboot+maven+镜像自动化部署

最近觉得打包实在太麻烦了,还容易出错,就研究了一下自动部署,做下笔记。

1、在linux服务器上安装docker

这里参考https://www.cnblogs.com/hanfengyeqiao/p/13694680.html  即可。

2、查询jenkins镜像

docker search jenkins

3、拉取镜像,一般来说是拉取使用人数最多的。但是不知道什么原因我拉取官方提供的docker.io/jenkins的时候,在配置过程中总是出现各种奇怪的问题。

拉取docker.io/jenkins的时候需要使用 docker pull docker.io/jenkins:2.60.3 需要添加一个标签,因为这个镜像没有 默认标签。

我这里是拉取的另外一个: docker pull docker.io/jenkinszh/jenkins-zh

4、启动镜像 容器名jenkins1

docker run -d -p 8000:8080 -p 50000:50000 -v /usr/local/jenkins:/var/jenkins_home --name jenkins1 --restart always --privileged=true docker.io/jenkinszh/jenkins-zh

这里使用的是挂载的方式启动。

ps:这里启动时,如果访问不了,就查看日志:docker logs 容器名,如果报错信息是:touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied。

那么是挂载启动没有目录权限,解决办法:

1)chmod a+rwx /usr/local/jenkins

2)chmod a+rw /var/run/docker.sock

执行完这两个命令后,删除失败的容器,重新启动即可。

3)如果是将Jenkins转移到新的服务器,可能报错信息为:Failed to delete dirs /var/jenkins_home/war/help/parameter/description_bg.html

解决方法:sudo chown -R 1000:1000 挂载目录,例如:sudo chown -R 1000:1000 /usr/local/jenkins

5、访问8000端口,第一次可能有点久,需要等一会儿。

 

 

 这里的管理员密码获取方式:

1)进入容器jenkins1:docker exec -it jenkins1 /bin/bash

2)获取密码: cat /var/jenkins_home/secrets/initialAdminPassword(上面图片中红色的目录)

然后继续

ps:如果出现已离线的界面:

输入网址http://xxxxxx:8000/pluginManager/advanced访问。

进入该页面后最底下,找到【升级站点】,把其中的链接https改成http后提交,若不行就改为:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json并提交。

 

 

 

 

到这里jenkins就已经部署好了。

6、Jenkins全局工具配置

这里的JAVA_HOME获取方式:

1)进入容器jenkins1:docker exec -it jenkins1 bash

2) 执行:echo $JAVA_HOME

 

 

 

 

 

 7、安装Jenkins对应Maven插件

找到 “系统管理“ - “安装插件” ,点击 “可选插件”,找到如下maven插件的版本

插件名称 Maven Integration

需要登录服务器执行sh脚本的,还需要安装ssh插件。

8、新建任务

 

 

 9、配置任务svn账号密码

 

 

 

10、构建触发器,可自行配置

 

 

 11、打包

 

 

 12、正常情况,应用保存后,点击构建, 第一次构建可能耗时比较长,构建成功后,就能在/var/jenkins_home/workspace/任务名/target 目录查看到对应的jar包

因为我这里要自动部署,所以得继续配置。

13、继续配置环节:Post Steps我这里分为两部分:

1)本机操作:将构建成功后的jar包,移动到Dockerfile文件所在的目录

在Post Steps新增一个  执行shell

#!/bin/bash

#服务名称 可自定义
SERVER_NAME=kxrw

# 源jar名称,mvn打包完成之后,target目录下的jar包名称,也可选择成为war包,war包可移动到Tomcat的webapps目录下运行,这里使用jar包,用nohup java -jar 命令执行  

JAR_NAME=kxrw


#target 打包生成jar包的目录

JAR_PATH=/var/jenkins_home/workspace/test-kxrw/target

# 打包完成之后,把jar包移动到运行jar包的目录--->work_daemon,work_daemon这个目录需要自己提前创建

JAR_WORK_PATH=/var/jenkins_home/probject

#删除原目录的jar
rm -f $JAR_WORK_PATH/kxrw.jar

#复制jar包到执行目录

echo "复制jar包到执行目录:cp $JAR_PATH/$JAR_NAME.jar $JAR_WORK_PATH"
cp -f $JAR_PATH/$JAR_NAME.jar $JAR_WORK_PATH

echo "复制jar包完成"

 

2)登录服务器,进入Dockerfile目录,编译镜像然后打包

这里需要下载ssh相关插件。

找到 “系统管理“ - “系统配置” , “SSH remote hosts”,

 

 

 新增好后。

在Post Steps新增一个Execute shell script on remote host using ssh

#进入服务器Dockerfile所在目录
cd /usr/local/jenkins/probject

echo "停止正在运行的容器:kxrw1"
docker stop kxrw1

echo "删除容器:kxrw1"
docker rm kxrw1

echo "删除已经存在的Dockerfile生成镜像文件"
docker rmi kxrw

echo "编译Dockerfile生成镜像文件"
docker build -t kxrw -f Dockerfile .

echo "运行容器:kxrw"
docker run -d -p 8088:8080 --name kxrw1 --restart=always kxrw:

Dockerfile文件的内容参考https://www.cnblogs.com/hanfengyeqiao/p/14768499.html

这里为什么要分两步呢,因为在jenkins是在docker内的容器,如果要在jenkins内部执行宿主机命令需要配置其他东西有点麻烦。我这里偷了一个懒,重新登录当前服务器,进入对应目录即可执行命令。

到这里一个自动化打包流程就配置好了,如果有个性化的需求调整构建后执行的脚本即可。

 

posted @ 2021-05-14 17:55  齐华枫  阅读(1304)  评论(0编辑  收藏  举报