Shell | Pipeline | |
缺點 | 單個任務流程不能並行處理任務無法分解至多個節點執行 | 初期有一定學習成本需要從頭編寫Groovy指令碼 |
優點 | 上手簡單對於運維無門檻有大量Shell指令碼可以復用 | 任務可以按階段分解至不同節點執行且可並行處理友好的視覺化流程圖 |
#! /usr/bin/env groovy
def Controller(){
Init.ExtraSettings()
node(NODE_STAGE_INIT) {
stage('Stage 1: Pre-Process') {
// Fetch data from CMDB
CMDB.FetchConfig()
if (APP_LANG in APP_LANG_NO_COMPILE) {
NODE_STAGE_BUILD = "master"
} else {
NODE_STAGE_BUILD = APP_LANG
}
}
}
node(NODE_STAGE_GIT) {
stage('Stage 2: Checkout & SonarQube') {
Git.Controller()
// SonarScanner
Init.SonarAnalyzer()
}
}
node(NODE_STAGE_BUILD) {
stage('Stage 3: Build Project') {
// Compile
Compile.Controller()
}
}
if ( BUILD_LEGACY == false ) {
node(NODE_STAGE_DOCKER) {
stage('Stage 4: Build Image') {
// Build & Push Docker image
Docker.Controller()
}
}
node(NODE_STAGE_K8S) {
stage('Stage 5: Deploy to k8s') {
k8s.Controller()
}
}
next_stage_id = 6
} else {
// 相容釋出至非容器環境
node(NODE_STAGE_BUILD) {
stage('Stage 4: Deploy') {
Deploy.Legacy()
}
}
next_stage_id = 5
}
node(NODE_STAGE_INIT) {
stage("Stage $next_stage_id: Post-Process") {
// Report
Notice.Report()
// Automatic Test
}
}
}
return this
- Code stages.groovy
// Triggers
SKIP_DOCKER = false
SKIP_KUBE = false
SKIP_COMPILE = false
SKIP_GIT = false
SKIP_TEST = false
SKIP_SONAR = true
SKIP_REPORT = false
-
如果你沒許可權訪問程式碼,那麼你可能也不能釋出我的專案
-
許可權檢查在任務預處理階段進行,不透過則直接終止任務
-
簡單方便易於實現(且又能少只鍋)
-
檢查Git Repo是否為空
-
檢查是否選擇了版本
-
檢查是否需要在指定目錄下進行Checkout
-
檢查釋出環境與程式碼版本規則是否匹配
-
最後,輸出程式碼相關資訊,方便事後追溯
-
PHP專案,如檢測到專案根目錄存在composer.json則呼叫compoer install
-
NodeJS專案,如未提供編譯命令(BUILD_COMMAND),則執行預設指令(npm i)
-
GoLang專案,如未提供編譯命令(BUILD_COMMAND),則執行預設指令(make)
-
查詢並模版檔案
-
在模版檔案基礎上加入專案資訊,如
專案程式碼
為滿足稀奇古怪的需求而特設的指令
-
Build image
-
Push image
[{"id":0,
"time": "00 01 * * *",
"name": "test-task",
"command": "echo 'hello world'",
"description": "Hello world",
"notify": "user1@abc.com|user2@abc.com",
"when": "failure"
}]
-
id為編號,從0開始,必填重要項
-
time為執行任務時間,標準Cron格式
-
name為計劃任務名稱,應與專案相關
-
command為要執行的命令
-
description為備註資訊
-
notify為接收通知者郵件地址,多個之間加 ‘|’, 企業微信傳送
-
when為傳送訊息的條件:
always
never
failure
success
-
為避免任務失敗後迴圈執行,所有失敗的任務都會先傳送失敗訊息然後再以成功狀態結束。