用 Github Actions 在 K8S 中运行 CI 测试
前面我们介绍了如何使用 KinD 集群来加速 CI/CD 流水线,本文我们将来介绍如何通过 Github Actions 与 K3S 运行你的 CI 集成测试。
Github Actions 如何工作
如果你之前使用过 Travis CI 之类的工具,应该对 Actions 很熟悉了:它们为你提供了一个可以测试你应用程序的环境 - 一般是以服务器的形式,你的代码在一个目录中被 checkout 出来,当代码推送到你的 Github 仓库上,一个环境会被启动,然后检出代码,在环境上执行指定的一些任务,如果有任何一个任务失败了,则你的 CI 任务就会失败。当然这不仅仅可以用于自动化测试,我们也可以用于编译应用程序,然后将相关制品上传到 S3 等服务上,或者向你的 QA 团队发送一封电子邮件,让他们知道哪些测试通过或失败了。
我们可以把 Actions 想象成 Github 启动的一个服务器,然后在里面检出你的代码,并在上面执行你想要执行的任务。
如果你的开发环境运行在 Kubernetes 集群上,或者你正计划在 Kubernetes 中运行你的 CI 环境,那么每当你把代码推送到 Github 上,我们就有一台机器可以操作,是不是很开心~~~,我们可以简单地在里面设置一个 Kubernetes 集群,然后将应用程序跑在上面。你可能觉得在 CI 环境中安装 Kubernetes 集群不是很好的一个方案:
在服务器上安装 Kubernetes 并不是一个简单的操作 相关的一些组件需要互相通信(kubectl、apiserver、etcd、kubelet 等),所以可能需要相当长的时间才能让集群运行起来 一般情况下 CI 环境最好在几秒钟内就能启动,所以在 CI 环境中启动一个 Kubernetes 集群似乎不是很合理
比较幸运的是,我们有一些方案是可以来解决上面的这些问题的,前面我们是使用的 KinD,今天我们介绍另外一个轻量级方案:k3s,这是一个面向物联网和边缘计算的轻量级 Kubernetes 发行版,集群在几秒钟内就能启动和运行,只需要简单的几秒命令即可:
$ curl -sfL https://get.k3s.io | sh -
# wait ~30s
$ k3s kubectl get node
有了 k3s,将 Kubernetes 引入到我们的 Actions 中就非常简单了。
K8S Github Action
首先,在我们的仓库中的 .github/workflows
文件夹下创建 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
其中的关键就是上面执行的命令:
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 环境中去安装运行 Kubernetes,这个时间是完全可以接受的。
原文链接:https://odino.org/running-ci-tests-in-kubernetes-through-github-actions/
K8S进阶训练营,点击下方图片了解详情