Pages - Menu

2021年1月28日 星期四

[Drone] drone實戰篇-yaml採坑篇


前言

  換工作後,開始接觸k8s、GCP、GKE,再來是Drone。

k8s中又延伸了kustomize ,ymal的寫法、佈署方式。

GCP中的cloud armor、GCE ,然後GKE的架構

真的是....滿滿的坑阿。以上講到的,還處於懞懂中,

筆記不知道何年何月何日可寫


正文

  簡單說一下環境,在GKE上面佈署 drone 跟 gitlab,

當gitlab有條件觸發的話(例如在push 在master上),會同時送出一個webhook給drone,

此時drone就會去gitlab  pull程式碼下來,做你想要的動作(例如,打包成image,把image送到gcr上面,再佈署到GKE上)。


先來份yaml,建議可以先看一下yaml是什麼東西,這樣寫起來比較不會撞牆。

(ref. Wiki-YAML)



kind: pipeline

name: Pipeline(branch)


steps:      

- name: push2GCR(前哨)

  image: plugins/gcr


  settings:

    repo: gcr.io/abcproject/landingpage

    tags:

      - latest

      - ${DRONE_COMMIT}

    # dockerfile: configs/beta/Dockerfile

    json_key:

      from_secret: GOOGLE_CREDENTIALS

    build_args:

      - website=beta


- name: deploy2GKE(前哨)

  image: nytimes/drone-gke

  environment:

    TOKEN:

      from_secret: GOOGLE_CREDENTIALS

  settings:

    project: abcproject

    # 改拉參數傳入kube.yml內

    # template: configs/beta/.kube.yml

    vars:

      deployName: landing-page-beta

      env: beta

    zone: asia-east1-a

    cluster: abccommon

trigger:   

  # branch:

  #   - master

  ref:

    include:

      - refs/heads/master

  event:

    - push


分成三小塊來看,

如果以 --- 區分的話,那

kind: pipeline

name: Pipeline(branch)

是必須的。


再來是 steps ,

根據步驟游上往下執行,如果要并行的話,則使用depend_on ,這部分留到下次講。

1.  trigger ,這是觸發條件,表示在gitlab上面做了哪些動作,會觸發這個step(步驟)

  這邊的觸發事件,常用到應該是 Branch、Reference 以及 Event

  (ref. Drone-Trigger)

  Branch 跟 Event 比較好理解(但碰到Tag的事件又是另一回事了) 。

  Reference 這個其實只要在你的git裡面下指令

  tree .git/refs/

  大概就會知道他在講些什麼,git的底層都是靠refs去用出來的

  (

    ref.

    Git References

    深入 Git:分支 refs

  )

但要注意的是,drone 1.X,以後的版本不支援event的tag 與 branch 共存。

可以參考這篇

(

  ref.

  Step condition tag & branch not working with Github #2536

  從 Drone 0.8 升級到 1.0

)


2. steps:

這部分則開始由上往下開始執行,

像上面的程式先做的是將程式打包後,上傳到GCR上面。

(最上面還有一段clone,會先做(這是drone預設的),將gitlab的程式複製到機器內,這樣才能做後面的上傳,這一塊可以 參考 Drone-cloning

上傳到GCR使用的 plugins/gcr ,這個image,裡面的參數請參考  說明頁面

由於這邊需要上傳到GCR,故要先到Google 的 服務賬戶申請權限 ,除了需要push以外還必須要有 storage.buckets.get  

這邊會取得一個json檔案,將內容塞入drone內的Sercets(Fig.1)。




然後,不論是 build_args 或 vars都是 image所提供讓你帶參數的地方,

如果image本身沒有提供的話,就真的要自己去改寫了,

後來有碰到要把環境部屬到騰訊雲上,沒有合適的image可以使用,

只好自己改了,後面有文章會寫到。

drone的plugin可以去參考各個plugin的git,

通常裡面會寫的比較詳細。


這個範例的條件還算簡單,

後續碰到的那一堆,很多重複的,為了日後維護,又去學了jsonnet 

這又是另一個坑了...DevOops阿 ,坑坑相連到天邊。

沒有留言:

張貼留言