用 Github Actions 在 K8S 中运行 CI 测试

时间:2022-07-28
本文章向大家介绍用 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 集群不是很好的一个方案:

  1. 在服务器上安装 Kubernetes 并不是一个简单的操作
  2. 相关的一些组件需要互相通信(kubectl、apiserver、etcd、kubelet 等),所以可能需要相当长的时间才能让集群运行起来
  3. 一般情况下 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进阶训练营,点击下方图片了解详情