iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 17
1
DevOps

就是「懶」才更需要重視DevOps系列 第 17

Day17 Drone Plugin

Bash 建置 plugin 參考文件

有時候官方提供的 plugin 並不適合團隊使用或者不存在團隊需要用到的 plugin ,你可以透過原有的 plugin 進行加工,或者為自己團隊打造一個屬於自己全新的 plugin ,今天將會介紹該如何客製化屬於自己團隊的 plugin ,透過自己封裝的 Image 達到建置環境、編譯程式、發布至各環境、發送通知等...

那麼在客製化之前你需要先了解一個概念, Drone Plugin 其實說白了就是封裝後的 Docker Images,具有以下特性:

  • 共享: 可用於公司不同團隊,或提供開源使用。
  • 重複使用。

目標: 客製化個人 Drone Plugin,並帶入自定義的 HELLO 參數,取代原本的 default 值。 GitHub 範例

  • Step1: 建立 update.sh
## 輸入參數作為環境變量傳遞至 Drone Plugin 內部,需要加上 PLUGIN_ 前綴詞。
if [ -z ${PLUGIN_HELLO} ]; then
  PLUGIN_HELLO="default"
fi
  • Step2: Build Image
## alpine image 為基底
FROM alpine:3.4

## 安裝 bash 指令
RUN apk --no-cache add bash

## 將寫好的腳本複製到映像檔內
COPY update.sh /bin/

## 啟動容器後執行
CMD ["/bin/update.sh"]

執行以下指令

## docker build -t <Your Image Name & Tag> .
$ docker build -t neil605164/drone-plugin-ex .
  • Step3: Push Image
## docker push <Your Image Name & Tag>
$ docker push neil605164/drone-plugin-ex

yaml 內需要帶入參數時,只需要引用 hello,而不是 plugin_hello,另外 Drone 1.0 後的版本,自定義的參數需要寫在 settings 底下, 而 Drone 0.8 的版本可以直接呼叫使用,如以下範例:

## 1.0 版本寫法
kind: pipeline
type: docker      # 在 Docker 內部執行管道命令
name: default       # 可自行定義的名稱

steps:
  - name: self-plugin                    # 事件一:可自行定義的名稱
    image: neil605164/drone-plugin-ex    # 使用 neil605164/drone-plugin-ex  容器
    settings:
      hello: "Wow"                       # 提供 hello 值為「Wow」,若不提供則為「default」值
    commands:                            # 驗證是否有接收到帶入的值
    - echo $PLUGIN_HELLO                 
    when:                                # 當觸發條件為 master 分支時會執行的動作
      branch:
      - master
trigger:     # 觸發 pipeline 條件,分支為 master,且進行 push 行為
  branch: 
  - master
  event:
  - push
## 0.8版本寫法
clone:
  git:
    image: plugins/git

pipeline:
  self-plugin:                           # 事件一:可自行定義的名稱
    image: neil605164/drone-plugin-ex    # 使用 neil605164/drone-plugin-ex  容器
    hello: "Wow"                         # 提供 hello 值為「Wow」,若不提供則為「default」值
    commands:                            # 驗證是否有接收到帶入的值
    - echo $PLUGIN_HELLO          
    when: 
      branch: [ master ]                 # 當觸發條件為 master 分支時會執行的動作
      
branches:                                # 觸發 pipeline 條件,分支為 master
  include: [ master ]
  • Step5: Push drone.yml
    撰寫完 drone.yml 檔後,當然要 tigger 確認撰寫是否正常,如果撰寫正確可以看見以下測試結果:


上一篇
Day16 該如何撰寫 Drone Yaml 檔
下一篇
Day18 該如何實現自動化
系列文
就是「懶」才更需要重視DevOps30

尚未有邦友留言

立即登入留言