

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Configuration d'un CI/CD pipeline à l'aide d'AWS CodePipeline et d'AWS CDK
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk"></a>

*Konstantin Zarudaev, Yasha Dabas, Lars Kinder et Cizer Pereira, Amazon Web Services*

## Accueil
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-summary"></a>

L'automatisation de votre processus de création et de publication de logiciels grâce à l'intégration et à la livraison continues (CI/CD) supports repeatable builds and rapid delivery of new features to your users. You can quickly and easily test each code change, and you can catch and fix bugs before releasing your software. By running each change through your staging and release process, you can verify the quality of your application or infrastructure code. CI/CDincarne une culture, un ensemble de principes de fonctionnement et un [ensemble de pratiques qui aident les équipes de](https://aws.amazon.com/devops/#cicd) développement d'applications à apporter des modifications de code plus fréquemment et de manière plus fiable). L'implémentation est également connue sous le nom de pipeline *CI/CD*.

Ce modèle définit un pipeline d'intégration et de livraison continues (CI/CD) réutilisable sur Amazon Web Services (AWS) avec un référentiel AWS CodeCommit . Le CodePipeline pipeline AWS est écrit à l'aide d'[AWS Cloud Development Kit (AWS CDK) v2](https://aws.amazon.com/cdk/).

Vous pouvez ainsi modéliser les différentes étapes du processus de publication de votre logiciel via l'interface AWS Management Console, l'AWS Command Line Interface (AWS CLI), CloudFormation AWS ou AWS SDKs. CodePipeline Ce modèle illustre la mise en œuvre d'AWS CDK CodePipeline et de ses composants à l'aide d'AWS CDK. Outre la création de bibliothèques, AWS CDK inclut une boîte à outils (la commande CLI`cdk`), qui est le principal outil pour interagir avec votre application AWS CDK. Entre autres fonctions, le kit d'outils permet de convertir une ou plusieurs piles en CloudFormation modèles et de les déployer sur un compte AWS.

Le pipeline inclut des tests visant à valider la sécurité de vos bibliothèques tierces et contribue à garantir une publication accélérée et automatisée dans les environnements spécifiés. Vous pouvez améliorer la sécurité globale de vos applications en les soumettant à un processus de validation.

L'objectif de ce modèle est d'accélérer votre utilisation des CI/CD pipelines pour déployer votre code tout en garantissant que les ressources que vous déployez respectent les DevOps meilleures pratiques. Après avoir implémenté l'[exemple de code](https://github.com/aws-samples/aws-codepipeline-cicd), vous disposerez d'un [AWS CodePipeline](https://aws.amazon.com/codepipeline/) avec des processus de linting, de test, de vérification de sécurité, de déploiement et de post-déploiement. Ce modèle inclut également des étapes pour Makefile. À l'aide d'un Makefile, les développeurs peuvent reproduire CI/CD les étapes localement et accélérer le processus de développement.

## Conditions préalables et limitations
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif
+ Une compréhension de base dans les domaines suivants :
  + AWS CDK
  + AWS CloudFormation
  + AWS CodePipeline
  + TypeScript

**Limites**

Ce modèle utilise [AWS CDK](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-construct-library.html) TypeScript uniquement pour. Il ne couvre pas les autres langues prises en charge par AWS CDK.

**Versions du produit**

Utilisez les dernières versions des outils suivants :
+ Interface de ligne de commande AWS (AWS CLI)
+ cfn\_nag
+ git-remote-codecommit
+ Node.js

## Architecture
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-architecture"></a>

**Pile technologique cible**
+ AWS CDK
+ AWS CloudFormation
+ AWS CodeCommit
+ AWS CodePipeline

**Architecture cible**

Le pipeline est déclenché par une modification du CodeCommit référentiel AWS (`SampleRepository`). Au début, CodePipeline crée des artefacts, se met à jour et lance le processus de déploiement. Le pipeline qui en résulte déploie une solution dans trois environnements indépendants :
+ Dev — Vérification du code en trois étapes dans l'environnement de développement actif
+ Test — Environnement de test d'intégration et de régression
+ Prod — Environnement de production

Les trois étapes incluses dans la phase de développement sont le linting, la sécurité et les tests unitaires. Ces étapes s'exécutent en parallèle pour accélérer le processus. Pour garantir que le pipeline ne fournit que des artefacts fonctionnels, il sera arrêté de fonctionner chaque fois qu'une étape du processus échoue. Après un déploiement en phase de développement, le pipeline exécute des tests de validation pour vérifier les résultats. En cas de succès, le pipeline déploiera ensuite les artefacts dans l'environnement de test, qui contient une validation après le déploiement. La dernière étape consiste à déployer les artefacts dans l'environnement Prod.

Le schéma suivant montre le flux de travail entre le CodeCommit référentiel et les processus de création et de mise à jour exécutés par CodePipeline, les trois étapes de l'environnement de développement, ainsi que le déploiement et la validation ultérieurs dans chacun des trois environnements.

![L'environnement de développement inclut le linting, la sécurité et les tests unitaires, tous incluant le déploiement et la validation.](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/d617e735-8624-4722-8a3d-073bcc356328/images/92504aac-03e3-4c95-b225-74505f8dd136.png)


## Outils
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-tools"></a>

**Services AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) est un framework de développement logiciel qui vous aide à définir et à provisionner l'infrastructure du cloud AWS sous forme de code.
+ [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) vous CloudFormation aide à configurer les ressources AWS, à les approvisionner rapidement et de manière cohérente, et à les gérer tout au long de leur cycle de vie sur l'ensemble des comptes et des régions AWS. Dans ce modèle, les CloudFormation modèles peuvent être utilisés pour créer un CodeCommit référentiel et un pipeline CodePipeline CI/CD.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) est un service de contrôle de version qui vous permet de stocker et de gérer de manière privée des référentiels Git, sans avoir à gérer votre propre système de contrôle de source.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) est un CI/CD service qui vous permet de modéliser et de configurer rapidement les différentes étapes d'une version logicielle et d'automatiser les étapes nécessaires à la publication continue des modifications logicielles.
+ [L'interface de ligne de commande AWS (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) est un outil open source qui vous permet d'interagir avec les services AWS par le biais de commandes dans votre shell de ligne de commande.

**Autres outils**
+ [cfn\_nag](https://github.com/stelligent/cfn_nag) est un outil open source qui recherche des modèles dans des CloudFormation modèles afin d'identifier les problèmes de sécurité potentiels.
+ [git-remote-codecommit](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-git-remote-codecommit.html)est un utilitaire permettant de transférer et d'extraire du code depuis des CodeCommit référentiels en étendant Git.
+ [Node.js](https://nodejs.org/en/docs/) est un environnement d' JavaScript exécution piloté par les événements conçu pour créer des applications réseau évolutives.

**Code**

Le code de ce modèle est disponible dans le référentiel GitHub [AWS CodePipeline with CI/CD practices](https://github.com/aws-samples/aws-codepipeline-cicd).

## Bonnes pratiques
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-best-practices"></a>

Passez en revue les ressources, telles que les politiques AWS Identity and Access Management (IAM), pour vérifier qu'elles sont conformes aux meilleures pratiques de votre organisation.

## Épopées
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-epics"></a>

### Outils d'installation
<a name="install-tools"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Installez des outils sur macOS ou Linux. | Si vous utilisez macOS ou Linux, vous pouvez installer les outils en exécutant la commande suivante dans votre terminal préféré ou en utilisant [Homebrew pour Linux.](https://docs.brew.sh/Homebrew-on-Linux)<pre>brew install<br />brew install git-remote-codecommit<br />brew install ruby brew-gem<br />brew-gem install cfn-nag</pre> | DevOps ingénieur | 
| Configurez l'AWS CLI. | Pour configurer l'AWS CLI, suivez les instructions correspondant à votre système d'exploitation :[See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html) | DevOps ingénieur | 

### Configuration du déploiement initial
<a name="set-up-the-initial-deployment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Téléchargez ou clonez le code. | Pour obtenir le code utilisé par ce modèle, effectuez l'une des opérations suivantes :[See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html)<pre>git clone --depth 1 https://github.com/aws-samples/aws-codepipeline-cicd.git</pre><br />Supprimez le `.git` répertoire du référentiel cloné.<pre>cd ./aws-codepipeline-cicd<br />rm -rf ./.git</pre><br />Plus tard, vous utiliserez un CodeCommit dépôt AWS nouvellement créé comme origine distante. | DevOps ingénieur | 
| Connectez-vous au compte AWS. | Vous pouvez vous connecter à l'aide d'un jeton de sécurité temporaire ou d'une authentification par zone d'atterrissage. Pour vérifier que vous utilisez le bon compte et la bonne région AWS, exécutez les commandes suivantes.<pre>AWS_REGION="eu-west-1"<br />ACCOUNT_NUMBER=$(aws sts get-caller-identity --query Account --output text)<br />echo "${ACCOUNT_NUMBER}"</pre> | DevOps ingénieur | 
| Démarrez l'environnement. | Pour démarrer un environnement AWS CDK, exécutez les commandes suivantes.<pre>npm install<br />npm run cdk bootstrap "aws://${ACCOUNT_NUMBER}/${AWS_REGION}"</pre><br />Une fois que vous avez réussi à démarrer l'environnement, le résultat suivant doit être affiché.<pre>⏳  Bootstrapping environment aws://{account}/{region}...<br />✅  Environment aws://{account}/{region} bootstrapped</pre><br />Pour plus d'informations sur le démarrage d'AWS CDK, consultez la documentation du CDK [AWS](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html). | DevOps ingénieur | 
| Synthétisez un modèle. | Pour synthétiser une application AWS CDK, utilisez la `cdk synth` commande.<pre>npm run cdk synth</pre><br />Le résultat suivant doit s'afficher.<pre>Successfully synthesized to <path-to-directory>/aws-codepipeline-cicd/cdk.out<br />Supply a stack id (CodePipeline, Dev-MainStack) to display its template.</pre> | DevOps ingénieur | 
| Déployez la CodePipeline pile. | Maintenant que vous avez amorcé et synthétisé le CloudFormation modèle, vous pouvez le déployer. Le déploiement créera le CodePipeline pipeline et un CodeCommit référentiel, qui seront la source et le déclencheur du pipeline.<pre>npm run cdk -- deploy CodePipeline --require-approval never</pre><br />Après avoir exécuté la commande, vous devriez constater un déploiement réussi de la CodePipeline pile et des informations de sortie. Vous `CodePipeline.RepositoryName` donne le nom du CodeCommit référentiel dans le compte AWS.<pre>CodePipeline: deploying...<br />CodePipeline: creating CloudFormation changeset...<br />✅  CodePipeline<br />Outputs:<br />CodePipeline.RepositoryName = SampleRepository<br />Stack ARN:<br />arn:aws:cloudformation:REGION:ACCOUNT-ID:stack/CodePipeline/STACK-ID</pre> | DevOps ingénieur | 
| Configurez le CodeCommit référentiel et la branche distants. | Une fois le déploiement réussi, CodePipeline lancera la première exécution du pipeline, que vous trouverez dans la [ CodePipeline console AWS](https://eu-west-1.console.aws.amazon.com/codesuite/codepipeline/pipelines). Comme AWS CDK CodeCommit n'initie pas de branche par défaut, cette exécution initiale du pipeline échouera et renverra le message d'erreur suivant.<pre>The action failed because no branch named main was found in the selected AWS CodeCommit repository SampleRepository. Make sure you are using the correct branch name, and then try again. Error: null</pre><br />Pour corriger cette erreur, configurez une origine distante en tant que `SampleRepository` et créez la `main` branche requise.<pre>RepoName=$(aws cloudformation describe-stacks --stack-name CodePipeline --query "Stacks[0].Outputs[?OutputKey=='RepositoryName'].OutputValue" --output text)<br />echo "${RepoName}"<br />#<br />git init<br />git branch -m master main<br />git remote add origin codecommit://${RepoName}<br />git add .<br />git commit -m "Initial commit"<br />git push -u origin main</pre> | DevOps ingénieur | 

### Testez le CodePipeline pipeline déployé
<a name="test-the-deployed-codepipeline-pipeline"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Validez une modification pour activer le pipeline. | Après un déploiement initial réussi, vous devriez disposer d'un CI/CD pipeline complet avec une `main` branche pour `SampleRepository` en tant que branche source. Dès que vous validez les modifications apportées à la `main` branche, le pipeline lance et exécute la séquence d'actions suivante :[See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html) | DevOps ingénieur | 

### Testez localement en utilisant un Makefile
<a name="test-locally-by-using-a-makefile"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Lancez le processus de développement à l'aide d'un Makefile. | Vous pouvez exécuter l'ensemble du pipeline localement à l'aide de la `make` commande, ou vous pouvez exécuter une étape individuelle (par exemple,`make linting`).<br />Pour tester l'utilisation`make`, effectuez les actions suivantes :[See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html) | Développeur d'applications, DevOps ingénieur | 

### nettoyer des ressources ;
<a name="clean-up-resources"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Supprimez les ressources de l'application AWS CDK. | Pour nettoyer votre application AWS CDK, exécutez la commande suivante.<pre>cdk destroy --all</pre><br />Sachez que les compartiments Amazon Simple Storage Service (Amazon S3) créés lors du démarrage ne sont pas automatiquement supprimés. Ils ont besoin d'une politique de rétention autorisant leur suppression, ou vous devez les supprimer manuellement dans votre compte AWS. | DevOps ingénieur | 

## Résolution des problèmes
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Le modèle ne fonctionne pas comme prévu. | Si quelque chose ne va pas et que le modèle ne fonctionne pas, assurez-vous que vous disposez des éléments suivants :[See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html) | 

## Ressources connexes
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-resources"></a>
+ [Premiers pas avec les tâches courantes dans IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html)
+ [ CodePipeline Documentation AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)
+ [Kit de développement logiciel AWS](https://docs.aws.amazon.com/cdk/v2/guide/home.html)