4 votes

Comment passer les variables ci/cd de gitlab à kubernetes(AKS) deployment.yaml ?

J'ai un projet node.js (express) enregistré dans gitlab et qui fonctionne dans Kubernetes. Je sais que nous pouvons définir des variables env dans Kubernetes (sur Azure, aks) dans le fichier deployment.yaml.

Comment puis-je passer les variables gitlab ci/cd env à kubernetes(aks) (fichier deployment.yaml) ?

6voto

Janusz Points 424

Vous pouvez développer vos propres diagrammes de barre. Cela vous rapportera à long terme.

Autre approche : il existe un moyen facile et polyvalent de mettre ${MY_VARIABLE} dans le fichier deployment.yaml. Ensuite, au cours de l'exécution du pipeline, au niveau de la tâche de déploiement, utilisez la commande envsubst pour remplacer les variables par les valeurs respectives et déployer le fichier.

Exemple de fichier de déploiement :

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment-${MY_VARIABLE}
  labels:
    app: nginx
spec:
  replicas: 3
(...)

Exemple de travail :

(...)
deploy:
  stage: deploy
  script:
    - envsubst < deployment.yaml > deployment-${CI_JOB_NAME}.yaml
    - kubectl apply -f deployment-${CI_JOB_NAME}.yaml

0voto

night-gold Points 982

Je vais vous donner une solution facile qui peut ou non être "la solution".

Pour faire ce que vous voulez, vous pouvez simplement ajouter vos variables env gitlab dans un secret pendant le cd avant de lancer votre déploiement. Cela vous permettra d'utiliser env secret dans le déploiement.

Si vous voulez procéder de cette manière, vous devrez réfléchir à la manière de les supprimer lorsque vous voudrez les mettre à jour pour l'idempotence.

0voto

Andy Shinn Points 9714

Une autre solution serait de créer l'objet que vous déployez en tant que Gouvernail Graphique. Cela vous permettrait d'avoir des variables spécifiques (appelées valeurs) que vous pouvez utiliser dans le modèle et remplacer au moment de l'installation ou de la mise à jour.

Il existe de nombreux articles sur la façon de mettre en place un tel système.

0voto

johnshumon Points 91

Pour les futurs lecteurs. Une autre façon de procéder consiste à utiliser un fichier modèle et à générer deployment.yaml du modèle en utilisant envsubst .

Fichier modèle :

# template/deployment.tmpl
---
apiVersion: apps/v1
kind: deployment
metadata:
  name: strapi-deployment
  namespace: strapi
  labels:
    app: strapi

# deployment specifications
spec:
  replicas: 1
  selector:
    matchLabels:
      app: strapi
  serviceName: strapi

  # pod specifications
  template:
    metadata:
      labels:
        app: strapi

    # pod blueprints
    spec:
      containers:
        - name: strapi-container
          image: registry.gitlab.com/repo-name/image:${IMAGE_TAG}
          imagePullPolicy: Always
    imagePullSecrets:
    - name: gitlab-registry-secret

deploy scène dans .gitlab-ci.yml

(...)
deploy:
  stage: deploy
  script:
    # deploy resources in k8s cluster
    - envsubst < strapi-deployment.tmpl > strapi-deployment.yaml
    - kubectl apply -f strapi-deployment.yaml

Comme défini ici image: registry.gitlab.com/repo-name/image:${IMAGE_TAG} , IMAGE_TAG est une variable d'environnement définie dans gitlab. envsubst passerait par strapi-deployment.tmpl et substituer toute variable qui y est définie et générer strapi-deployment.yaml fichier.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X