Skip to main content

DĂ©ploiement de groupes identiques d’exĂ©cuteurs avec Actions Runner Controller

DĂ©couvrez comment dĂ©ployer des groupes identiques d’exĂ©cuteurs avec Actions Runner Controller et utiliser des options de configuration avancĂ©es pour adapter Actions Runner Controller Ă  vos besoins.

DĂ©ploiement d’un groupe identique d’exĂ©cuteurs

Pour dĂ©ployer un groupe identique d’exĂ©cuteurs, vous devez avoir ARC prĂȘt Ă  s’exĂ©cuter. Pour plus d’informations, consultez « DĂ©marrage rapide avec Actions Runner Controller Â».

Vous pouvez dĂ©ployer des groupes identiques d’exĂ©cuteurs avec les charts Helm d’ARC ou en dĂ©ployant les manifestes nĂ©cessaires. L’utilisation des charts Helm d’ARC est la mĂ©thode recommandĂ©e, en particulier si vous n’avez pas d’expĂ©rience prĂ©alable avec ARC.

Remarque

  • Comme meilleure pratique de sĂ©curitĂ©, crĂ©ez les pods de votre exĂ©cuteur dans un espace de noms diffĂ©rent de l’espace de noms contenant les pods de votre opĂ©rateur.
  • Comme meilleure pratique de sĂ©curitĂ©, crĂ©ez des secrets Kubernetes et transmettez les rĂ©fĂ©rences des secrets. La transmission de vos secrets en texte brut via l’interface CLI peut prĂ©senter un risque de sĂ©curitĂ©.
  • Nous vous recommandons d’exĂ©cuter les charges de travail de production de maniĂšre isolĂ©e. Les workflows GitHub Actions sont conçus pour exĂ©cuter du code arbitraire, et l’utilisation d’un cluster Kubernetes partagĂ© pour les charges de travail de production peut prĂ©senter un risque de sĂ©curitĂ©.
  • VĂ©rifiez que vous avez implĂ©mentĂ© un moyen de collecter et de conserver les journaux du contrĂŽleur, des Ă©couteurs et des exĂ©cuteurs Ă©phĂ©mĂšres.
  1. Pour configurer votre groupe identique d’exĂ©cuteurs, exĂ©cutez la commande suivante dans votre terminal en utilisant les valeurs de votre configuration ARC.

    Lorsque vous exĂ©cutez la commande, gardez les points suivants Ă  l’esprit.

    • Mettez Ă  jour la valeur INSTALLATION_NAME en faisant bien attention. Vous utiliserez le nom de l’installation comme valeur de runs-on dans vos workflows.

    • Mettez Ă  jour la valeur NAMESPACE avec l’emplacement oĂč vous souhaitez que les pods d’exĂ©cuteur soient créés.

    • DĂ©finissez la valeur GITHUB_CONFIG_URL avec l’URL de votre dĂ©pĂŽt, organisation ou entreprise. Il s’agit de l’entitĂ© Ă  laquelle les exĂ©cuteurs appartiendront.

    • Cet exemple de commande installe la derniĂšre version du chart Helm. Pour installer une version spĂ©cifique, vous pouvez passer l’argument --version avec la version du chart que vous voulez installer. Vous trouverez la liste des versions dans le dĂ©pĂŽt actions-runner-controller.

      Bash
      INSTALLATION_NAME="arc-runner-set"
      NAMESPACE="arc-runners"
      GITHUB_CONFIG_URL="https://github.com/<your_enterprise/org/repo>"
      GITHUB_PAT="<PAT>"
      helm install "${INSTALLATION_NAME}" \
          --namespace "${NAMESPACE}" \
          --create-namespace \
          --set githubConfigUrl="${GITHUB_CONFIG_URL}" \
          --set githubConfigSecret.github_token="${GITHUB_PAT}" \
          oci://ghcr.io/actions/actions-runner-controller-charts/gha-runner-scale-set
      

      Pour obtenir d’autres options de configuration de Helm, consultez values.yaml dans le rĂ©fĂ©rentiel ARC.

  2. Pour vérifier votre installation, exécutez la commande suivante dans votre terminal.

    Bash
    helm list -A
    

    Le résultat ressemble à ce qui suit.

    NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                                       APP VERSION
    arc             arc-systems     1               2023-04-12 11:45:59.152090536 +0000 UTC deployed        gha-runner-scale-set-controller-0.4.0       0.4.0
    arc-runner-set  arc-systems     1               2023-04-12 11:46:13.451041354 +0000 UTC deployed        gha-runner-scale-set-0.4.0                  0.4.0
    
  3. Pour vérifier le pod de gestionnaire, exécutez la commande suivante dans votre terminal.

    Bash
    kubectl get pods -n arc-systems
    

    Si l’installation a rĂ©ussi, les pods affichent l’état Running.

    NAME                                                   READY   STATUS    RESTARTS   AGE
    arc-gha-runner-scale-set-controller-594cdc976f-m7cjs   1/1     Running   0          64s
    arc-runner-set-754b578d-listener                       1/1     Running   0          12s
    

Si votre installation n’a pas rĂ©ussi, consultez « RĂ©solution des erreurs d’Actions Runner Controller Â» pour obtenir des informations de dĂ©pannage.

Utilisation des options de configuration avancées

ARC offre plusieurs options de configuration avancées.

Configuration du nom du groupe identique d’exĂ©cuteurs

Remarque

Les noms de groupes identiques d’exĂ©cuteurs sont uniques au sein du groupe d’exĂ©cuteurs auquel ils appartiennent. Si vous voulez dĂ©ployer plusieurs groupes identiques d’exĂ©cuteurs portant le mĂȘme nom, ils doivent appartenir Ă  diffĂ©rents groupes d’exĂ©cuteurs.

Pour configurer le nom du groupe identique d’exĂ©cuteurs, vous pouvez dĂ©finir un INSTALLATION_NAME ou dĂ©finir la valeur de runnerScaleSetName dans votre copie du fichier values.yaml.

## The name of the runner scale set to create, which defaults to the Helm release name
runnerScaleSetName: "my-runners"

Veillez à passer le fichier values.yaml dans votre commande helm install. Pour plus d’informations, consultez la documentation Installation de Helm.

Choix des destinations des exécuteurs

Les groupes identiques d’exĂ©cuteurs peuvent ĂȘtre dĂ©ployĂ©s au niveau du dĂ©pĂŽt, de l’organisation ou de l’entreprise.

Remarque

Vous pouvez dĂ©ployer des groupes identiques d’exĂ©cuteurs au niveau de l’entreprise seulement si vous utilisez une authentification par personal access token (classic).

Pour dĂ©ployer des groupes identiques d’exĂ©cuteurs Ă  un niveau spĂ©cifique, dĂ©finissez la valeur de githubConfigUrl dans votre copie du fichier values.yaml sur l’URL de votre dĂ©pĂŽt, organisation ou entreprise.

L’exemple suivant montre comment configurer ARC pour ajouter des exĂ©cuteurs Ă  octo-org/octo-repo.

githubConfigUrl: "https://github.com/octo-ent/octo-org/octo-repo"

Pour obtenir d’autres options de configuration de Helm, consultez values.yaml dans le rĂ©fĂ©rentiel ARC.

Utilisation d’une GitHub App pour l’authentification

Si vous n’utilisez pas d’exĂ©cuteurs au niveau de l’entreprise, vous pouvez utiliser des GitHub Apps pour vous authentifier auprĂšs de l’API GitHub. Pour plus d’informations, consultez « Authentification d'ARC auprĂšs de l'API GitHub Â».

Remarque

Étant donnĂ© le risque de sĂ©curitĂ© associĂ© Ă  l’exposition de votre clĂ© privĂ©e en texte brut dans un fichier sur disque, nous vous recommandons de crĂ©er un secret Kubernetes et de passer la rĂ©fĂ©rence Ă  la place.

Vous pouvez créer un secret Kubernetes ou spécifier des valeurs dans votre fichier values.yaml.

Une fois que vous avez créé votre GitHub App, créez un secret Kubernetes et passez la référence à ce secret dans votre copie du fichier values.yaml.

Remarque

CrĂ©ez le secret dans le mĂȘme espace de noms que celui oĂč le graphique gha-runner-scale-set est installĂ©. Dans cet exemple, l’espace de noms est arc-runners, de sorte correspondre Ă  la documentation de dĂ©marrage rapide. Pour plus d’informations, consultez « DĂ©marrage rapide avec Actions Runner Controller Â».

kubectl create secret generic pre-defined-secret \
  --namespace=arc-runners \
  --from-literal=github_app_id=123456 \
  --from-literal=github_app_installation_id=654321 \
  --from-file=github_app_private_key=private-key.pem

Dans votre copie du fichier values.yaml, passez le nom du secret en tant que référence.

githubConfigSecret: pre-defined-secret

Option 2 : SpĂ©cifier des valeurs dans votre fichier values.yaml

Vous pouvez également spécifier les valeurs de app_id, installation_id et private_key dans votre copie du fichier values.yaml.

## githubConfigSecret is the Kubernetes secret to use when authenticating with GitHub API.
## You can choose to use a GitHub App or a personal access token (classic)
githubConfigSecret:
  ## GitHub Apps Configuration
  ## IDs must be strings, use quotes
  github_app_id: "123456"
  github_app_installation_id: "654321"
  github_app_private_key: |
    -----BEGIN RSA PRIVATE KEY-----
    ...
    HkVN9...
    ...
    -----END RSA PRIVATE KEY-----

Pour obtenir d’autres options de configuration de Helm, consultez values.yaml dans le rĂ©fĂ©rentiel ARC.

Gestion de l’accĂšs avec des groupes d’exĂ©cuteurs

Vous pouvez utiliser des groupes d’exĂ©cuteurs pour contrĂŽler quelles organisations ou quels dĂ©pĂŽts ont accĂšs Ă  vos groupes identiques d’exĂ©cuteurs. Pour plus d’informations sur les groupes d’exĂ©cuteurs, consultez « Gestion de l’accĂšs aux exĂ©cuteurs auto-hĂ©bergĂ©s Ă  l’aide de groupes Â».

Pour ajouter un groupe identique d’exĂ©cuteurs Ă  un groupe d’exĂ©cuteurs, vous devez dĂ©jĂ  avoir un groupe d’exĂ©cuteurs. DĂ©finissez ensuite la propriĂ©tĂ© runnerGroup dans votre copie du fichier values.yaml. L’exemple suivant ajoute un groupe identique d’exĂ©cuteurs au groupe d’exĂ©cuteurs Octo-Group.

runnerGroup: "Octo-Group"

Pour obtenir d’autres options de configuration de Helm, consultez values.yaml dans le rĂ©fĂ©rentiel ARC.

Configuration d’un proxy sortant

Pour forcer le trafic HTTP du contrÎleur et des exécuteurs à passer par votre proxy sortant, définissez les propriétés suivantes dans votre chart Helm.

proxy:
  http:
    url: http://proxy.com:1234
    credentialSecretRef: proxy-auth # a Kubernetes secret with `username` and `password` keys
  https:
    url: http://proxy.com:1234
    credentialSecretRef: proxy-auth # a Kubernetes secret with `username` and `password` keys
  noProxy:
    - example.com
    - example.org

ARC prend en charge l’utilisation de proxys anonymes ou authentifiĂ©s. Si vous utilisez des proxys authentifiĂ©s, vous devez dĂ©finir la valeur credentialSecretRef pour rĂ©fĂ©rencer un secret Kubernetes. Vous pouvez crĂ©er un secret avec vos informations d’identification de proxy avec la commande suivante.

Remarque

CrĂ©ez le secret dans le mĂȘme espace de noms que celui oĂč le graphique gha-runner-scale-set est installĂ©. Dans cet exemple, l’espace de noms est arc-runners, de sorte correspondre Ă  la documentation de dĂ©marrage rapide. Pour plus d’informations, consultez « DĂ©marrage rapide avec Actions Runner Controller Â».

Bash
  kubectl create secret generic proxy-auth \
    --namespace=arc-runners \
    --from-literal=username=proxyUsername \
    --from-literal=password=proxyPassword \

Pour obtenir d’autres options de configuration de Helm, consultez values.yaml dans le rĂ©fĂ©rentiel ARC.

DĂ©finition du nombre maximal et minimal d’exĂ©cuteurs

Les propriĂ©tĂ©s maxRunners et minRunners vous fournissent un Ă©ventail d’options pour personnaliser votre configuration ARC.

Remarque

ARC ne prend pas en charge les configurations maximale et minimale planifiées. Vous pouvez utiliser une tùche cron ou toute autre solution de planification pour mettre à jour la configuration selon une planification.

Exemple : Nombre non dĂ©limitĂ© d’exĂ©cuteurs

Si vous commentez Ă  la fois les propriĂ©tĂ©s maxRunners et minRunners, ARC effectue un scale-up jusqu’au nombre de travaux attribuĂ©s au groupe identique d’exĂ©cuteurs et effectue un scale-down Ă  0 s’il n’y a aucun travail actif.

## maxRunners is the max number of runners the auto scaling runner set will scale up to.
# maxRunners: 0

## minRunners is the min number of idle runners. The target number of runners created will be
## calculated as a sum of minRunners and the number of jobs assigned to the scale set.
# minRunners: 0

Exemple : Nombre minimal d’exĂ©cuteurs

Vous pouvez dĂ©finir la propriĂ©tĂ© minRunners sur n’importe quel nombre et ARC s’assurera qu’il y a toujours le nombre spĂ©cifiĂ© d’exĂ©cuteurs actifs et disponibles pour s’occuper des travaux assignĂ©s au groupe identique d’exĂ©cuteurs.

## maxRunners is the max number of runners the auto scaling runner set will scale up to.
# maxRunners: 0

## minRunners is the min number of idle runners. The target number of runners created will be
## calculated as a sum of minRunners and the number of jobs assigned to the scale set.
minRunners: 20

Exemple : DĂ©finir le nombre maximal et minimal d’exĂ©cuteurs

Dans cette configuration, Actions Runner Controller effectue un scale-up jusqu’à un maximum de 30 exĂ©cuteurs et un scale-down Ă  20 exĂ©cuteurs quand les travaux sont terminĂ©s.

Remarque

La valeur de minRunners ne peut jamais dépasser celle de maxRunners, sauf si maxRunners est commenté.

## maxRunners is the max number of runners the auto scaling runner set will scale up to.
maxRunners: 30

## minRunners is the min number of idle runners. The target number of runners created will be
## calculated as a sum of minRunners and the number of jobs assigned to the scale set.
minRunners: 20

Exemple : Vidage de la file d’attente des travaux

Dans certains scĂ©narios, vous voudrez probablement vider la file d’attente des travaux pour rĂ©soudre un problĂšme ou effectuer une maintenance sur votre cluster. Si vous dĂ©finissez les deux propriĂ©tĂ©s sur 0, Actions Runner Controller ne crĂ©e pas de pod d’exĂ©cuteur lorsque de nouveaux travaux sont disponibles et attribuĂ©s.

## maxRunners is the max number of runners the auto scaling runner set will scale up to.
maxRunners: 0

## minRunners is the min number of idle runners. The target number of runners created will be
## calculated as a sum of minRunners and the number of jobs assigned to the scale set.
minRunners: 0

Certificats TLS personnalisés

Remarque

Si vous utilisez une image d'exécution personnalisée qui n'est pas basée sur la distribution Debian, les instructions suivantes ne fonctionneront pas.

Certains environnements demandent des certificats TLS signĂ©s par une autoritĂ© de certification personnalisĂ©e. Étant donnĂ© que les certificats d’autoritĂ© de certification personnalisĂ©s ne sont pas regroupĂ©s avec les conteneurs de contrĂŽleur ou d’exĂ©cuteur, vous devez les injecter dans leur magasin de confiance respectif.

githubServerTLS:
  certificateFrom:
    configMapKeyRef:
      name: config-map-name
      key: ca.crt
  runnerMountPath: /usr/local/share/ca-certificates/

Lorsque vous effectuez cette opĂ©ration, veillez Ă  utiliser le format PEM (Privacy Enhanced Mail) et vĂ©rifiez que l’extension de votre certificat est .crt. Toutes les autres seront ignorĂ©es.

Le contrÎleur exécute les actions suivantes.

  • CrĂ©e un volume github-server-tls-cert contenant le certificat spĂ©cifiĂ© dans certificateFrom.
  • Monte ce volume sur le chemin runnerMountPath/<certificate name>.
  • DĂ©finit la variable d’environnement NODE_EXTRA_CA_CERTS sur ce mĂȘme chemin.
  • DĂ©finit la variable d’environnement RUNNER_UPDATE_CA_CERTS sur 1 (Ă  partir de la version 2.303.0, cela indique Ă  l’exĂ©cuteur de recharger les certificats sur l’hĂŽte).

ARC observe les valeurs dĂ©finies dans le modĂšle de pod d’exĂ©cuteur et ne les remplace pas.

Pour obtenir d’autres options de configuration de Helm, consultez values.yaml dans le rĂ©fĂ©rentiel ARC.

Utilisation d’un registre de conteneurs privĂ©

Avertissement

Cette Actions Runner Controller option de personnalisation peut ĂȘtre en dehors de la portĂ©e de ce que Support GitHub peut aider et peut causer un comportement inattendu si elle est configurĂ©e de maniĂšre incorrecte.

Pour plus d’informations sur ce que Support GitHub peut faire, consultez Prise en charge du contrĂŽleur d’exĂ©cuteurs d’Actions.

Pour utiliser un registre de conteneurs privĂ©, vous pouvez copier l’image du contrĂŽleur et l’image de l’exĂ©cuteur dans votre registre de conteneurs privĂ©. Configurez ensuite les liens vers ces images et dĂ©finissez les valeurs imagePullPolicy et imagePullSecrets.

Configuration de l’image du contrîleur

Vous pouvez mettre à jour votre copie du fichier values.yaml et définir les propriétés image comme suit.

image:
  repository: "custom-registry.io/gha-runner-scale-set-controller"
  pullPolicy: IfNotPresent
  # Overrides the image tag whose default is the chart appVersion.
  tag: "0.4.0"

imagePullSecrets:
  - name: <registry-secret-name>

Le conteneur d’écouteur hĂ©rite de imagePullPolicy, qui a Ă©tĂ© dĂ©fini pour le contrĂŽleur.

Configuration de l’image de l’exĂ©cuteur

Vous pouvez mettre Ă  jour votre copie du fichier values.yaml et dĂ©finir les propriĂ©tĂ©s template.spec afin de configurer le pod exĂ©cuteur pour votre cas d’usage spĂ©cifique.

Remarque

Le conteneur d’exĂ©cuteur doit ĂȘtre nommĂ© runner. Sinon, il ne sera pas configurĂ© correctement pour se connecter Ă  GitHub.

Voici un exemple de configuration :

template:
  spec:
    containers:
      - name: runner
        image: "custom-registry.io/actions-runner:latest"
        imagePullPolicy: Always
        command: ["/home/runner/run.sh"]
    imagePullSecrets:
      - name: <registry-secret-name>

Pour obtenir d’autres options de configuration de Helm, consultez values.yaml dans le rĂ©fĂ©rentiel ARC.

Mise Ă  jour de la spĂ©cification du pod pour le pod d’exĂ©cuteur

Avertissement

Cette Actions Runner Controller option de personnalisation peut ĂȘtre en dehors de la portĂ©e de ce que Support GitHub peut aider et peut causer un comportement inattendu si elle est configurĂ©e de maniĂšre incorrecte.

Pour plus d’informations sur ce que Support GitHub peut faire, consultez Prise en charge du contrĂŽleur d’exĂ©cuteurs d’Actions.

Vous pouvez entiĂšrement personnaliser la PodSpec du pod d’exĂ©cuteur et le contrĂŽleur applique la configuration que vous spĂ©cifiez. Voici un exemple de spĂ©cification de pod.

template:
  spec:
    containers:
      - name: runner
        image: ghcr.io/actions/actions-runner:latest
        command: ["/home/runner/run.sh"]
        resources:
          limits:
            cpu: 500m
            memory: 512Mi
        securityContext:
          readOnlyRootFilesystem: true
          allowPrivilegeEscalation: false
          capabilities:
            add:
              - NET_ADMIN

Pour obtenir d’autres options de configuration de Helm, consultez values.yaml dans le rĂ©fĂ©rentiel ARC.

Mise Ă  jour de la spĂ©cification du pod pour le pod de l’écouteur

Avertissement

Cette Actions Runner Controller option de personnalisation peut ĂȘtre en dehors de la portĂ©e de ce que Support GitHub peut aider et peut causer un comportement inattendu si elle est configurĂ©e de maniĂšre incorrecte.

Pour plus d’informations sur ce que Support GitHub peut faire, consultez Prise en charge du contrĂŽleur d’exĂ©cuteurs d’Actions.

Vous pouvez personnaliser le PodSpec du pod d’écouteur et le contrĂŽleur appliquera la configuration que vous avez spĂ©cifiĂ©e. Voici un exemple de spĂ©cification de pod.

Remarque

Il est important de ne pas modifier la valeur de listenerTemplate.spec.containers.name du conteneur d’écouteur. Sinon, la configuration que vous spĂ©cifiez sera appliquĂ©e Ă  un nouveau conteneur sidecar.

listenerTemplate:
  spec:
    containers:
    # If you change the name of the container, the configuration will not be applied to the listener,
    # and it will be treated as a sidecar container.
    - name: listener
      securityContext:
        runAsUser: 1000
      resources:
        limits:
          cpu: "1"
          memory: 1Gi
        requests:
          cpu: "1"
          memory: 1Gi

Pour obtenir d’autres options de configuration de Helm, consultez values.yaml dans le rĂ©fĂ©rentiel ARC.

Utilisation du mode Docker-in-Docker ou Kubernetes pour les conteneurs

Avertissement

Cette Actions Runner Controller option de personnalisation peut ĂȘtre en dehors de la portĂ©e de ce que Support GitHub peut aider et peut causer un comportement inattendu si elle est configurĂ©e de maniĂšre incorrecte.

Pour plus d’informations sur ce que Support GitHub peut faire, consultez Prise en charge du contrĂŽleur d’exĂ©cuteurs d’Actions.

Si vous utilisez des tùches et des services de conteneur ou des actions de conteneur, vous devez définir la valeur containerMode sur dind ou kubernetes. Pour utiliser un mode de conteneur personnalisé, commentez ou supprimez containerMode, puis ajoutez la configuration souhaitée dans la section template. Consultez Personnalisation des modes de conteneur.

Utilisation du mode Docker-in-Docker

Remarque

Le conteneur Docker-in-Docker nĂ©cessite un mode privilĂ©giĂ©. Pour plus d’informations, consultez Configure a Security Context for a Pod or Container dans la documentation Kubernetes.

Par dĂ©faut, le conteneur dind utilise l’image docker:dind, qui exĂ©cute le dĂ©mon Docker en tant que racine. Vous pouvez remplacer cette image par docker:dind-rootless Ă  condition de tenir compte des limitations connues et d’exĂ©cuter les pods en mode --privileged. Pour savoir comment personnaliser la configuration de Docker-in-Docker, consultez « Personnalisation des modes de conteneur Â».

Le mode Docker-in-Docker est une configuration qui vous permet d’exĂ©cuter Docker au sein d’un conteneur Docker. Dans cette configuration, pour chaque pod d’exĂ©cuteur créé, ARC crĂ©e les conteneurs suivants.

  • Un conteneur init
  • Un conteneur runner
  • Un conteneur dind

Pour activer le mode Docker-in-Docker, définissez la valeur containerMode.type sur dind comme suit.

containerMode:
  type: "dind"

template.spec est mis à jour avec la configuration par défaut suivante.

Pour les versions de Kubernetes >= v1.29, un conteneur sidecar sera utilisé pour exécuter le démon Docker.

template:
  spec:
    initContainers:
      - name: init-dind-externals
        image: ghcr.io/actions/actions-runner:latest
        command: ["cp", "-r", "/home/runner/externals/.", "/home/runner/tmpDir/"]
        volumeMounts:
          - name: dind-externals
            mountPath: /home/runner/tmpDir
      - name: dind
        image: docker:dind
        args:
          - dockerd
          - --host=unix:///var/run/docker.sock
          - --group=$(DOCKER_GROUP_GID)
        env:
          - name: DOCKER_GROUP_GID
            value: "123"
        securityContext:
          privileged: true
        restartPolicy: Always
        startupProbe:
          exec:
            command:
              - docker
              - info
          initialDelaySeconds: 0
          failureThreshold: 24
          periodSeconds: 5
        volumeMounts:
          - name: work
            mountPath: /home/runner/_work
          - name: dind-sock
            mountPath: /var/run
          - name: dind-externals
            mountPath: /home/runner/externals
    containers:
      - name: runner
        image: ghcr.io/actions/actions-runner:latest
        command: ["/home/runner/run.sh"]
        env:
          - name: DOCKER_HOST
            value: unix:///var/run/docker.sock
          - name: RUNNER_WAIT_FOR_DOCKER_IN_SECONDS
            value: "120"
        volumeMounts:
          - name: work
            mountPath: /home/runner/_work
          - name: dind-sock
            mountPath: /var/run
    volumes:
      - name: work
        emptyDir: {}
      - name: dind-sock
        emptyDir: {}
      - name: dind-externals
        emptyDir: {}

Pour les versions de Kubernetes < v1.29, la configuration suivante sera appliquĂ©e :

template:
  spec:
    initContainers:
      - name: init-dind-externals
        image: ghcr.io/actions/actions-runner:latest
        command:
          ["cp", "-r", "/home/runner/externals/.", "/home/runner/tmpDir/"]
        volumeMounts:
          - name: dind-externals
            mountPath: /home/runner/tmpDir
    containers:
      - name: runner
        image: ghcr.io/actions/actions-runner:latest
        command: ["/home/runner/run.sh"]
        env:
          - name: DOCKER_HOST
            value: unix:///var/run/docker.sock
        volumeMounts:
          - name: work
            mountPath: /home/runner/_work
          - name: dind-sock
            mountPath: /var/run
      - name: dind
        image: docker:dind
        args:
          - dockerd
          - --host=unix:///var/run/docker.sock
          - --group=$(DOCKER_GROUP_GID)
        env:
          - name: DOCKER_GROUP_GID
            value: "123"
        securityContext:
          privileged: true
        volumeMounts:
          - name: work
            mountPath: /home/runner/_work
          - name: dind-sock
            mountPath: /var/run
          - name: dind-externals
            mountPath: /home/runner/externals
    volumes:
      - name: work
        emptyDir: {}
      - name: dind-sock
        emptyDir: {}
      - name: dind-externals
        emptyDir: {}

Les valeurs dans template.spec sont automatiquement injectĂ©es et ne peuvent pas ĂȘtre remplacĂ©es. Si vous souhaitez personnaliser cette configuration, vous devez annuler l’ensemble containerMode.type, puis copier cette configuration et l’appliquer directement dans votre copie du fichier values.yaml.

Pour obtenir d’autres options de configuration de Helm, consultez values.yaml dans le rĂ©fĂ©rentiel ARC.

Utilisation du mode Kubernetes

En mode Kubernetes, ARC utilise des hooks de conteneur d’exĂ©cuteur pour crĂ©er un pod dans le mĂȘme espace de noms afin d’exĂ©cuter le service, le travail de conteneur ou l’action.

Prérequis

Le mode Kubernetes s’appuie sur des volumes persistants pour partager les dĂ©tails des travaux entre le pod d’exĂ©cuteur et le pod de travail de conteneur. Pour plus d’informations, consultez Persistent Volumes dans la documentation Kubernetes.

Pour utiliser le mode Kubernetes, vous devez effectuer les opérations suivantes.

  • CrĂ©er des volumes persistants disponibles pour les pods d’exĂ©cuteur Ă  revendiquer.
  • Utiliser une solution pour provisionner automatiquement des volumes persistants Ă  la demande.

Pour les tests, vous pouvez utiliser une solution comme OpenEBS.

Configuration du mode Kubernetes

Pour activer le mode Kubernetes, définissez containerMode.type sur kubernetes dans votre fichier values.yaml.

containerMode:
  type: "kubernetes"
  kubernetesModeWorkVolumeClaim:
    accessModes: ["ReadWriteOnce"]
    storageClassName: "dynamic-blob-storage"
    resources:
      requests:
        storage: 1Gi

Pour obtenir d’autres options de configuration de Helm, consultez values.yaml dans le rĂ©fĂ©rentiel ARC.

Remarque

Lorsque le mode Kubernetes est activĂ©, les workflows qui ne sont pas configurĂ©s avec un travail de conteneur Ă©chouent avec une erreur semblable Ă  :

Jobs without a job container are forbidden on this runner, please add a 'container:' to your job or contact your self-hosted runner administrator.

Pour permettre aux travaux sans conteneur de travail de s’exĂ©cuter, dĂ©finissez ACTIONS_RUNNER_REQUIRE_JOB_CONTAINER sur false au niveau de votre conteneur d’exĂ©cuteur. Cela indique Ă  l’exĂ©cuteur de dĂ©sactiver cette vĂ©rification.

template:
  spec:
    containers:
      - name: runner
        image: ghcr.io/actions/actions-runner:latest
        command: ["/home/runner/run.sh"]
        env:
          - name: ACTIONS_RUNNER_REQUIRE_JOB_CONTAINER
            value: "false"

Personnalisation des modes de conteneur

Lorsque vous dĂ©finissez containerMode dans le fichier values.yaml pour le graphique Helm gha-runner-scale-set, vous pouvez utiliser l’une des valeurs suivantes :

  • dind ou
  • kubernetes

En fonction de la valeur que vous définissez pour containerMode, une configuration sera automatiquement injectée dans la section template du fichier values.yaml pour le graphique Helm gha-runner-scale-set.

Pour personnaliser la spécification, mettez en commentaire ou supprimez containerMode, et ajoutez la configuration que vous voulez dans la section template.

Exemple : exĂ©cution de dind-rootless

Avant de dĂ©cider d’exĂ©cuter dind-rootless, assurez-vous de connaĂźtre les limitations connues.

Pour les versions de Kubernetes >= v1.29, un conteneur sidecar sera utilisé pour exécuter le démon Docker.

## githubConfigUrl is the GitHub url for where you want to configure runners
## ex: https://github.com/myorg/myrepo or https://github.com/myorg
githubConfigUrl: "https://github.com/actions/actions-runner-controller"

## githubConfigSecret is the k8s secrets to use when auth with GitHub API.
## You can choose to use GitHub App or a PAT token
githubConfigSecret: my-super-safe-secret

## maxRunners is the max number of runners the autoscaling runner set will scale up to.
maxRunners: 5

## minRunners is the min number of idle runners. The target number of runners created will be
## calculated as a sum of minRunners and the number of jobs assigned to the scale set.
minRunners: 0

runnerGroup: "my-custom-runner-group"

## name of the runner scale set to create. Defaults to the helm release name
runnerScaleSetName: "my-awesome-scale-set"

## template is the PodSpec for each runner Pod
## For reference: https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#PodSpec
template:
  spec:
    initContainers:
    - name: init-dind-externals
      image: ghcr.io/actions/actions-runner:latest
      command: ["cp", "-r", "/home/runner/externals/.", "/home/runner/tmpDir/"]
      volumeMounts:
        - name: dind-externals
          mountPath: /home/runner/tmpDir
    - name: init-dind-rootless
      image: docker:dind-rootless
      command:
        - sh
        - -c
        - |
          set -x
          cp -a /etc/. /dind-etc/
          echo 'runner:x:1001:1001:runner:/home/runner:/bin/ash' >> /dind-etc/passwd
          echo 'runner:x:1001:' >> /dind-etc/group
          echo 'runner:100000:65536' >> /dind-etc/subgid
          echo 'runner:100000:65536' >> /dind-etc/subuid
          chmod 755 /dind-etc;
          chmod u=rwx,g=rx+s,o=rx /dind-home
          chown 1001:1001 /dind-home
      securityContext:
        runAsUser: 0
      volumeMounts:
        - mountPath: /dind-etc
          name: dind-etc
        - mountPath: /dind-home
          name: dind-home
    - name: dind
      image: docker:dind-rootless
      args:
        - dockerd
        - --host=unix:///run/user/1001/docker.sock
      securityContext:
        privileged: true
        runAsUser: 1001
        runAsGroup: 1001
      restartPolicy: Always
      startupProbe:
        exec:
          command:
            - docker
            - info
        initialDelaySeconds: 0
        failureThreshold: 24
        periodSeconds: 5
      volumeMounts:
        - name: work
          mountPath: /home/runner/_work
        - name: dind-sock
          mountPath: /run/user/1001
        - name: dind-externals
          mountPath: /home/runner/externals
        - name: dind-etc
          mountPath: /etc
        - name: dind-home
          mountPath: /home/runner
    containers:
    - name: runner
      image: ghcr.io/actions/actions-runner:latest
      command: ["/home/runner/run.sh"]
      env:
        - name: DOCKER_HOST
          value: unix:///run/user/1001/docker.sock
      securityContext:
        privileged: true
        runAsUser: 1001
        runAsGroup: 1001
      volumeMounts:
        - name: work
          mountPath: /home/runner/_work
        - name: dind-sock
          mountPath: /run/user/1001
    volumes:
    - name: work
      emptyDir: {}
    - name: dind-externals
      emptyDir: {}
    - name: dind-sock
      emptyDir: {}
    - name: dind-etc
      emptyDir: {}
    - name: dind-home
      emptyDir: {}

Pour les versions de Kubernetes < v1.29, la configuration suivante sera appliquĂ©e :

## githubConfigUrl is the GitHub url for where you want to configure runners
## ex: https://github.com/myorg/myrepo or https://github.com/myorg
githubConfigUrl: "https://github.com/actions/actions-runner-controller"

## githubConfigSecret is the k8s secrets to use when auth with GitHub API.
## You can choose to use GitHub App or a PAT token
githubConfigSecret: my-super-safe-secret

## maxRunners is the max number of runners the autoscaling runner set will scale up to.
maxRunners: 5

## minRunners is the min number of idle runners. The target number of runners created will be
## calculated as a sum of minRunners and the number of jobs assigned to the scale set.
minRunners: 0

runnerGroup: "my-custom-runner-group"

## name of the runner scale set to create. Defaults to the helm release name
runnerScaleSetName: "my-awesome-scale-set"

## template is the PodSpec for each runner Pod
## For reference: https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#PodSpec
template:
  spec:
    initContainers:
    - name: init-dind-externals
      image: ghcr.io/actions/actions-runner:latest
      command: ["cp", "-r", "/home/runner/externals/.", "/home/runner/tmpDir/"]
      volumeMounts:
        - name: dind-externals
          mountPath: /home/runner/tmpDir
    - name: init-dind-rootless
      image: docker:dind-rootless
      command:
        - sh
        - -c
        - |
          set -x
          cp -a /etc/. /dind-etc/
          echo 'runner:x:1001:1001:runner:/home/runner:/bin/ash' >> /dind-etc/passwd
          echo 'runner:x:1001:' >> /dind-etc/group
          echo 'runner:100000:65536' >> /dind-etc/subgid
          echo 'runner:100000:65536' >> /dind-etc/subuid
          chmod 755 /dind-etc;
          chmod u=rwx,g=rx+s,o=rx /dind-home
          chown 1001:1001 /dind-home
      securityContext:
        runAsUser: 0
      volumeMounts:
        - mountPath: /dind-etc
          name: dind-etc
        - mountPath: /dind-home
          name: dind-home
    containers:
    - name: runner
      image: ghcr.io/actions/actions-runner:latest
      command: ["/home/runner/run.sh"]
      env:
        - name: DOCKER_HOST
          value: unix:///run/user/1001/docker.sock
      securityContext:
        privileged: true
        runAsUser: 1001
        runAsGroup: 1001
      volumeMounts:
        - name: work
          mountPath: /home/runner/_work
        - name: dind-sock
          mountPath: /run/user/1001
    - name: dind
      image: docker:dind-rootless
      args:
        - dockerd
        - --host=unix:///run/user/1001/docker.sock
      securityContext:
        privileged: true
        runAsUser: 1001
        runAsGroup: 1001
      volumeMounts:
        - name: work
          mountPath: /home/runner/_work
        - name: dind-sock
          mountPath: /run/user/1001
        - name: dind-externals
          mountPath: /home/runner/externals
        - name: dind-etc
          mountPath: /etc
        - name: dind-home
          mountPath: /home/runner
    volumes:
    - name: work
      emptyDir: {}
    - name: dind-externals
      emptyDir: {}
    - name: dind-sock
      emptyDir: {}
    - name: dind-etc
      emptyDir: {}
    - name: dind-home
      emptyDir: {}

Comprendre runner-container-hooks

Lorsque l’exĂ©cuteur dĂ©tecte une exĂ©cution de flux de travail qui utilise un travail de conteneur, un conteneur de service ou une action Docker, il appelle runner-container-hooks pour crĂ©er un nouveau pod. L’exĂ©cuteur s’appuie sur runner-container-hooks pour appeler les API Kubernetes et crĂ©er un nouveau pod dans le mĂȘme espace de noms que le pod d’exĂ©cuteur. Ce nouveau pod sera utilisĂ© pour exĂ©cuter le travail de conteneur, le conteneur de service ou l’action Docker. Pour plus d'informations, consultez le dĂ©pĂŽt runner-container-hooks.

Configuration des extensions de hook

À partir de la version 0.4.0 d’ARC, runner-container-hooks prend en charge les extensions de hook. Vous pouvez les utiliser pour configurer le pod créé par runner-container-hooks. Par exemple, vous pouvez utiliser une extension de hook pour dĂ©finir un contexte de sĂ©curitĂ© pour le pod. Les extensions de hook vous permettent de spĂ©cifier un fichier YAML qui est utilisĂ© pour mettre Ă  jour le PodSpec du pod créé par runner-container-hooks.

Il existe deux options pour configurer les extensions de hook.

  • Stocker dans votre image d’exĂ©cuteur personnalisĂ©e. Vous pouvez stocker le PodSpec dans un fichier YAML n’importe oĂč dans votre image d’exĂ©cuteur personnalisĂ©e. Pour plus d’informations, consultez « Actions Runner Controller Â».
  • Stocker dans un ConfigMap. Vous pouvez crĂ©er un ConfigMap avec le PodSpec et monter ce ConfigMap dans le conteneur d’exĂ©cuteur. Pour plus d’informations, consultez ConfigMaps dans la documentation Kubernetes.

Remarque

Avec les deux options, vous devez dĂ©finir la variable d’environnement ACTIONS_RUNNER_CONTAINER_HOOK_TEMPLATE dans la spĂ©cification du conteneur d’exĂ©cuteur pour qu’elle pointe vers le chemin du fichier YAML montĂ© dans le conteneur d’exĂ©cuteur.

Exemple : Utilisation d’un ConfigMap pour dĂ©finir securityContext

CrĂ©ez un ConfigMap dans le mĂȘme espace de noms que les pods d’exĂ©cuteur. Par exemple :

apiVersion: v1
kind: ConfigMap
metadata:
  name: hook-extension
  namespace: arc-runners
data:
  content: |
    metadata:
      annotations:
        example: "extension"
    spec:
      containers:
        - name: "$job" # Target the job container
          securityContext:
            runAsUser: 1000
  • Les champs .metadata.labels et metadata.annotations seront ajoutĂ©s tels quels, sauf si leurs clĂ©s sont rĂ©servĂ©es. Vous ne pouvez pas remplacer les champs .metadata.name et metadata.namespace.
  • La majoritĂ© des champs de PodSpec sont appliquĂ©s Ă  partir du modĂšle spĂ©cifiĂ© et remplacent les valeurs transmises par le fichier values.yaml de votre graphique Helm.
  • Si vous spĂ©cifiez des volumes supplĂ©mentaires, ils seront ajoutĂ©s aux volumes par dĂ©faut spĂ©cifiĂ©s par l’exĂ©cuteur.
  • Les spec.containers sont fusionnĂ©s en fonction des noms qui leur sont attribuĂ©s.
    • Si le nom du conteneur est $job :
      • Les champs spec.containers.name et spec.containers.image sont ignorĂ©s.
      • Les champs spec.containers.env, spec.containers.volumeMounts et spec.containers.ports sont ajoutĂ©s Ă  la spĂ©cification de conteneur par dĂ©faut créée par le hook.
      • Les autres champs sont appliquĂ©s tels qu’ils ont Ă©tĂ© fournis.
    • Si le nom du conteneur n’est pas $job, les champs seront ajoutĂ©s tels quels Ă  la dĂ©finition du pod.

Activation des métriques

Remarque

Les mesures pour ARC sont disponibles Ă  partir de la version gha-runner-scale-set-0.5.0.

ARC peut Ă©mettre des mĂ©triques sur vos exĂ©cuteurs, vos travaux et le temps consacrĂ© Ă  l’exĂ©cution de vos flux de travail. Les mĂ©triques peuvent ĂȘtre utilisĂ©es pour identifier la congestion, surveiller l’intĂ©gritĂ© de votre dĂ©ploiement ARC, visualiser les tendances d’utilisation, optimiser la consommation des ressources, parmi de nombreux autres cas d’utilisation. Les mĂ©triques sont Ă©mises par les pods contrĂŽleur-manager et Ă©couteurs au format Prometheus. Pour plus d’informations, consultez les formats Exposition dans la documentation Prometheus.

Pour activer les métriques pour ARC, configurez la metrics propriété dans le fichier values.yaml du gha-runner-scale-set-controller graphique.

Voici un exemple de configuration.

metrics:
  controllerManagerAddr: ":8080"
  listenerAddr: ":8080"
  listenerEndpoint: "/metrics"

Remarque

Si l’objet metrics: n’est pas fourni ou est commentĂ©, les indicateurs suivants sont appliquĂ©s aux pods du gestionnaire de contrĂŽleur et de l’écouteur avec des valeurs vides : --metrics-addr, --listener-metrics-addr, --listener-metrics-endpoint. Cela dĂ©sactive les mĂ©triques pour ARC.

Une fois ces propriĂ©tĂ©s configurĂ©es, vos pods de contrĂŽleur et d’écouteur Ă©mettent des mĂ©triques via l’écouteurEndpoint liĂ© aux ports que vous spĂ©cifiez dans votre fichier values.yaml. Dans l’exemple ci-dessus, le point de terminaison est /metrics et le port est :8080. Vous pouvez utiliser ce point de terminaison pour rĂ©cupĂ©rer des mĂ©triques Ă  partir de vos pods contrĂŽleur-manager et Ă©couteur.

Pour dĂ©sactiver les mĂ©triques, mettez Ă  jour votre fichier values.yaml en supprimant ou en commentant l’objet metrics: et ses propriĂ©tĂ©s.

Métriques disponibles pour ARC

Le tableau suivant prĂ©sente les mĂ©triques Ă©mises par les pods du gestionnaire de contrĂŽleur et de l’écouteur.

Remarque

Les mesures émises par le contrÎleur-manager concernent le runtime du contrÎleur et ne sont pas détenues par GitHub.

OwnerMétriqueTypeDescription
controller-managergha_controller_pending_ephemeral_runnersjaugeNombre d’exĂ©cuteurs Ă©phĂ©mĂšres dans un Ă©tat en attente
controller-managergha_controller_running_ephemeral_runnersjaugeNombre d’exĂ©cuteurs Ă©phĂ©mĂšres dans un Ă©tat en cours d’exĂ©cution
controller-managergha_controller_failed_ephemeral_runnersjaugeNombre d’exĂ©cuteurs Ă©phĂ©mĂšres dans un Ă©tat d’échec
controller-managergha_controller_running_listenersjaugeNombre d’écouteurs dans un Ă©tat en cours d’exĂ©cution
listenergha_assigned_jobsjaugeNombre de projets affectĂ©s au groupe identique de l’exĂ©cuteur
listenergha_running_jobsjaugeNombre de projets en cours d’exĂ©cution ou mis en file d’attente Ă  exĂ©cuter
listenergha_registered_runnersjaugeNombre d’exĂ©cuteurs inscrits par le groupe identique de l’exĂ©cuteur
listenergha_busy_runnersjaugeNombre d’exĂ©cuteurs inscrits en cours d’exĂ©cution d’un projet
listenergha_min_runnersjaugeNombre minimal d’exĂ©cuteurs configurĂ©s pour le groupe identique de l’exĂ©cuteur
listenergha_max_runnersjaugeNombre maximal d’exĂ©cuteurs configurĂ©s pour le groupe identique de l’exĂ©cuteur
listenergha_desired_runnersjaugeNombre d’exĂ©cuteurs souhaitĂ©s (objectif scale up/scale down) par le groupe identique de l’exĂ©cuteur
listenergha_idle_runnersjaugeNombre d’exĂ©cuteurs inscrits qui n’exĂ©cutent pas un projet
listenergha_started_jobs_totalcounterNombre total de projets dĂ©marrĂ©s depuis que l’écouteur est devenu prĂȘt [1]
listenergha_completed_jobs_totalcounterNombre total de projets terminĂ©s depuis que l’écouteur est devenu prĂȘt [1]
listenergha_job_startup_duration_secondshistogramNombre de secondes passĂ©es en attente de tĂąche de workflow pour dĂ©marrer sur l’exĂ©cuteur dĂ©tenu par le groupe identique de l’exĂ©cuteur
listenergha_job_execution_duration_secondshistogramNombre de secondes passĂ©es Ă  exĂ©cuter des tĂąches de workflow par le groupe identique de l’exĂ©cuteur

[1]: Listener metrics that have the counter type are reset when the listener pod restarts.

Mise à niveau d’ARC

Étant donnĂ© que Helm ne prend pas en charge la mise Ă  niveau ou la suppression des CRD, il n’est pas possible d’utiliser Helm pour mettre Ă  niveau ARC. Pour plus d’informations, consultez DĂ©finitions de ressources personnalisĂ©es dans la documentation Helm. Pour mettre Ă  niveau ARC vers une version plus rĂ©cente, vous devez effectuer les Ă©tapes suivantes.

  1. Désinstallez toutes les installations de gha-runner-scale-set.
  2. Attendez que les ressources soient nettoyées.
  3. Désinstallez ARC.
  4. S’il existe une modification des CRD entre la version actuellement installĂ©e et la version mise Ă  jour, supprimez tous les CRD associĂ©s au groupe d’API actions.github.com.
  5. Réinstallez ARC.

Pour plus d'informations, voir Déploiement d'un jeu d'échelle pour les coureurs.

Si vous souhaitez mettre Ă  niveau ARC mais que vous craignez des temps d’arrĂȘt, vous pouvez dĂ©ployer ARC dans une configuration de haute disponibilitĂ© afin de garantir que les exĂ©cuteurs sont toujours disponibles. Pour plus d'informations, voir Haute disponibilitĂ© et basculement automatique.

Remarque

La transition de la version d’ARC prise en charge par la communautĂ© vers la version prise en charge par GitHub constitue un changement architectural important. La version prise en charge par GitHub nĂ©cessite une refonte de nombreux composants d’ARC. Il ne s’agit pas d’une mise Ă  niveau de logiciel mineure. Pour ces raisons, nous recommandons de tester d’abord les nouvelles versions dans un environnement intermĂ©diaire qui correspond Ă  votre environnement de production. Cela garantira la stabilitĂ© et la fiabilitĂ© de la configuration avant de la dĂ©ployer en production.

DĂ©ploiement d’une image canary

Vous pouvez tester les fonctionnalitĂ©s avant qu’elles ne soient publiĂ©es en utilisant des versions canary de l’image du conteneur controller-manager. Les images canary sont publiĂ©es avec le format de balise canary-SHORT_SHA. Pour plus d’informations, consultez gha-runner-scale-set-controller sur le Container registry.

Remarque

  • Vous devez utiliser les graphiques Helm dans votre systĂšme de fichiers local.
  • Vous ne pouvez pas utiliser les graphiques Helm publiĂ©s.
  1. Mettez Ă  jour le tag dans le fichier gha-runner-scale-set-controller values.yaml en : canary-SHORT_SHA
  2. Mettez Ă  jour le champ appVersion dans le fichier Chart.yaml pour gha-runner-scale-set en : canary-SHORT_SHA
  3. Réinstallez ARC en utilisant le graphique Helm et les fichiers values.yaml mis à jour.

Haute disponibilité et basculement automatique

ARC peut ĂȘtre dĂ©ployĂ© dans une configuration Ă  haute disponibilitĂ© (active/active). Si vous avez deux clusters Kubernetes distincts dĂ©ployĂ©s dans des rĂ©gions distinctes, vous pouvez dĂ©ployer ARC dans les deux clusters et configurer des groupes identiques d’exĂ©cuteurs pour qu’ils utilisent le mĂȘme runnerScaleSetName. Pour ce faire, chaque groupe identique de l’exĂ©cuteur doit ĂȘtre affectĂ© Ă  un groupe d’exĂ©cuteurs distinct. Par exemple, vous pouvez avoir deux groupes identiques d’exĂ©cuteurs nommĂ©s chacunarc-runner-set, Ă  condition qu’un groupe identique de l’exĂ©cuteur appartient Ă  runner-group-A et que l’autre groupe identique de l’exĂ©cuteur appartient Ă  runner-group-B. Pour plus d'informations sur l'affectation de jeux d'Ă©chelle d'exĂ©cution Ă  des groupes d'exĂ©cution, voir Gestion de l’accĂšs aux exĂ©cuteurs auto-hĂ©bergĂ©s Ă  l’aide de groupes.

Si les deux groupes identiques de l’exĂ©cuteur sont en ligne, les projets qui leur sont attribuĂ©s sont distribuĂ©s arbitrairement (course d’affectation). Vous ne pouvez pas configurer l’algorithme d’attribution de projet. Si l’un des clusters tombe en panne, le groupe identique de l’exĂ©cuteur dans l’autre cluster continue d’acquĂ©rir des projets normalement sans aucune intervention ni modification de configuration.

Utilisation d’ARC dans les organisations

Une seule installation d’Actions Runner Controller vous permet de configurer un ou plusieurs groupes identiques d’exĂ©cuteurs. Ces groupes identiques d’exĂ©cuteurs peuvent ĂȘtre inscrits dans un dĂ©pĂŽt, une organisation ou une entreprise. Vous pouvez Ă©galement utiliser des groupes d’exĂ©cuteurs pour contrĂŽler les limites des autorisations de ces groupes identiques d’exĂ©cuteurs.

Il est recommandĂ© de crĂ©er un espace de noms unique pour chaque organisation. Vous pouvez Ă©galement crĂ©er un espace de noms pour chaque groupe d’exĂ©cuteurs ou chaque groupe identique d’exĂ©cuteurs. Vous pouvez installer autant de groupes identiques d’exĂ©cuteurs que nĂ©cessaire dans chaque espace de noms. Vous bĂ©nĂ©ficierez ainsi des niveaux d’isolation les plus Ă©levĂ©s et amĂ©liorerez votre sĂ©curitĂ©. Vous pouvez utiliser des GitHub Apps pour l’authentification et dĂ©finir des autorisations granulaires pour chaque groupe identique d’exĂ©cuteurs.

Certaines parties ont Ă©tĂ© adaptĂ©es Ă  partir de https://github.com/actions/actions-runner-controller/ sous la licence Apache-2.0 :

Copyright 2019 Moto Ishizawa

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.