# Gitlab 觸發 Drone 執行 pipeline 事件。
## 構建 project
這邊測試設為 demo


# 開啟本地端 hook
如果是「本機」環境測試用,記得要開啟 Gitlab 本地端的 webhook
「Settings --> Network --> Outbound requests」
* 勾選Allow requests to the local network from web hooks and services


刷新

可以看到我的 gitlab 專案囉
# 啟用 drone 專案
當啟用成功後會看見以下話面,且表示 Gitlab 與drone 的 webhook 已經建立成功。
>root/demo
>


下載專案至目錄
> git clone http://172.24.231.23:10080/root/demo.git

> vim ./drone/.drone.yml
>
# 撰寫 .drone.yml
以上的步驟就完成了,接著可以開始撰寫 .drone.yml 官方教學文件
備註:Drone 0.8 與 1.0 後的 yaml 檔案撰寫差異很大,需要在依據官方文件做參考,以下示範1.0之後的版本 Drone 0.8 文件
在 yaml檔案中,除了原本的 clone 事件外,還有三個事件分別是「host、echo、dev_action」,
https://0-8-0.docs.drone.io/getting-started/
host: 打印出容器內 /etc/hosts 內容
echo: 印出 78523 內容
dev-action: 印出 111111 內容
```yml
kind: pipeline
type: docker # 在 Docker 內部執行管道命令
name: clone # 可自行定義的名稱
steps:
# 事件一
- name: host # 事件一:可自行定義的名稱
image: alpine # 使用 alpine 容器
commands: # 預執行的 shell 指令,這邊印出 hosts 內容
- cat /etc/hosts
when: # 無論 clone 成功或失敗,都會跑該事件
status: [ success, failure ]
# 事件二
- name: echo # 事件二:可自行定義的名稱
image: plugins/git # 使用 plugins/git 容器
commands: # 預執行的 shell 指令,這邊印出 78523 內容
- echo "78523"
when: # 當觸發條件為 master 分支時會執行的動作
branch:
- master
# 事件三
- name: dev_action # 事件三:可自行定義的名稱
image: plugins/git # 使用 plugins/git 容器
commands: # 預執行的 shell 指令,這邊印出 111111 內容
- echo "111111"
when: # 當觸發條件為 develop 分支時會執行的動作
branch:
- develop
trigger: # 觸發 pipeline 條件,分支為 master,且進行 push 行為
branch:
- master
event:
- push
撰寫完 yaml 檔案後,只需要在 master 分支執行 push 行為,接下來 Gitlab 會自動 tigger Drone 執行事件。
```

上述編寫完成後當撰寫完 yaml 檔案後,只需要在 master 分支執行 push 行為,接下來 Gitlab 會自動 tigger Drone 執行事件。

# drone pull private registry
抓取來自 私有 docker 一樣填入我們的 docker全部名稱也就是
```yml
kind: pipeline
type: docker # 在 Docker 內部執行管道命令
name: clone # 可自行定義的名稱
steps:
# 事件一
- name: hoste # 事件一:可自行定義的名稱
image: activate.adobe.com/library/alpine # 使用 alpine 容器
commands: # 預執行的 shell 指令,這邊印出 hosts 內容
- cat /etc/hosts
when: # 無論 clone 成功或失敗,都會跑該事件
status: [ success, failure ]
# 事件二
- name: echo # 事件二:可自行定義的名稱
image: activate.adobe.com/library/plugins/git # 使用 plugins/git 容器
commands: # 預執行的 shell 指令,這邊印出 78523 內容
- echo "78523"
when: # 當觸發條件為 master 分支時會執行的動作
branch:
- master
# 事件三
- name: dev_action # 事件三:可自行定義的名稱
image: activate.adobe.com/library/plugins/git # 使用 plugins/git 容器
commands: # 預執行的 shell 指令,這邊印出 111111 內容
- echo "111111cs"
when: # 當觸發條件為 develop 分支時會執行的動作
branch:
- develop
trigger: # 觸發 pipeline 條件,分支為 master,且進行 push 行為
branch:
- master
event:
- push
```
commit 送出

構建中

構建完成!
# 單機測試額外狀況 無限pending
runner: polling queue
本來是開啟 docker-compose debug 模式去看

發現這個後來去查 為什麼會 pending 可能是為 預設是多台 所以有 http proxy 導致無法 pull image?

後來我把這參數加上
docker-compose.yml

```yml
....
- DRONE_AGENTS_DISABLED=true
```
問題就解決囉!,到現在為止我們就已經完成搭建一個 gitlab 去觸發 Drone pipeline 事件囉。