用 Github Actions 在 K8S 中運行 CI 測試

前面我們介紹了如何使用 KinD 集群來加速 CI/CD 流水線,本文我們將來介紹如何通過 Github Actions 與 K3S 運行你的 CI 集成測試。
Github Actions 如何工作
如果你之前使用過 Travis CI 之類的工具,應該對 Actions 很熟悉了:它們?yōu)槟闾峁┝艘粋€可以測試你應用程序的環(huán)境 - 一般是以服務器的形式,你的代碼在一個目錄中被 checkout 出來,當代碼推送到你的 Github 倉庫上,一個環(huán)境會被啟動,然后檢出代碼,在環(huán)境上執(zhí)行指定的一些任務,如果有任何一個任務失敗了,則你的 CI 任務就會失敗。當然這不僅僅可以用于自動化測試,我們也可以用于編譯應用程序,然后將相關制品上傳到 S3 等服務上,或者向你的 QA 團隊發(fā)送一封電子郵件,讓他們知道哪些測試通過或失敗了。
我們可以把 Actions 想象成 Github 啟動的一個服務器,然后在里面檢出你的代碼,并在上面執(zhí)行你想要執(zhí)行的任務。
如果你的開發(fā)環(huán)境運行在 Kubernetes 集群上,或者你正計劃在 Kubernetes 中運行你的 CI 環(huán)境,那么每當你把代碼推送到 Github 上,我們就有一臺機器可以操作,是不是很開心~~~,我們可以簡單地在里面設置一個 Kubernetes 集群,然后將應用程序跑在上面。你可能覺得在 CI 環(huán)境中安裝 Kubernetes 集群不是很好的一個方案:
在服務器上安裝 Kubernetes 并不是一個簡單的操作 相關的一些組件需要互相通信(kubectl、apiserver、etcd、kubelet 等),所以可能需要相當長的時間才能讓集群運行起來 一般情況下 CI 環(huán)境最好在幾秒鐘內就能啟動,所以在 CI 環(huán)境中啟動一個 Kubernetes 集群似乎不是很合理
比較幸運的是,我們有一些方案是可以來解決上面的這些問題的,前面我們是使用的 KinD,今天我們介紹另外一個輕量級方案:k3s,這是一個面向物聯(lián)網和邊緣計算的輕量級 Kubernetes 發(fā)行版,集群在幾秒鐘內就能啟動和運行,只需要簡單的幾秒命令即可:
$?curl?-sfL?https://get.k3s.io?|?sh?-
#?wait?~30s
$?k3s?kubectl?get?node
有了 k3s,將 Kubernetes 引入到我們的 Actions 中就非常簡單了。
K8S Github Action
首先,在我們的倉庫中的 .github/workflows 文件夾下創(chuàng)建 action 文件,比如 test.yaml,然后在工作流中添加如下所示的步驟:
name:?K8S?Github?Action
on:?[push]
jobs:
??build:
????runs-on:?ubuntu-latest
????timeout-minutes:?5
????steps:
????-?uses:?actions/checkout@v2
????-?name:?install?k8s
??????run:?|
????????curl?-sfL?https://get.k3s.io?|?K3S_KUBECONFIG_MODE=777?sh?-
????????cat?/etc/rancher/k3s/k3s.yaml
????????mkdir?-p?~/.kube
????????cp?/etc/rancher/k3s/k3s.yaml?~/.kube/config
????-?name:?example?tests
??????run:?|
????????#?Whatever?command?you?want?to?run
其中的關鍵就是上面執(zhí)行的命令:
curl?-sfL?https://get.k3s.io?|?K3S_KUBECONFIG_MODE=777?sh?-
cat?/etc/rancher/k3s/k3s.yaml
mkdir?-p?~/.kube
cp?/etc/rancher/k3s/k3s.yaml?~/.kube/config
首先下載 k3s,安裝后將其配置復制到常用的 kubeconfig 路徑中,這樣做是為了讓 kubectl 能夠與集群進行交互,否則你必須使用 k3s 提供的別名 k3s kubectl(這樣就需要運行 k3s kubectl get po 等命令)。
可以前往示例倉庫 https://github.com/cnych/k8s-github-action 查看相關信息,在 Actions 下面我們可以查看到構建的任務,在任務中可以很清楚地看到 Kubernetes 的啟動和運行。

我們可以看到整個集群的安裝任務只花費了 13s 的時間,對于 CI 環(huán)境中去安裝運行 Kubernetes,這個時間是完全可以接受的。
原文鏈接:https://odino.org/running-ci-tests-in-kubernetes-through-github-actions/
K8S進階訓練營,點擊下方圖片了解詳情

