github-actions-runner-operator
用于调度GitHub Actions运行器pod的K8s操作器。 自托管运行器 是一种托管自己的运行器并自定义用于在GitHub Actions工作流中运行作业的环境的方式。
该操作器以声明方式帮助您按需扩展和调度运行器。
配置
身份验证模式
操作器与GitHub通信以确定可用的作业并在运行器上执行工作流。可以使用以下模式进行GitHub身份验证:
- 作为GitHub应用程序。
这是首选模式,因为它提供了增强的安全性和增加的API配额,并避免将令牌暴露给运行器pod。
按照创建GitHub应用程序的指南进行操作。无需定义回调URL或webhook密钥,因为此集成不使用它们。
根据GitHub应用程序是在存储库级别还是组织级别运行,必须设置以下权限:
- 存储库级别
- Actions - 读/写
- Administration - 读/写
- 组织级别
- Self Hosted Runners - 读/写
创建GitHub应用程序后,获取集成ID并下载私钥。 GitHub应用程序只能通过将环境变量注入到Operator部署中来使用。建议将凭证存储为Kubernetes secrets,然后注入到operator部署中。
通过在包含operator的命名空间中执行以下命令来创建一个名为github-runner-app
的secret:
kubectl create secret generic github-runner-app --from-literal=GITHUB_APP_INTEGRATION_ID=<app_id> --from-file=GITHUB_APP_PRIVATE_KEY=<private_key>
最后在operator部署中定义以下内容:
envFrom:
- secretRef:
name: github-runner-app
- 使用个人访问令牌(PAT)
创建一个具有仓库或组织级别权限的个人访问令牌。
这个PAT可以在operator级别或自定义资源中定义(在CR级别定义的PAT将优先)
要使用在CR级别声明的PAT,首先创建一个名为actions-runner
的secret:
kubectl create secret generic actions-runner --from-literal=GH_TOKEN=<token>
在GithubActionRunner
自定义资源上定义tokenRef
字段,如下所示:
apiVersion: garo.tietoevry.com/v1alpha1
kind: GithubActionRunner
metadata:
name: runner-pool
spec:
tokenRef:
key: GH_TOKEN
name: actions-runner
Runner作用域
Runner可以注册到单个仓库或组织级别。GithubActionRunner
自定义资源上有以下字段可用于指定要监控actions的仓库和/或组织:
organization
- GitHub用户或组织repository
- (可选)GitHub仓库
apiVersion: garo.tietoevry.com/v1alpha1
kind: GithubActionRunner
metadata:
name: runner-pool
spec:
# GitHub组织,必填
organization: yourOrg
# GitHub仓库
repository: myrepo
Runner选择
GithubActionRunner
自定义资源中最重要的字段可以说是podTemplateSpec
字段,因为它允许你定义将由operator管理的runner。你可以灵活地定义runner所需的所有属性,包括镜像、资源和环境变量。在正常操作中,operator将创建一个令牌,你的runner可以使用该令牌与GitHub通信。这个令牌创建在名为<CR_NAME>-regtoken
的secret中,位于RUNNER_TOKEN
键下。你应该使用环境变量或卷挂载将此secret注入到你的runner中。
安装方法
可以使用以下选项安装operator:
Helm Chart
使用以下步骤创建一个命名空间并使用Helm chart将operator安装到该命名空间中:
helm repo add evryfs-oss https://evryfs.github.io/helm-charts/
kubectl create namespace github-actions-runner-operator
helm install github-actions-runner-operator evryfs-oss/github-actions-runner-operator --namespace github-actions-runner-operator
手动安装
执行以下命令使用此仓库中可用的清单部署operator。
注意:需要Kustomize工具
- 安装CRD
make install
- 部署操作符
make deploy
OperatorHub
即将推出
示例
GithubActionRunner
自定义资源的示例可以在这里找到
开发
操作符基于Operator SDK/ Kube builder,并使用Go语言编写。