• SpringBoot+Git+Jenkins+Docker实现CI/CD


    现在DevOps这么运行,你没有理由不去了解,不去实践,这次就以Springboot为底,利用Git,jenkins,Docker实现持续集成和持续部署!

    开发流程

    下面是常用的开发流程图:

    dev

    我们简单说说这张图:首先我们会将代码文件、测试文件以及Dockerfile都存在代码仓库里,版本控制利用git,这里代码仓库有很多选择,比如github、码云(本次使用)、Coding以及自己搭建的gitlab。然后由持续集成工具进行自动化构建,包括了测试、编译、打包、构建镜像、推送镜像到仓库(有很多选择,如docker官方仓库,时速运、自己搭建的Registry)、启动服务等操作,持续集成工具也有很多选择,比如Jenkins(这次使用)、Gitlab CI、Trivas CI。这里使用的容器是Docker,这里Docker的编排工具可以选择Swarm,也可以是K8S。

    本次实现流程如下:

    1. push代码到码云触发WebHook
    2. Jenkins从码云拉取代码
    3. maven构建代码
    4. build镜像
    5. push镜像到镜像仓库
    6. 部署服务

    配置

    关于Jdk、Git、Maven的配置这里就不说,自己面向搜索引擎。这里主要说Jenkins和码云的配置。

    Jenkins安装配置

    1. 下载Jenkins(采用war包安装)
    2. 将war包放入Tomcat的webapps目录下
    3. 进入YourHostIp:8080/jenkins路径下进行Jenkins的初始化,我们进入 用户自定义插件 安装界面,你可以根据自己的构建方式选择需要安装的插件,本次使用的Pipelines方式进行构建,Pipelines方式是Jenkins2推荐的方式,所以我们构建Pipelines相关的插件进行安装,当然待会进入Jenkins安装也行。
    4. 配置用户名和密码
    5. 全局工具配置(从系统管理进入全局工具配置,配置Jdk、Git、Maven)
    6. 安全配置(从系统管理进入全局安全配置),如下图:

      jenkins_security

    Jenkins构建任务

    1. 新建任务,构建一个流水线任务(Pipeline)
    2. 在配置里构建触发器,如下图:

      jenkins_webhooks_url

    3. 构建Pipeline脚本(Pipeline脚本写法见参考)

      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
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
        #!groovy
      pipeline{
      agent any
      //定义仓库地址
      environment {
      REPOSITORY="https://gitee.com/todorex/springboot_docker_git_jenkins_demo.git"
      }

      stages {

      stage('获取代码'){
      steps {
      echo "start fetch code from git:${REPOSITORY}"
      // 清空当前目录
      deleteDir()
      // 拉取代码
      git "${REPOSITORY}"
      // 清空之前的容器
      sh 'docker stop $(docker ps -a -q)'
      sh 'docker rm $(docker ps -a -q)'
      }
      }

      stage('Maven 构建'){
      steps {
      echo "start compile"
      // 切换目录
      dir('demo') {
      // 重新打包
      sh 'mvn -Dmaven.test.skip=true -U clean install'
      }
      }
      }

      stage('构建镜像'){
      steps {
      echo "start build image"
      dir('demo') {
      // build镜像
      sh 'docker build -t todorex/springboot_docker_git_jenkins_demo:1.0 .'
      // 登录镜像仓库
      sh 'docker login -u your_username -p your_password'
      // 推送镜像到镜像仓库
      sh 'docker push todorex/springboot_docker_git_jenkins_demo:1.0'
      }
      }
      }

      stage('启动服务'){
      steps {
      echo "start demo"
      // 部署服务
      sh 'docker run -d -p 8888:8888 --name=demo todorex/springboot_docker_git_jenkins_demo:1.0'
      }
      }

      }
      }

    SSH的配置

    为了避免jenkins拉取代码时需要输入密码,这里需要配置SSH免密码拉取。如下图:

    gitee_ssh

    WebHooks配置

    当你每次对代码仓库进行push操作时,会自动通知jenkins进行构建
    gitee_webhooks

    测试

    这次项目的代码仓库为:springboot_docker_git_jenkins_demo

    关于Dockerfile以及docker-compose.yml的编写,自己也去面向搜索引擎看看吧。

    当我们push代码之后,jenkins就会自动帮我们进行构建。如下图:
    jenkins_test

    PS:第一次比较慢是因为要安装Maven依赖,后面就好了。

  • 相关阅读:
    IO模型
    Java NIO概述
    消息系统避免分布式事务
    JVM调优总结
    设计模式的六大原则
    Java 内存区域与内存溢出
    windows go安装
    ZooKeeper原理及使用
    再谈HashMap
    Html5 播放实时音频流
  • 原文地址:https://www.cnblogs.com/mscm/p/13152060.html
Copyright © 2020-2023  润新知