Proyecto donde se alojará la plantilla para crear un runner para Github Actions
Este repositorio esta basado en GH-Runners by bharathkkb. En este ejemplo se muestra como desplegar GitHub Actions Self Hosted Runners en GKE con Application Default Credentials usando Workload Identity.
$ export PROJECT_ID=xxxxx
$ export CLUSTER_NAME=runner-cluster
$ export GITHUB_TOKEN=xxxxx
$ export REPO_OWNER=coordinadora-mercantil
$ export ACTION_URL=https://github.com/coordinadora-mercantil
$ export ACTION_TOKEN=xxxxx
Nota: Para la variable de ACTION_URL si eres organización la encontrarías en la pestañana Configuración > Actions > Agregar nuevo.
Si quieres mejor ejecutar un runner solo para un repositorio sería en Repositorio > Configuración > Actions > Agregar nuevo
$ gcloud config set project $PROJECT_ID
$ gcloud services enable container.googleapis.com \
containerregistry.googleapis.com \
cloudbuild.googleapis.com
$ gcloud builds submit --tag gcr.io/${PROJECT_ID}/runner:XXX .
Reemplazar XXX por la versión que desear utilizar
Ejemplo: 1.0.0
$ gcloud container clusters create ${CLUSTER_NAME} \
--release-channel regular \
--workload-pool=${PROJECT_ID}.svc.id.goog
$ gcloud container clusters get-credentials ${CLUSTER_NAME}
Nota: Para crear el cluster es necesario que tengas una region seleccionada o por lo contrario poner el flag —region en los pasos de creación y obtención del kubeconfig
$ gcloud iam service-accounts create runner-sa --display-name "runner-sa"
$ SA_EMAIL=$(gcloud iam service-accounts list --filter="displayName:runner-sa" --format='value(email)')
Opcionalmente darle permisos de rol a la cuenta de servicios.
$ gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member serviceAccount:$SA_EMAIL \
--role roles/editor
$ kubectl create serviceaccount gke-runner-sa
$ gcloud iam service-accounts add-iam-policy-binding \
--role roles/iam.workloadIdentityUser \
--member "serviceAccount:${PROJECT_ID}.svc.id.goog[default/gke-runner-sa]" \
runner-sa@${PROJECT_ID}.iam.gserviceaccount.com
$ kubectl annotate serviceaccount \
gke-runner-sa \
iam.gke.io/gcp-service-account=runner-sa@${PROJECT_ID}.iam.gserviceaccount.com
$ kubectl create secret generic runner-k8s-secret --from-literal=GITHUB_TOKEN=$GITHUB_TOKEN
$ kustomize edit set image gcr.io/PROJECT_ID/runner:latest=gcr.io/$PROJECT_ID/runner:XXX
Reemplazar XXX por la versión que pusite en el paso 3
$ cat > runner.env << EOF
ACTION_URL=${ACTION_URL}
ACTION_TOKEN=${ACTION_TOKEN}
EOF
$ kustomize build . | kubectl apply -f -