有時候官方提供的 plugin
並不適合團隊使用或者不存在團隊需要用到的 plugin
,你可以透過原有的 plugin
進行加工,或者為自己團隊打造一個屬於自己全新的 plugin
,今天將會介紹該如何客製化屬於自己團隊的 plugin
,透過自己封裝的 Image
達到建置環境、編譯程式、發布至各環境、發送通知等...
那麼在客製化之前你需要先了解一個概念, Drone Plugin
其實說白了就是封裝後的 Docker Images
,具有以下特性:
目標: 客製化個人 Drone Plugin
,並帶入自定義的 HELLO
參數,取代原本的 default
值。 GitHub 範例
## 輸入參數作為環境變量傳遞至 Drone Plugin 內部,需要加上 PLUGIN_ 前綴詞。
if [ -z ${PLUGIN_HELLO} ]; then
PLUGIN_HELLO="default"
fi
## 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 .
## 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 ]
drone.yml
檔後,當然要 tigger
確認撰寫是否正常,如果撰寫正確可以看見以下測試結果: