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


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

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

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

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

    在这里插入图片描述

    一. Jenkins新建任务:

    1. 进入Jenkins主界面,选择一个视图(如果没有视图新建一个视图,视图包含多个任务,建立视图的过程很简单,可无脑操作 不多说),点击左侧的 ”新建任务‘
      在这里插入图片描述
    2. 选择"流水线",填写任务的名称,可随意,最好是能区分项目是干什么的,填完后往下滑,还有很多要填的,不说的内容即默认无需修改。
      在这里插入图片描述
      第2步有需要注意的地方,就是这个SVN的路径,不可以只写一个子工程的路径,需要其上级路径,也就是同时包含父子工程的那层路径。
    3. 翻到 “流水线” 这一步,首先选择使用 Pipeline script from SCM 类型的脚本,下面选择 Subversion 作为代码拉取的平台类型,即SVN。下面填写项目的SVN路径,以及拉取代码所使用的 SVN的账户,没有就添加一个,都是无脑选项 不多说。
      在这里插入图片描述
    4. 接着往下翻,这里自定义脚本所在的路径,待会儿新建一个名字叫 Jenkinsfile 的文件放在这个目录下,这个Jenkinsfile就是脚本。
      在这里插入图片描述
      第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}'
            	}
            }
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    在这里插入图片描述

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

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

    这句说的是,切换到子工程所在的路径,然后在子工程的 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}'
    
    • 1

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

    ---- 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述
    6. 把Dockerfile和Jenkinsfile上传到SVN路径下,进入Jenkins,点击“立即构建”打包项目并上传到远程仓库。绿了就对了,没绿就是错。
    在这里插入图片描述
    7. 下载镜像:打包完成后,鼠标放到 docker列上,选择 logs,选择上方的最后一行。在这里插入图片描述
    这里是点击进入后的界面,复制镜像名,下图所示在这里插入图片描述
    登录装有Docker镜像的服务器,把镜像拉取下来:执行docker pull reg.xxx.com/dev/xxx-scm:45469,查看拉取状况 docker images在这里插入图片描述
    如果要下载镜像到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。在这里插入图片描述

  • 相关阅读:
    python将word文件转换成pdf文件
    SCT71403F50,SCT71403F33,TPS7B82,TPS7B81
    Lambda表达式入门,详细介绍样例
    Kotlin 协程调度切换线程是时候解开谜团了
    分布式事务之基于可靠消息的最终一致性架构设计方案
    致敬最美抗击疫情的逆行者 DIV布局大学生抗疫感动专题网页设计作业模板 疫情感动人物静态HTML网页模板下载
    No valid crumb was included in the request
    rosjava零散
    triton 客戶端用https协议访问服务
    vue3 中的根据某些特定的文字来筛选数组数据
  • 原文地址:https://blog.csdn.net/weixin_44449518/article/details/127936283