記錄: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

通過上圖可以設置根據不同的觸發規則來自動構建項目達到自動發布的目的。


更多測試技術分享、學習資源以及一些其他福利可關注公眾號:【Coding測試】獲取:
Coding測試


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM