Comment utiliser GitHub Enterprise pour déployer une application Amazon ECS via CodePipeline ?

Date de la dernière mise à jour : 11/02/2020

Je souhaite utiliser GitHub Enterprise pour déployer une application Amazon Elastic Container Service (Amazon ECS) via AWS CodePipeline.

Brève description

Choisissez l'une des options suivantes :

  • Créez un webhook personnalisé avec AWS Lambda et Amazon API Gateway en intégrant Git à CodePipeline.
  • Intégrez GitHub Enterprise comme source d'un projet AWS CodeBuild en suivant les étapes décrites dans la section Résolution suivante.

Dans la résolution suivante, vous créez un projet CodeBuild avec votre référentiel GitHub Enterprise comme source.

Voici comment fonctionne la résolution :

  • Le projet inclut deux fichiers buildspec.yml. Le premier fichier, pour CodeBuild, crée et transfère l'artefact vers Amazon Simple Storage Service (Amazon S3). L'autre fichier concerne CodePipeline. Ce fichier crée et transmet une image Docker à Amazon Elastic Container Registry (Amazon ECR).
  • Un compartiment Amazon S3 reçoit un nouveau fichier cb-artifact.zip créé par chaque génération.
  • Dans CodePipeline, vous disposez d'une étape source, de génération et de déploiement. L'étape source pointe vers l'objet Amazon S3 (cb-artifact.zip). L'étape de génération crée et transmet une image Docker à Amazon ECR. L'étape de déploiement met à jour la version de définition de tâche sur votre Amazon ECS service.

Solution

Créer un projet CodeBuild avec GitHub Enterprise comme source

1.    Ouvrez la console CodeBuild.

2.    Choisissez Create build project (Créer un projet de génération).

3.    Pour Project name (Nom du projet), entrez un nom unique pour votre projet.

4.    Dans la section Source pour Source provider (Fournisseur de source), choisissez GitHub Enterprise.

5.    Pour GitHub Enterprise personal access token (Jeton d'accès personnel GitHub Enterprise), saisissez le jeton généré à partir de votre compte GitHub, puis choisissez Save token (Enregistrerle jeton).

Remarque : vous ne devez saisir et enregistrer le jeton d'accès personnel qu'une seule fois. Tous les futurs projets CodeBuild utilisent ce jeton.

6.    Pour Repository URL (URL du référentiel), entrez le chemin d'accès à votre référentiel, y compris le nom du référentiel.

7.    Développez Additional configuration (Configuration supplémentaire).

8.    Pour ignorer les avertissements SSL lors de la connexion à votre référentiel de projet d'entreprise GitHub, choisissez Enable insecure SSL (Activer SSL non sécurisé).

Remarque : une bonne pratique consiste à activer le protocole SSL non sécurisé à des fins de test uniquement, pas pour les environnements de production.

9.    Dans la section Primary source webhook events (Événements Webhook de la source principale), cochez la case Rebuild every time a code change is push to this repository (Régénérer chaque fois qu'une modification du code est envoyée au référentiel).

10.    Pour Environment image (Image d'environnement), choisissez Managed Image (Image générée).

11.    Pour Operating system (Système d'exploitation), choisissez Amazon Linux 2.

12.    Pour Runtime(s) (Exécution(s)), choisissez Standard.

13.    Pour Image, choisissez aws/codebuild/amazonlinux2-x86_64-standard:2.0.

14.    Pour Image version (Version de l'image), choisissez Always use the latest image for this runtime version (Toujours utiliser la dernière image pour cette version d'exécution).

15.    Pour Environment type (Type d'environnement), choisissez Linux.

16.    Ne cochez pas la case Enable this flag if you want to build Docker images or want your builds to get elevated privileges (Activer cet indicateur si vous souhaitez créer des images Docker ou que vos générations obtiennent des privilèges élevés).

17.    Pour Service role (Rôle de service), choisissez New service role (Nouveau rôle de service).

Remarque : mettez à jour le nouveau rôle de service et ajoutez des autorisations pour que CodeBuild accède au compartiment Amazon S3 dans lequel vous stockez le fichier zip.

18.    Dans la section Buildspec pour Build specifications (spécifications de la génération), choisissez Use a buildspec file (Utiliser un fichier buildspec) ou Insert build commands (insérer des commandes de génération) en fonction de vos besoins. Consultez l'exemple buildspec suivant :

version: 0.2
  phases:
    install:
      runtime-versions:
        docker: 18
    build:
      commands:
          - echo Uploading Artifacts to S3
  artifacts:
      files:
          - '**/*'

Remarque : il existe deux fichiers buildspec.yml pour le même projet. Chaque fichier est stocké dans un dossier différent du projet. Le premier chemin de fichier est codebuild/buildspec.yml.

19.    Dans Artefacts, pour Type, choisissez Amazon S3.

20.    Pour Nom du compartiment, choisissez un compartiment dans la liste ou créez-en un.

Important : utilisez un compartiment Amazon S3 existant ou créez un compartiment Amazon S3 avec la gestion des versions activée. Le compartiment Amazon S3 stocke le fichier zip créé par chaque génération. Avec chaque nouvelle version, un nouveau fichier zip est transmis au compartiment Amazon S3. Le pipeline de code est déclenché avec chaque nouveau fichier zip.

21.    Pour name (nom), choisissez cb-artifact.zip.

22.    Pour Path (Chemin) et Namespace type (Type d'espace de noms), conservez les options par défaut.

23.    Pour Artifacts packaging (Empaquetage des artecfacts), choisissez zip.

24.    Choisissez Create build project (Créer un projet de génération).

Remarque : un nouveau rôle créé dans la console CodeBuild est nommé codebuild-nomdevotreprojet-role-service.

Créer un pipeline de code avec un compartiment Amazon S3 comme source

1.    Ouvrez la console CodePipeline.

2.    Choisissez Create pipeline (Créer un pipeline).

3.    Pour Pipeline name (Nom du pipeline), entrez le nom de votre pipeline.

4.    Pour Service role (Rôle de service), choisissez New service role (Nouveau rôle de service).

5.    Sélectionnez Next (Suivant).

6.    Dans la section Source pour Source provider (Fournisseur de source), choisissez Amazon S3.

7.    Pour Bucket (Compartiment), choisissez le compartiment qui contient les fichiers zip créés à partir de la génération avec le nom de votre compartiment.

8.    Pour S3 object key, (Clé d'objet S3), entrez cb-artifact.zip.

9.    Sélectionnez Next (Suivant).

10.    Choisissez Create pipeline (Créer un pipeline).

Créer un projet CodeBuild pour l'étape de génération

1.    Pour Build provider (Fournisseur de génération), choisissez AWS CodeBuild, puis Create project (Créer un projet).

Remarque : vous êtes redirigé vers la page de création de projet CodeBuild.

2.    Pour Project name (Nom du projet), entrez un nom unique pour votre projet.

3.    Pour Environment image (Image d'environnement), choisissez Managed Image (Image générée).

4.    Pour Operating system (Système d'exploitation), choisissez Amazon Linux 2.

5.    Pour Runtime(s) (Exécution(s)), choisissez Standard.

6.    Pour Image, choisissez aws/codebuild/amazonlinux2-x86_64-standard:2.0.

7.    Pour Image version (Version de l'image), choisissez Always use the latest image for this runtime version (Toujours utiliser la dernière image pour cette version d'exécution).

8.    Pour Environment type (Type d'environnement), choisissez Linux.

9.    Cochez la case Enable this flag if you want to build Docker images or want your builds to get elevated privileges (Activer cet indicateur si vous souhaitez générer des images Docker ou que vos générations obtiennent des privilèges élevés).

10.    Pour Service role (Rôle de service), choisissez New service role (Nouveau rôle de service).

11.    Dans la section Buildspec pour Build specifications (Spécifications de la génération), choisissez Use a buildspec file (Utiliser un fichier buildspec) ou Insert build commands (insérer des commandes de génération) en fonction de vos besoins. Consultez l'exemple de fichier buildspec suivant :

version: 0.2
phases:
  install:
    runtime-versions:
      docker: 18
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - aws --version
      - YOUR_ACCOUNT_ID=$(aws sts get-caller-identity --output text --query 'Account')
      - $(aws ecr get-login --region $AWS_DEFAULT_REGION --no-include-email)
      - REPOSITORY_URI=$(echo $ACCOUNT_ID).dkr.ecr.eu-central-1.amazonaws.com/ECR-REPO-NAME
      - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
      - IMAGE_TAG=${COMMIT_HASH:=latest}
  build:
    commands:
      - echo Build started on 'date'
      - echo Building the Docker image...
      - docker build -t $REPOSITORY_URI:latest .
      - docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG
  post_build:
    commands:
      - echo Build completed on 'date'
      - echo Pushing the Docker images...
      - docker push $REPOSITORY_URI:latest
      - docker push $REPOSITORY_URI:$IMAGE_TAG
      - echo Writing image definitions file...
      - printf '[{"name":"YourContainerName","imageUri":"%s"}]' $REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json
artifacts:
    files: imagedefinitions.json

Remarque : si vous utilisez l'exemple de code précédent, mettez à jour les paramètres ECR-REPO-NAME et Nomdevotreconteneur .

Important : il existe deux fichiers buildspec.yml pour le même projet. Chaque fichier est stocké dans un dossier différent du projet. Le deuxième chemin de fichier est codepipeline/buildspec.yml. Le nom de fichier par défaut du fichier généré par buildspec est imagedefinitions.json. Si vous choisissez d'utiliser un autre nom de fichier, vous devez fournir ce nom lorsque vous créez l'étape de déploiement du pipeline.

12.    Choisissez Continue to CodePipeline (Continuer vers CodePipeline).

13.    Laissez Environment variables (Variables d'environnement) et Variable namespace (Espace de noms variable) vides.

14.    Pour Output artifacts (Artefacts de sortie), ajoutez un nom unique (par exemple, BuildArtifact) pour une utilisation ultérieure.

15.    Choisissez Done (Terminé).

Déployer le cluster et le service avec Amazon ECS

Après avoir terminé les étapes de la section précédente, vous êtes redirigé vers la console CodePipeline.

1.    Dans la section Deploy (Déployer) de la console CodePipeline, pour Deploy provider (Déployer le fournisseur), choisissez Amazon ECS.

2.    Pour Input artifacs (Artefacts d'entrée), choisissez BuildArtifact.

3.    Pour Cluster name (Nom du cluster), choisissez le cluster à déployer.

4.    Pour Service name (Nom du service), choisissez le service à déployer.

5.    Choisissez Next (Suivant), puis Create (Créer).

6.    Après avoir créé le projet de génération et le pipeline, mettez à jour le rôle de service dans la console AWS Identity and Access Management (IAM).

Remarque : le nouveau rôle créé dans la console CodeBuild s'appelle codebuild-Nomdevotre projet-role-service. Ce rôle ne dispose pas des autorisations nécessaires pour transmettre l'image à Amazon ECR. Pour plus d'informations, consultez Étape 3 : Ajouter des autorisations Amazon ECR au rôle CodeBuild.


Cet article vous a-t-il été utile ?

Cette page peut-elle être améliorée ?


Vous avez besoin d’aide ?