一天學會 DevOps 自動化測試及部署
4.8 (68 ratings)
Course Ratings are calculated from individual students’ ratings and a variety of other signals, like age of rating and reliability, to ensure that they reflect course quality fairly and accurately.
276 students enrolled

一天學會 DevOps 自動化測試及部署

用 Go 語言所打造的 Drone 輕量級容器持續交付平台 (使用 Docker)
4.8 (68 ratings)
Course Ratings are calculated from individual students’ ratings and a variety of other signals, like age of rating and reliability, to ensure that they reflect course quality fairly and accurately.
276 students enrolled
Created by Bo-Yi Wu
Last updated 2/2020
Traditional Chinese
Price: $129.99
30-Day Money-Back Guarantee
This course includes
  • 10.5 hours on-demand video
  • Full lifetime access
  • Access on mobile and TV
  • Certificate of Completion
Training 5 or more people?

Get your team access to 4,000+ top Udemy courses anytime, anywhere.

Try Udemy for Business
What you'll learn
  • 製作 Docker 映像檔並且自動上傳到 Docker Hub
  • 導入團隊取代傳統 Jenkins 或 GitLab CI
  • 用各式語言撰寫 Plugin 整合進 Drone 服務
  • 完整自動化測試
  • 部署到雲端機器 (AWS EC2, Linode, DigitalOcean)
  • 無痛導入 CI/CD
  • 在 AWS 或 GCP平台用 Kubernetes 架設 Drone
  • 搭配 Kubernetes 自動化部署
Course content
Expand all 73 lectures 10:17:13
+ Drone 基礎認識
9 lectures 48:42
Drone 系統架構
03:34

終於看到 Drone 作者 bradrydzewski 在 11/7 號釋出 1.0.0-RC1 版本,此版本尚未開源在 GitHub 上面,所以目前只能透過 docker 方式來安裝。另外如果您正在用 0.8.x 版本的,不建議現在轉換到 1.0 版本,原因有幾點,第一作者尚未公開原始碼,第二現在公開也才一週而已,還有很多 bug 以及用法都沒有在線上 document 寫很清楚,第三就是作者尚未提供工具從 0.8.x 升級到 1.0.0 RC 版本。根據上述的原因,建議大家先不要轉換,當然如果團隊尚未導入 CI/CD 的話,我強烈建議使用 1.0.0 RC-1 版本。

Preview 07:04

Drone 在 2018/11/21 正式推出 Cloud 免費版本,讓 GitHub 上面的開源專案都可以免費使用 Drone,另外也支援 ARM 系統,未來不只有 Travis 或 circleCI 可以提供免費服務,現在 Drone 也來角逐這行列了。

Preview 06:52
+ Drone 安裝方式
17 lectures 02:35:09

本講座會帶您深入了解 Docker Compose 設定檔

Preview 07:58

Drone 搭配 GitHub 服務

Preview 07:47

Drone 搭配 GitLab 設定

Preview 04:35
Drone 搭配 GitLab (1.0 版本)
08:57
Drone 搭配 GitHub (1.0 版本)
08:10

Drone 搭配 BitBucket 服務設定

Preview 04:09

Gitea 是一套開源的 Git Hosting,除了 Gitea 之外,您可以選擇 GitHub 或自行安裝 GitLab,但是我為什麼選擇 Gitea 呢?原因有底下幾點

  1. Gitea 是開源專案,全世界的開發者都可以進行貢獻

  2. Gitea 是 Go 語言所開發,啟動速度超快

  3. Gitea 開源社區非常完整,每年固定挑選三位為主要負責人

  4. Gitea 可以使用執行檔或 Docker 方式進行安裝

本影片會透過 Docker 方式教大家如何快速將 Gitea 安裝在 Ubuntu 環境。安裝時間真不用五分鐘,對於熟悉 Docker 的開發者,可能不用幾分鐘就安裝完成。

快速安裝 Gitea 服務 (自架 Git Hosting 最佳選擇)
13:12

Drone 搭配 Gitea 服務設定

Preview 04:23

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

Preview 08:45
將 Drone 安裝在 Kubernetes 上 (Amazon Web Service)
14:30

在 AWS 用 Shell Script 方式安裝 Drone,省去輸入 Kubernets 眾多指令,並且自動產生 Server 及 Agent 通訊的密碼。

在 AWS 上用 Shell Script 快速安裝 Drone 在 Kubernetes 上
08:30
將 Drone 安裝在 Google Kubernetes Container 內 (Google Cloud Platform)
15:34

Drone 可以搭配多個 agent 服務,但是假設有特定的專案吃掉很多 CPU 或 RAM 資源,團隊內需要買一台獨立機器來跑特定的專案,這時可以透過 drone-filter 功能來指定特定的專案跑在特定的 Angent 服務上。

Preview 08:03

Drone 在 1.0.0 RC-1 版本增加了單機版安裝,現在您可以啟動一個服務裡面包含了 Drone Server 及 Drone Agent,對於小團隊來說是一大福音,快速安裝在單一台機器上面。

Preview 10:23

Drone 是一套開源專案的 CI/CD 服務,非常輕巧且容易安裝,本影片教大家如何用 Traefik 來架設 Drone 服務,並且透過 Let's Encrypt 服務讓網站自動更新憑證,底下是課程大綱:


00:37 架設 Traefik 服務 Listen 80 及 443 port

02:42 用 Docker 架設 Drone 並且透過 Label 跟 Traefik 串接

04:11 在 GitHub 申請 App Client ID 及 Secret


了解 Traefik + Docker 可以參考 https://www.youtube.com/watch?v=0GkJb6-CDUU

Traefik + Let's Encrypt 可以參考 https://www.youtube.com/watch?v=ddJxBXShkZg

用 Traefik 搭配 Drone 服務 (1.0 版本)
08:51

本篇要教大家如何使用 Ansible 來安裝 Drone CI/CD 開源專案。目前 Drone 可以支援兩種安裝方式: 1. 使用 Docker 2. 使用 binary,如果您是進階開發者,可以使用 binary 方式來安裝,像是在 Debug 就可以透過 build binary 方式來測試。一般來說都是使用 Docker 方式來安裝,在使用 ansible 之前,請先準備一台 Ubuntu 或 Debian 作業系統的 VM 來測試。

用 Ansible 安裝 Drone 服務 (Server 及 Agent) (1.x 版本)
15:17
使用 Drone Routing 將特定 Job 丟到指定的 Machine 執行
06:05
+ Drone 基本用法
10 lectures 01:13:07

介紹如何使用 Drone 後台 UI 介面,操作十分單純。

Preview 07:56
使用 Git Clone
04:20
WorkSpace 介紹
03:45
Pipeline 介紹 (平行執行) (0.8 使用方式)
07:04
啟動額外服務 (像是 Redis, MySQL.. 等)
05:33
隱藏敏感資訊 (像是 AWS Secret 或 API Token)
10:12
條件子句 (特定 Branch 或觸發 Tag)
14:52

本影片教大家兩種方式來使用公司內部 Private Docker Registry Image 檔案

如何使用私有 Docker Image (1.x)
07:35
如何將 Job 丟到 Multiple Machine 執行 (1.x)
05:54
+ Drone 外掛介紹
12 lectures 01:48:14
打包檔案上傳 (SCP Plugin)
13:52
執行伺服器指令 (SSH Plugin)
07:31
上傳映像檔到 Public Registry (像是 Docker Hub)
06:11
上傳映像檔到 Private Registry (像是 Harbor)
06:54
搭配 Kubernetes 自動化部署 (更新 k8s pod 版本)
11:37
消息通知 (Discord 範例)
05:07
用 drone-apex-up 自動更新 AWS Lambda
10:35

Flutter 是一個由 Google 開發的開源行動應用軟體開發套件,用於為 Android 和 iOS 開發應用。現在只要維護一套程式碼就可以同時發布 Android 及 iOS App 軟體,然而 Flutter 是透過 Dart 語言實現,所以只要用 Dart 寫完程式,透過 Flutter test 指令完成測試。本影片透過 Docker 搭配 Drone 來完成自動化測試。


Preview 04:54

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

提升 Docker build 速度,加速部署 Image
10:22
將設定檔從 0.8 版升級到 1.0 版本
04:33

很高興收到 GitHub 的 Beta 邀請函來開始試用 GitHub Package Registry 相關功能,從說明文件可以知道目前 Registry 支援了好幾種 Package 像是 npm, gem, docker, mvn 及 nuget,這篇主要跟大家介紹如何用 Drone 快速串接 CI/CD 流程的『自動上傳 Docker Image 到 GitHub Registry』,底下來看看如何使用 GitHub 提供的 Docker Registry。

上傳 Docker Image 到 GitHub Docker Registry
10:06

GitHub 提供一個非常方便的功能,就是可以將靜態檔案部署在 GitHub 上,基本上開發者不用負擔任何 Host 費用,就可以使用靜態檔案來做 Demo 介紹,或者是文件系統。而本篇將教您如何用 Drone 來自動化部署靜態檔案到 GitHub 上。作者直接用 Vue.js 來介紹整個流程。

自動化上傳靜態檔案到 GitHub Pages
16:32
+ Drone 外掛撰寫
3 lectures 09:47

介紹如何擴充 Drone Yaml 檔案參數設定,並且用 Shell Script 撰寫 Plugin。

撰寫 Bash Shell Script
03:27
打包 Docker Image 並上傳到 Docker Hub
04:00
測試 Drone 外掛
02:20
+ Drone 指令介紹
7 lectures 59:03

介紹如何在 MacOS 或 Linux 安裝 Drone CLI 工具

Drone 指令安裝方式
05:18

除了透過 Drone 後台新增 Secret 方式,還可以透過 drone cli 來設定 Secret 增加其安全性

Drone Secret 指令介紹
12:38

如果團隊尚未導入 Drone,但是開發團隊又想要使用 Yaml 優勢,現在可以直接透過 drone cli 方式直接在自己的電腦上面做測試,本單元教大家如何用 drone cli 在專案內直接測試,不需要架設 drone server 就可以享用 drone 的優勢。

Preview 08:27

Drone 在 1.0 版本推出了用 jsonnet 來撰寫 YAML 設定檔,方便開發者可以維護多個專案設定,現在只要寫一份 jsonnet 就可以產生好幾個專案的設定檔,不用每次新的專案都要重新複製一份,對於 CI/CD 維護者相當方便。

Drone jsonnet 指令介紹 (用 jsonnet 撰寫 Drone CI/CD 設定檔)
11:04

Drone 在 1.0 提供了 promotion 機制,讓開發者可以將一些 CI/CD FLow 設定只有透過 Drone CLI 才能執行,團隊內肯定有些地方,需要人工確認後,才可以自動化流程,這時候 drone 1.0 提供的此項機制,就可以解決此問題了。

Drone 手動觸發 Job 工作
06:14
使用 Drone promote 及 rollback 指令來恢復或觸發特定 Job (也可以指定 Drone Host)
07:35

自動化取消舊有的 Build Job,這功能在大量 git commit 後,每一次的 commit 都會產生一個 job,如果開發者持續 commit,就會看到同一個 branch 有很多 job 正在同時 build,但是其實我們只需要保留最新的,把舊的 Job 取消。


這功能其實在 Travis 已經有了,預設也是打開。開發者可以發現只要 job 目前處於 pending 狀態的話,有新的 commit 進來之後,Travis 就會自動取消正在 Pending 的 Job,如果有正在跑的 Job 則不受影響。Drone 在最新版本也已經實現了此功能,透過 Drone CIL 可以將功能打開。影片內會教大家如何開啟此功能。


PS: 請注意,此功能在 Drone CI/CD 1.6 版本以上才有

如何自動取消 Pending Job 只保留最新一筆 Job
07:47
+ 實戰 Node.JS 專案
5 lectures 38:15
Node.js 專案測試 (mocha + eslint)
09:48
Node.js 專案快取檔案 (加速測試)
07:46
Node.js 專案打包 (drone-scp 外掛)
07:18
Node.js 專案部署 (drone-ssh 外掛)
06:27
Node.js 專案使用 Dockerfile 部署
06:56
+ Laravel 實戰及部署
1 lecture 15:10

相信大家對 Laravel 都很熟悉,但是初學者或是新進同事要快速入門 Laravel 最大的門檻就是該如何在短時間內在本機電腦快速安裝好公司專案。這時候使用 Laradock 就是一個最佳時機,透過 Docker 容器話,快速切換 PHP 版本,或者是安裝額外的服務像是 MySQL, MariaDB, phpMyAdmin 或 nginx 等服務,讓本機端不受到自訂安裝套件的困擾,用完隨時關閉,完全不會影響到電腦環境。底下我會介紹使用 Laradock 該注意的事情。


用 15 分鐘打造 Laravel 開發環境
15:10
+ 實戰 Go 語言專案
7 lectures 01:28:51
Go 專案編譯多種 OS 執行檔 (ARM64, AMD64 或 i386)
09:05
Go 專案編譯 Docker 映像檔並且上傳到 Docker Hub
08:44

在之前寫過一篇『Drone 搭配 Kubernetes 升級應用程式版本』,裡面內容最主要介紹 honestbee 撰寫的 drone 外掛: drone-kubernetes,但是此外掛並非用 Go 語言所撰寫,而是用 Shell Script 透過 kubectl set image 方式來更新專案項目,但是這邊會有幾個缺點,第一點就是假設在 Develop 環境永遠都是吃 master 分支,也就是讀取 Image 的 latest 標籤,這時候此外掛就無法作用,第二點此外掛無法讀取 kubernetes YAML 檔案,假設專案要修正一個 ENV 值,此外掛也無法及時更新。綜合這兩點因素,只好捨棄此外掛,而本篇會帶給大家另一個用 Go 語言所撰寫的外掛,是由 @Sh4d1 所開發的項目,用法相當容易,底下會一步一步教大家如何部署 Go 語言項目。

Go 專案搭配 Kubernetes 部署
20:45

相信大家在架設服務肯定會選一套像是 HAProxy, Nginx, Apache 或 Caddy,這四套架設的難度差不多,如果要搭配 Let’s Encrypt 前面兩套需要自己串接 (Nginx, Apache),而 Caddy 是用 Golang 開發裡面已經內建了 Let’s Encrypt,,管理者不用擔心憑證過期,相當方便。但是本篇我要介紹另外一套工具叫 Traefik,這一套也是用 Go 語言開發,而我推薦這套的原因是,此套可以跟 Docker 很深度的結合,只要服務跑在 Docker 上面,Traefik 都可以自動偵測到,並且套用設定。透過底下的範例讓 Traefik 串接後端兩個服務,分別是 domain1.com 及 domain2.com。來看看如何快速設定 Traefik。

Go 專案使用 Docker 搭配 Traefik 自動化部署
20:19

Go 語言在 1.11 推出 go module 來統一市面上不同管理 Go 套件的工具,像是 dep 或 govendor 等,還不知道如何使用 go module,可以參考之前寫的一篇文章『Go Module 導入到專案內且搭配 Travis CI 或 Drone 工具』,在團隊內如果每個人在開發專案時,都透過網路去下載專案使用到的套件,這樣 10 個人就會浪費 10 個人的下載時間,並且佔用公司網路頻寬,所以我建議在公司內部架設一台 Go Proxy 服務,減少團隊在初始化專案所需要的時間,也可以減少在跑 CI/CD 流程時,所需要花費的時間,測試過公司 CI/CD 流程,有架設 Go Proxy,一般來說可以省下 1 ~ 2 分鐘時間,根據專案使用到的相依性套件用量來決定花費時間。本篇來介紹如何架設 ATHENS 這套開源 Go Proxy 專案。

架設 Go Module Proxy Server 加速團隊開發
08:13

本篇透過 docker-compose 方式來驗證 Go 語言的 graceful shutdown 是否可以正常運作。除了驗證之外,單機版 Docker 本身就可以設定 scale 容器數量,那這時候又該如何搭配 graceful shutdown 來實現 rolling update 呢?相信大家對於 rolling update 並不陌生,現在的 kubernetes 已經有實現這個功能,用簡單的指令就可以達到此需求,但是對於沒有在用 k8s 架構的開發者,可能網站也不大,那該如何透過單機本的 docker 來實現呢?

Go 專案 graceful shutdown 搭配docker-compose 實現 rolling update
14:22
+ 實戰 Packer 自動化編譯 Image
2 lectures 20:55

本篇來介紹 Hashicorp 旗下其中一個產品叫 Packer,其實在 Hashicorp 旗下有很多其他雲端工具都非常好用,如果大家有興趣都可以上官網參考看看。而 Packer 是用來產生各大雲平台映像檔的工具,平行產生 AWS, GCP, Docker 或 DigitalOcean… 等等眾多雲平台之映像檔對 Packer 來說相當容易,詳細可以參考這邊,也就是說透過 Packer 來統一管理各大雲平台的映像檔,用 JSON 檔案進行版本控制。假設您有需求要管理工程團隊所使用的 Image,你絕對不能錯過 Packer。Packer 不是用來取代像是 Ansible 或是 Chef 等軟體,而是讓開發者更方便整合 Ansible .. 等第三方工具,快速安裝好系統環境。


Preview 13:34

本章節會教大家如何跟 Drone 整合,這邊可以直接使用 drone-packer 套件,使用文件也已經放到 drone plugin 首頁了。使用方式非常簡單

Packer 搭配 Drone CI/CD 自動化編譯
07:21
Requirements
  • 具備 Shell Script 或其他語言基礎知識
  • 已安裝 Docker + Docker Compose 環境
Description

重要提醒:因此平台 Udemy 為境外公司,在 Udemy 的刷卡屬於境外刷卡,您的信用卡公司會另外向您收取大約 1.5% 的國外交易手續費。手續費根據各家信用卡公司規定有所不同,詳細數字需與您的發卡銀行確認。


課程介紹:

團隊內原本使用 Bamboo 之後跳到 Jenkins 最後又跳到 Drone,本課程會介紹為什麼我們放棄 Bamboo 及 Jenkins,它們所帶來的缺陷,以及為什麼最後選擇 Drone。

Drone 是一套基於 Docker 容器技術的持續交付平台。每個 Build 都在一個短暫的 Docker 容器中執行,讓開發人員可以完全控制他們的建置環境並保證隔離互不干擾。Drone 非常容易安裝及維護,並且提供強大的插件 (plugin) 系統,也可以讓開發者輕易完成個人插件,如果您正在煩惱該選擇 Jenkins 或 GitLab CI 等工具,我會建議您嚐試看看輕量級的 Drone。本議程會帶您深入了解由 Go 語言所撰寫的 Drone 架構及如何輕易整合原有的 Git 服務 (像是 Github, Bitbucket, Gitea 或 GitLab) 來快速部署及測試軟體品質。

課程緣由:

當初想開這課程的原因是,希望可以造福全台灣的朋友,之前跟 iThome 合作開了一堂實體課程,但是很多人卡在假日無法出門,再來是實體課程成本比較高,有時候上課沒聽懂,回家也沒有老師可以討論,造成學習效果不是很好,所以我就來錄製線上課程,讓不能北上的朋友們也可以學習到基本的 DevOps 技巧。希望能透過線上課程可以跟學員有些互動,把 DevOps 推廣到各大公司及新創。如果正要創業,或是在 DevOps 上有些困擾,不知道該如何導入及選擇工具,都可以來跟我聊聊。

底下是在我的 Blog 公開介紹 Drone 相關文章:

  1. 2017 COSCUP 研討會: Gitea + Drone 介紹

  2. Drone 發佈 0.8.0-rc.1 版本

  3. Drone 自動觸發 GitLab CI 或 Jenkins 任務

  4. 台灣第一屆 Laravel 研討會

  5. 台灣第一屆 GoPher 大會

  6. 用 Go 語言打造 DevOps Bot

  7. Cronjob 搭配 Drone 服務

  8. Caddy 搭配 Drone 伺服器設定

  9. 用 drone-line 架設 Line webhook 及發送訊息

  10. Drone CI Server 搭配 Atlassian Bitbucket Server (前身 Stash)

目前我也擔任 Drone 開源專案的維護者,詳細可以參考我的 GitHub 組織

  • Drone 核心成員

  • Drone Plugin 核心成員

Who this course is for:
  • 系統管理者
  • 前端開發者
  • 後端開發者
  • 全端開發者