Jenkins+Docker+SVN实现SpringBoot项目半自动化部署

起因:入职后公司需要的技能,全部项目都使用的Jenkins+Docker部署

Jenkins详细教程:知乎大佬写的文章
Docker详细教程:一个大佬的博客
SVN使用教程:一个大佬的博客

深入了解Jenkins、Docker、SVN,去上面三个大佬的文章里看,我只总结使用步骤:

部署需求:父子依赖关系的SpringBoot项目,子系统依赖父工程中的内容,要求部署子系统,父子系统均放在SVN同级目录中(下图所示)

Jenkins+Docker+SVN实现SpringBoot项目半自动化部署_第1张图片

一. Jenkins新建任务:

  1. 进入Jenkins主界面,选择一个视图(如果没有视图新建一个视图,视图包含多个任务,建立视图的过程很简单,可无脑操作 不多说),点击左侧的 ”新建任务‘
    Jenkins+Docker+SVN实现SpringBoot项目半自动化部署_第2张图片
  2. 选择"流水线",填写任务的名称,可随意,最好是能区分项目是干什么的,填完后往下滑,还有很多要填的,不说的内容即默认无需修改。
    Jenkins+Docker+SVN实现SpringBoot项目半自动化部署_第3张图片
    第2步有需要注意的地方,就是这个SVN的路径,不可以只写一个子工程的路径,需要其上级路径,也就是同时包含父子工程的那层路径。
  3. 翻到 “流水线” 这一步,首先选择使用 Pipeline script from SCM 类型的脚本,下面选择 Subversion 作为代码拉取的平台类型,即SVN。下面填写项目的SVN路径,以及拉取代码所使用的 SVN的账户,没有就添加一个,都是无脑选项 不多说。
    Jenkins+Docker+SVN实现SpringBoot项目半自动化部署_第4张图片
  4. 接着往下翻,这里自定义脚本所在的路径,待会儿新建一个名字叫 Jenkinsfile 的文件放在这个目录下,这个Jenkinsfile就是脚本。
    Jenkins+Docker+SVN实现SpringBoot项目半自动化部署_第5张图片
    第4条这里,脚本路径是相对于SVN拉取代码的路径而言的相对路径。举个例子,比如说,我代码拉取的SVN路径是 http://192.168.110.56/scm/ADMIN-BACK,ADMIN-BACK 是项目的根路径,ADMIN-BACK 内有两个父子依赖关系的项目 xxx-base 和 xxx-scm,并且是同级路径,(上面 项目结构带文件夹的那个图所示的结构),现在我在子工程 xxx-scm 下面新建个文件夹,叫 nmsl,nmsl文件夹下面我放两个文件,一个叫 Dockerfile,一个叫 Jenkinsfile,现在那个脚本路径就写成 xxx-scm/nmsl/Jenkinsfile
  5. 下面就是 去编写脚本文件 Jenkinsfile 和 Dockerfile
---- Jenkinsfile // 这句就不用写上了

pipeline {
    agent none
    environment {
        VERSION = 'V1.0.0'
    }
    stages {
        stage('build') {
            agent {
				docker {
					image 'maven:3-alpine'
					args '-v /root/.m2:/root/.m2'
				}
			}
            steps {
                sh 'cd xxx-base; mvn clean install'
                sh 'cd xxx-scm; mvn clean package -U'
            }
        }
        stage('docker') {
        	agent any
        	steps {
        		sh 'cd xxx-scm; docker build -f xxx-scm/Dockerfile -t reg.xxx.com/dev/xxx-scm:${SVN_REVISION} xxx-scm-system/target'
        		sh 'docker push reg.xxx.com/dev/xxx-scm:${SVN_REVISION}'
        	}
        }

    }
}

Jenkins+Docker+SVN实现SpringBoot项目半自动化部署_第6张图片

主要解释下面两句,上面两句比较死:

sh 'cd xxx-scm; docker build -f xxx-scm/Dockerfile -t reg.xxx.com/dev/xxx-scm:${SVN_REVISION} xxx-scm-system/target'

这句说的是,切换到子工程所在的路径,然后在子工程的 xxx-scm-system/target 目录下,根据Dockerfile构建一个容器,并取名为 reg.xxx.com/dev/xxx-scm,并设置tag为${SVN_REVISION},这里的 xxx-scm-system 即为项目启动类所在的模块,子工程打包后的jar包存放路径即为 xxx-scm-system/target。

sh 'docker push reg.xxx.com/dev/xxx-scm:${SVN_REVISION}'

这句是,推送镜像到远程仓库,远程仓库可能是自己公司搭建的

---- Dockerfile // 这句就不用写上了

FROM reg.xxx.com/dev/xxx-jre:8.1

WORKDIR /xxx

VOLUME /xxx-log

COPY xxx-scm-system-*-SNAPSHOT.jar xxx-scm.jar
EXPOSE 8877

ENTRYPOINT java $JAVA_OPTS -jar xxx-scm.jar

Jenkins+Docker+SVN实现SpringBoot项目半自动化部署_第7张图片
6. 把Dockerfile和Jenkinsfile上传到SVN路径下,进入Jenkins,点击“立即构建”打包项目并上传到远程仓库。绿了就对了,没绿就是错。
Jenkins+Docker+SVN实现SpringBoot项目半自动化部署_第8张图片
7. 下载镜像:打包完成后,鼠标放到 docker列上,选择 logs,选择上方的最后一行。Jenkins+Docker+SVN实现SpringBoot项目半自动化部署_第9张图片
这里是点击进入后的界面,复制镜像名,下图所示Jenkins+Docker+SVN实现SpringBoot项目半自动化部署_第10张图片
登录装有Docker镜像的服务器,把镜像拉取下来:执行docker pull reg.xxx.com/dev/xxx-scm:45469,查看拉取状况 docker imagesJenkins+Docker+SVN实现SpringBoot项目半自动化部署_第11张图片
如果要下载镜像到windows,可以这样,执行 docker save -o xxx-scm:45469.tar reg.xxx.com/dev/xxx-scm:45469,将镜像保存到了当前目录下,然后使用ftp工具down到window就行了在这里插入图片描述
8. 运行容器,docker run -p 8877:8877 -v /root/SCM/config:/xxx/config -v /opt:/opt -d --name xxx-scm reg.xxx.com/dev/xxx-scm:45469
这句是说,映射容器的8877端口到物理机的8877端口,将容器的 /xxx/config 路径挂载到物理机的 /root/SCM/config 路径,将容器的 /opt 挂载到物理机的 /opt 路径,-d 表示以守护进程的模式运行容器,容器的名字叫 xxx-scm,建立容器 使用的镜像是 reg.xxx.com/dev/xxx-scm:45469。至于挂载哪个容器哪个目录,这里有句话要说,在 Dockerfile里有个配置项,叫WORKDIR /xxx,这里的 /xxx,就是下图的 /xxx。在这里插入图片描述

你可能感兴趣的:(工作记录,svn,jenkins,docker,SpringBoot)