超详细的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内部执行宿主机命令需要配置其他东西有点麻烦。我这里偷了一个懒,重新登录当前服务器,进入对应目录即可执行命令。
到这里一个自动化打包流程就配置好了,如果有个性化的需求调整构建后执行的脚本即可。