CI/CD 大亂鬥: Drone 1.0 功能介紹

drone ci/cd

很高興受到 Devops Taiwan 邀請到台北講『Drone CI/CD 1.0 新功能』,現場太多 CI/CD 工具一起 PK,有興趣可以看活動網頁。其實我在其他場合講過很多次 Drone 的基礎,所以這次上台北最主要探討 Drone 在今年 2019 Release 1.0 的一些重大功能,我相信大家在用舊的版本已經很順了,其實如果不升級到新的版本也是沒差。底下我會一一介紹 1.0 的新功能。有共筆紀錄,大家可以先參考看看。

[Read More]

在 appveyor 內指定 Go 語言編譯版本

golang logo

相信比較少人知道 appveyor 這服務,我會接觸到此服務最大的原因是,要提供 Windows 的 Docker Image,並且上傳到 DockrHub,此服務提供了 Windows 環境,讓開發者可以透過此服務編譯 Windows 的 Binary 檔案,並且在 Windows 上執行測試,這對於我在寫 Go 語言開源專案非常有幫助,畢竟平常開發真的沒有 Windows 相關的環境可以使用。但是 appveyor 在更新第三方套件非常的慢,這時候我們想要用 GO 的 1.12 版本就需要自行來安裝,安裝方式其實也不難,請參考底下設定。

[Read More]

用 Go 語言讀取專案內 .env 環境變數

golang logo

在現代開發專案時,一定會用到環境變數,像是讀取 AWS Secret Key 等等,在部署上面也會透過設定變數讓專案依據不同環境讀取不同環境變數,而 Go 語言內如何實現讀取環境變數,又可以讓開發者透過 .env 檔案動態改變環境變數,本影片用簡單的套件來實現。這個在其他語言的 Framework 都有實現,像是 Laravel 的 .env 設定。透過本篇例子也教大家如何 import Go 語言的 Package。

[Read More]

用五分鐘了解什麼是 unbuffered vs buffered channel

golang logo

本篇要跟大家聊聊在 Go 語言內什麼是『unbuffered vs buffered channel』,在初學 Go 語言時,最大的挑戰就是了解 Channel 的使用時機及差異,而 Channel 又分為兩種,一種是 buffered channel,另一種是 unbuffered channel,底下我來用幾個簡單的例子帶大家了解這兩種 channel 的差異,讓初學者可以很快的了解 channel 使用方式。

[Read More]

10 分鐘內用 Traefik 架設 Drone 搭配 GitHub 服務

這標題也許有點誇張,但是如果實際操作一次,肯定可以在 10 分鐘內操作完成。本篇來教大家如何用 Traefik 當作前端 Proxy,後端搭配 Drone 服務接 GitHub,為什麼會用 Traefik,原因很簡單,你可以把 Traefik 角色想成是 Nginx,但是又比 Nginx 更簡單設定,另外一點就是,Traefik 自動整合了 Let’s Encrypt 服務,您就不用擔心憑證會過期的問題。假如機器只會有一個 Drone 當 Host 的話,其實也可以不使用 Traefik,因為 Drone 其實也是內建自動更新憑證的功能。如果您對 Traefik 有興趣,可以直接參考底下兩篇文章

[Read More]

開源專案 Gitea 支援 OAuth Provider

Gitea

很高興看到 Gitea 正式支援 OAuth Provider 了,此功能經歷了四個月終於正式合併進 master 分支,預計會在 1.8 版本釋出,由於此功能已經進 master,這樣我們就可以把原本 Drone 透過帳號密碼登入,改成使用 OAtuh 方式了,增加安全性。但是在使用之前,Drone 需要合併 drone/go-login@3drone/drone@2622。如果您會使用 Go 語言,不妨現在就可以來試試看了,透過 go build 來編譯原始碼。

[Read More]

在 docker-in-docker 環境中使用 cache-from 提升編譯速度

提升 docker build 時間

在現代 CI/CD 的環境流程中,使用 Docker In Docker 來編譯容器已經相當流行了,像是 GitLab CIDrone 都是全走 Docker 環境,然而有很多人建議盡量不要在 CI 環境使用 Docker In Docker,原因在於 CI 環境無法使用 Host Image 資料,導致每次要上傳 Image 到 Docker Hub 時都需要重新下載所有的 Docker Layer,造成每次跑一次流程都會重複花費不少時間,而這個問題在 v1.13 時被解決,現在只要在編譯過程指定一個或者是多個 Image 列表,先把 Layer 下載到 Docker 內,接著對照 Dockerfile 內只要有被 Cache 到就不會重新再執行,講得有點模糊,底下直接拿實際例子來看看。

[Read More]

快速部署網站到 Heroku 雲平台

部署網站到 Heroku 平台

大家在寫開源專案時,一定需要一個免費的雲空間來放置網站,方便其他開發者在 GitHub 看到時,可以先點選 Demo 網站來試用,也許開發者可以使用 GitHub 提供的免費靜態網站,但是如果是跑 Golang 或是其他語言 Node.js 就不支援了,本篇來介紹 Heroku 雲平台,它提供了開發者免費的方案,您可以將 GitHub 儲存庫跟 Heroku 結合,快速的將程式碼部署上去,Heroku 會給開發者一個固定的 URL (含有 HTTPS 憑證),也可以動態的用自己買的網域。最重要的是 Heroku 提供了兩種更新方式,第一為 Git,只要開發者將程式碼 Push 到 Heroku 儲存庫,Heroku 就可以自動判斷開發者上傳的語言,並進行相對應的部署,另一種方式為 Docker 部署,只要在儲存庫內放上 Dockerfile,透過 Heroku CLI 指令就可以將 Docker 容器上傳到 Heroku Docker Registry,並且自動部署網站。底下我們來透過簡單的 Go 語言專案: Facebook Account Kit 來說明如何快速部署到 Heroku。

[Read More]

有效率的用 jsonnet 撰寫 Drone CI/CD 設定檔

Jsonnet + Drone

Drone 在 1.0 版本推出了用 jsonnet 來撰寫 YAML 設定檔,方便開發者可以維護多個專案設定。不知道大家有無遇過在啟動新的專案後,需要從舊的專案複製設定到新專案,或者是在 .drone.yml 內有非常多重複性的設定,假設 Go 語言的開源專案需要將執行檔包成 ARM64 及 AMD64 的映像檔,並且上傳到 Docker Hub,底下是 AMD64 的設定檔範例。剛好在 Udemy 課程內有學員詢問到相關問題

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
---
kind: pipeline
name: linux-arm64

platform:
  os: linux
  arch: arm64

steps:
- name: build-push
  pull: always
  image: golang:1.11
  commands:
  - "go build -v -ldflags \"-X main.build=${DRONE_BUILD_NUMBER}\" -a -o release/linux/arm64/drone-discord"
  environment:
    CGO_ENABLED: 0
    GO111MODULE: on
  when:
    event:
    - push
    - pull_request

- name: build-tag
  pull: always
  image: golang:1.11
  commands:
  - "go build -v -ldflags \"-X main.version=${DRONE_TAG##v} -X main.build=${DRONE_BUILD_NUMBER}\" -a -o release/linux/arm64/drone-discord"
  environment:
    CGO_ENABLED: 0
    GO111MODULE: on
  when:
    event:
    - tag

- name: executable
  pull: always
  image: golang:1.11
  commands:
  - ./release/linux/arm64/drone-discord --help

- name: dryrun
  pull: always
  image: plugins/docker:linux-arm64
  settings:
    dockerfile: docker/Dockerfile.linux.arm64
    dry_run: true
    password:
      from_secret: docker_password
    repo: appleboy/drone-discord
    tags: linux-arm64
    username:
      from_secret: docker_username
  when:
    event:
    - pull_request

- name: publish
  pull: always
  image: plugins/docker:linux-arm64
  settings:
    auto_tag: true
    auto_tag_suffix: linux-arm64
    dockerfile: docker/Dockerfile.linux.arm64
    password:
      from_secret: docker_password
    repo: appleboy/drone-discord
    username:
      from_secret: docker_username
  when:
    event:
    - push
    - tag

trigger:
  branch:
  - master
[Read More]

Traefik 搭配 Docker 自動更新 Let’s Encrypt 憑證

2019.10.23 本篇教學以 Traefik 1.7 版本為主

之前寫過蠻多篇 Let’s Encrypt 的使用教學,但是這次要跟大家介紹一套非常好用的工具 Traefik 搭配自動化更新 Let’s Encrypt 憑證,為什麼會推薦 Traefik 呢,原因在於 Traefik 可以自動偵測 Docker 容器內的 Label 設定,並且套用設定在 Traefik 服務內,也就是只要修改服務的 docker-compose 內容,重新啟動,Traefik 就可以抓到新的設定。這點在其它工具像是 NginxCaddy 是無法做到的。底下我們來一步一步教大家如何設定啟用前後端服務。全部程式碼都放在 GitHub 上面了。

[Read More]