coding持续集成之自动发布

把一个SpringBoot项目在DevOps一站式研发平台coding编译成jar远程部署到服务器分为几步?答:3步。

  • 1、编译生成构建产物-jar包;
  • 2、SCP 上传到远端服务器;
  • 3、远程执行shell命令运行项目;

coding的持续集成,已经可以实现版本发布自动上线,原理如下图:

  • DevOps自动上线原理



    常见的持续集成有:

商业化的 CircleCI、开源的 Jenkins,以及 Jenkins 云服务—Coding
coding持续集成说明https://coding.net/products/ci?cps_source=PIevZ6Jr


自动化部署实战演示

自动化部署的两种方式

服务器环境-centos7.2

方式一(传统自动化部署)

使用技术如下:

工具 用途
jenkins 持续集成工具
git 分布式版本控制工具
maven 项目管理工具-用于构建项目
jdk java项目运行环境
  • 上述工具需要在安装到服务器上(jenkins集成ssh功能,可以不用安装到服务器)
    示例服务器:
    公司内网测试机192.168.1.91
[root@bogon data-view]# pwd
/opt/webapps/dataview-src/ty-data-view/data-view
[root@bogon data-view]# ll
总用量 36
-rw-r--r--. 1 root root  1206 4月  20 14:29 build.sh
drwxr-xr-x. 4 root root    43 4月  20 14:30 common
drwxr-xr-x. 4 root root    61 4月  20 14:31 d-view
-rw-r--r--. 1 root root 11858 4月  17 14:28 init_db.sql
-rw-r--r--. 1 root root  4434 4月  20 14:29 pom.xml
-rw-r--r--. 1 root root    14 1月   2 14:46 README.md
-rw-r--r--. 1 root root  7491 4月  20 14:29 settings.xml
drwxr-xr-x. 3 root root    20 4月  20 14:31 target
[root@bogon data-view]# git branch -a
  dev
* test
  remotes/origin/HEAD -> origin/dev
  remotes/origin/dev
  remotes/origin/master
  remotes/origin/test
[root@bogon data-view]#
  • 通过jenkins的ssh功能远程执行shell命令实现自动化部署流程
  • jenkins 控制台日志输出


  • 备注:传统的jenkins流水线构建需要设置的参数比较繁琐,需要配置项目git地址、maven路径、jdk路径有时候一处不对就会造成整体流程不通。

方式二 一站式DevOps研发平台coding持续集成(coding完美的集成了jenkins)

CODING 的持续集成本质上就是每次实例化一台 CVM,再把 Jenkins 安装进去,和我们在普通的云服务器上部署是一样的。
CODING 持续集成会为每个构建任务分配一台 VM 作为构建资源,您可以通过内置的 agent label 来使用不同的环境进行构建。目前支持的构建环境有三种:

  • 默认环境:在 CODING 提供的云主机上执行 Pipeline 或 stage
  • Docker 环境:在指定的 Docker 镜像启动的容器环境中执行 Pipeline 或 stage
  • Dockerfile 环境:使用代码仓库中指定的 Dockerfile 脚本构建的容器环境中执行 Pipeline 或 stage
  • 首先需要创建coding平台和远端服务器连接

预装的软件 SDK

默认环境中提供的 SDK 以及对应的版本如下(更新日期:2019 年 11 月 30 日):
android-sdk: 26.1.1
build-essential
java: 1.8.0_191
python: 2.7.12
python3: 3.5.2
python3.7: 3.7.3
nodejs: 10.15.3
php: 7.3.5
ruby: 2.6.0
go: 1.12.4
dotnet-core: 2.2
erlang: Erlang/OTP 21
elixir: 1.8.1

预装的命令行工具

默认环境中提供的命令行工具以及对应的版本如下(更新日期:2019 年 11 月 30 日):
cmake: 3.5.1
maven: 3.6.1
gradle: 4.10.3
nvm: 0.34.0
yarn: 1.15.2
composer: 1.8.5
bundler: 1.17.2
rvm: 1.29.7
docker: 18.09.1
docker-compose: 1.23.1
kubectl: 1.14
rancher: 2.2.0
helm: 2.13.1
coscmd: 1.8.5.36
tccli: 3.0.67.1
svn: 1.9.3
mercurial: 3.7.3
git: 2.7.4
git-lfs: 2.7.2
jq: 1.5-1-a5b5cbe
pigz: 2.3.1
sshpass: 1.05
vsftpd: 3.0.3

SpringBoot项目自动化部署具体步骤如下:
  • 服务器创建SSH公私钥
    命令如下:
ssh-keygen -m PEM -t rsa -b 4096 -C "your.email@example.com"
  • 创建好后会在目录/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
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 {
        sh 'du -h --max-depth=1 ~/.m2/repository'
        sh 'env'
        dir(path: 'user-authority/') {
          echo '构建中...'
          sh 'env'
          sh 'pwd'
          sh 'mvn -T 1C clean install -D maven.test.skip=true -D maven.compile.fork=true -s ./settings.xml'
          echo '构建完成.'
          script {
            def exists = fileExists 'README.md'
            if (!exists) {
              writeFile(file: 'README.md', text: '权限中心-test')
            }
          }

        }

        archiveArtifacts(artifacts: '**/target/*.jar', fingerprint: true)
      }
    }
    stage('部署') {
      steps {
        echo '部署中...'
        script {
          // 声明服务器信息
          def remote = [:]
          remote.name = 'web-server'
          remote.allowAnyHosts = true
          remote.host = '121.36.19.189'
          remote.port = 22
          remote.user = 'root'
 
          // 把「CODING 凭据管理」中的「凭据 ID」填入 credentialsId,而 id_rsa 无需修改
          withCredentials([sshUserPrivateKey(credentialsId: "9274aafa-72fc-472b-8ae4-xxxxxx", keyFileVariable: 'id_rsa')]) {
            remote.identityFile = id_rsa
 
            // SSH 上传文件到远端服务器
            sshPut remote: remote, from: 'user-authority/target/user-authority-0.0.1-SNAPSHOT.jar', into: '/opt/'
            sshCommand remote: remote, command: "sh /opt/test.sh"
          }
        }
        echo '部署完成'
      }
    }
  }
}

  • 此处maven构建过程中遇到一个坑

由于项目需要拉取私服的依赖包,需要加载项目中使用的settings.xml文件
把使用私服配置的settings.xml文件放到项目src目录下

  • 配置maven依赖包的缓存


  • 注释原有settings.xml的repository路径,走coding默认环境的maven。


  • 使用maven构建命令并指向需要加载的settings.xml文件
mvn -T 1C clean install -D maven.test.skip=true -D maven.compile.fork=true -s ./settings.xml
图片.png
  • 写好pipeline构建脚本后,点击【立即构建】coding会根据Jenkinsfile自动完成脚本,构建成后会生成项目jar包,并把项目jar包推送至远端服务器,远程执行test.sh脚本运行SpringBoot项目。


  • 通过coding构建控制台日志可以看到项目已成功启动,访问结果如下:


  • coding自动构建--触发规则
    可以根据项目中源码变动情况来触发自动构建job



通过上图可以设置根据不同的触发规则来自动构建项目达到自动发布的目的。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,585评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,283评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,760评论 0 324
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,461评论 1 266
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,280评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,268评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,656评论 3 385
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,322评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,629评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,691评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,445评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,299评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,694评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,982评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,244评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,642评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,829评论 2 335

推荐阅读更多精彩内容