• Coding持续集成之自动化部署


    前言

    把一个SpringBoot编译成jar部署到服务器分为几步?答:3步。

    1、打成压缩包;

    2、SCP 上传到服务器;

    3、SSH 解压;

    如果使用持续集成,则可以实现提交代码时自动上线,原理如下图:

    DevOps自动上线原理

    图片

    常见的持续集成有:商业化的 CircleCI、开源的 Jenkins

    本文以小编公司使用的 Jenkins 云服务-Coding为例

    coding持续集成说明地址

    https://coding.net/products/ci?cps_source=PIevZ6Jr

    进入正题-实战演示

    注册CODING,创建一个 Git 仓库,提交代码;(5人以下免费,已经很不错了)

    注册地址:https://coding.net

    服务器创建SSH公私钥

    命令如下:

    ssh-keygen -m PEM -t rsa -b 4096 -C "your.email@example.com"
    
    • 1

    创建好后会在目录/root/.ssh生成两个文件(id_rsa是私钥|id_rsa.pub是公钥)

    [root@VM_0_3_centos .ssh]# pwd
    /root/.ssh
    [root@VM_0_3_centos .ssh]# ll
    total 16
    -rw------- 1 root root  743 Apr 10 14:32 authorized_keys
    -rw------- 1 root root 3243 Apr 10 13:20 id_rsa
    -rw-r--r-- 1 root root  742 Apr 10 13:20 id_rsa.pub
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    需要把公钥id_rsa.pub复制到authorized_keys文本中,另外需要把 id_rsa私钥配置到:项目设置——凭据管理(类型选择私钥)

    这样就完成了SSH无密码连接

    然后开始构建项目信息配置

    图片

    进入coding构建与部署模块,【流程配置】用编译器编写SSH语法pipeline

    jenkins官网语法介绍SSH Pipeline语法地址:

    https://jenkins.io/doc/pipeline/steps/ssh-steps/

    示例如下:

    pipeline {
      agent any
      stages {
        stage('检出') {
          steps {
            checkout(
              [$class: 'GitSCM', branches: [[name: env.GIT_BUILD_REF]],
              userRemoteConfigs: [[url: env.GIT_REPO_URL, credentialsId: env.CREDENTIALS_ID]]]
            )
          }
        }
        stage('部署') {
          steps {
            echo '部署中...'
            script {
              def remote = [:]
              remote.name = 'web-server'
              remote.allowAnyHosts = true
              remote.host = '106.54.18.228'
              remote.user = 'root'
              // 需要先创建一对 SSH 密钥,把私钥放在 CODING 凭据管理,把公钥放在服务器的 `.ssh/authorized_keys`,实现免密码登录
              withCredentials([sshUserPrivateKey(credentialsId: "d770d752-6d95-4936-9936-77da68a00736", keyFileVariable: 'id_rsa')]) {
                remote.identityFile = id_rsa
                // SSH 上传文件到远端服务器
                sshCommand remote: remote, command: "sh /opt/test.sh"
                sshCommand remote: remote, command: "for i in {1..5}; do echo -n \"Loop \$i \"; date ; sleep 1; done"
              }
            }
            echo '部署完成'
          }
        }
      }
    }
    
    • 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

    最终构建成功打印结果(和jenkins控制台日志输出很像)

    图片

    附jenkins控制台日志输出对比

    图片

    喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一 键三连哦!
    在这里插入图片描述

  • 相关阅读:
    Java项目:SSM药品进货销售管理系统
    docker day01
    简单讲解冒泡排序算法
    每日三题 7.25
    C++ Mysql对接实现登录注册
    Adobe产品2024
    6-JS的Fetch 跨域问题
    【Python】matplotlib画图
    肖sir__设计测试用例方法之经验测试方法09_(黑盒测试)
    【Linux】线程安全-生产者消费者模型
  • 原文地址:https://blog.csdn.net/wx17343624830/article/details/126712616