Intégration continue et déploiement continu avec code Pepeline de AWS [Application Java]
![Intégration continue et déploiement continu avec code Pepeline de AWS [Application Java]](https://cdn.hashnode.com/res/hashnode/image/upload/v1712852960089/b905be01-a9e2-44ad-8bf3-ed18e21273bd.png)
Prérequis
AWS Account
AWS Cloud Services
1. AWS CodeCommit ( en tant que référentiel du système de contrôle de version)
2. AWS Codebuild ( pour construire l'image )
3. AWS Codedeploy ( en tant que service de déploiement d'artefacts)
4. AWS Codeartifact ( en tant que référentiel Maven pour les dépendances)
5. S3 Bucket ( stockage des artefacts)
6. AWS Codepipeline ( service pour intégrer toutes les tâches ensemble)AWS CLI
Git
SonarCloud
Flux d'exécution
Connectez-vous au compte AWS
Configuration du dépôt de code
a. Créez un dépôt Codecommit
b. Synchronisez-le avec le référentiel localConfiguration de l'artefact de code
a. Créez un référentiel
b. Mettez à jour le fichier settings.xml dans le référentiel
c. Mettez à jour le fichier pom.xml dans le référentiel
d. Générez et stockez le jeton dans le store de paramètres SSMConfiguration du SonarCloud
a. Créez un compte SonarCloud
b. Générez et stocker le jeton dans le store de paramètres SSM
c. Créez un projet de build !
d. Mettez à jour le rôle de build de code pour accéder au store de paramètres SSMCréez une notification SNS
Configurez le projet de construction
a. Mettez à jour pom.xml avec la version de l'artefact
b. Créez des variables dans le store de paramètres SSM
c. Créez un projet de build
d. Mettre à jour le rôle Codebuild pour accéder au magasin de paramètres SSMCréez un pipeline
a. Codecommit
b. Test de code
c. Codebuild
d. CodeDeploy sur le compartiment S3Testez le pipeline
Créez Beanstalk et RDS.
Mettre à jour le groupe de sécurité RDS.
Déployez la base de données dans RDS.
Basculez vers la branche cd-aws
Mettez à jour les fichiers settings.xml et pom.xml
Créez une autre tâche de build pour générer un artefact avec le fichier buildspec
Créez une tâche de déploiement sur beanstalk
Téléchargez la capture d'écran sur le compartiment s3
Créez une tâche de build pour les tests logiciels
Mettre à jour le pipeline
Tester le pipeline
Étape 1 : configuration d'AWS CodeCommit
Connectez-vous à votre console de gestion AWS, recherchez le service CodeCommit, sélectionnez le référentiel et créez un référentiel nommé :
Nom : vprofile-code-repo
Créez un utilisateur IAM didié au référentiel CodeCommit , ainsi qu'une stratégie pour le Codecommit qui permet un accès complet au dépôt vprofile-code-repo. Nommez la stratégie vprofile-code-admin-repo-fullaccess.
Pour créer un IAM et attacher la stratégie spécifiquement au référentiel CodeCommit, suivez les étapes ci-dessous :
Naviguez dans IAM > cliquez sur Ajouter un utilisateur
Nom d'utilisateur IAM : vprofile-code-admin
Ensuite créez une stratégie à attacher
service : CodeCommit
nom : vprofile-code-repo
action : all
Nom de la stratégie : vprofile-code-admin-repo-fullaccess


Attachez la stratégie à l'utilisateur IAM.
Après la création de l'utilisateur IAM, nous devrons télécharger la clé publique SSH dans la section Informations d'identification de sécurité de l'utilisateur nouvellement créé. Cela se fait en générant une paire de clé SSH sur la machine locale et en téléchargeant la clé publique ssh sur les informations d'identification de sécurité du rôle IAM. (Clés publiques SSH pour la section AWS CodeCommit)

De plus, nous devons également mettre à jour la configuration. Dans le répertoire .ssh, créez un fichier .ssh/config et ajoutez les informations sur l'hôte ssh.
Host git-codecommit.us-east-1.amazonaws.com
User <SSH_Key_ID_from IAM_user>
IdentityFile ~/.ssh/vpro-codecommit_rsa
Assurez-vous de modifier les autorisations de fichier pour lire et écrire avec cette commande chmod 600 config
Testez que la connexion ssh à CodeCommit est établie et authentifiée avec succès avec la commande ci-dessous.
ssh git-codecommit.us-east-1.amazonaws.com

Ensuite, clonez le référentiel sur votre machine local depuis Github en utilisant l'URL git@github.

Convertissez le référentiel github en référentiel CodeCommit. Pour ce faire, assurez-vous d'être dans le référentiel cloné et exécutez les commandes ci-dessous :
git checkout master
git branch -a | grep -v HEAD | cur -d'/' -f3 | grep -v master > /tmp/branches
for i in `cat /tmp/branches`; do git checkout $i; done
git fetch --tags
git remote rm origin
git remote add origin ssh://git-codecommit.us-east-1.amazonaws.com/v1/repos/vprofile-code-repo
cat .git/config
git push origin --all
git push --tags
Observez maintenant que le référentiel distant est désormais passée de Github à Codecommit. Utilisez la commande cat .git/config pour vérifier.

Transférez le code source vers Codecommit

Vérifiez pour confirmer que le référentiel contient notre code sur Codecommit. Le dépôt est désormais prêt avec toutes les branches présentes sur AWS Codecommit.

Étape 2 : configuration CodeArtifact d'AWS et store de paramètres
Créez un référentiel CodeArtifact pour Maven :
Nom: vprofile-maven-repo
Repo public en amont: maven-central-store
Nom de domaine: visualpath
et cliquez sur créer


Suivez les instructions de connexion fournies dans CodeArtifact pour le vprofile-maven-repo qui vient d'être créé**.** cliquez sur afficher les instructions de connexion, sélectionnez votre type de machine et continuez.

Créez l'utilisateur IAM pour CodeArtifact nommé vprofile-cart-admin , téléchargez la clé d'accès, attachez à cet utilisateur les autorisations AWSCodeArtifactAdminAccess et configurez l'utilisateur sur AWS CLI avec ses informations d'identification.

Exécutez aws configure sur votre machine pour configurer les informations d'identification.
aws configure # entrez vos informations d'identification d'utilisateur IAM
La commande ci-dessous provient des instructions de connexion, copiez exécutez la commande dans votre terminal à l'aide d'AWS CLI.
export CODEARTIFACT_AUTH_TOKEN=`aws codeartifact get-authorization-token --domain visualpath --domain-owner <aws account ID> --region us-east-1 --query authorizationToken --output text`
Utilisez cette commande ci-dessous pour imprimer le jeton sur votre terminal
echo $CODEARTIFACT_AUTH_TOKEN
Procédez à la mise à jour des fichiers pom.xml et settings.xml avec les URL correctes suggérées dans les instructions de connexion.


Ensuite, envoyez les deux fichiers vers CodeCommit.
git add .
git commit -m "message" (add you commit message)
git push origin ci-aws

Étape 3 : Configurer SonarCloud
Créez un compte si vous n'en avez pas déjà un sur la site Web officiel sonarcloud.io
Cliquez sur l'avatar du compte > Mon compte > Sécurité. Donnez un nom au jeton vprofile-sonartoken > cliquez sur générer.

Ensuite, nous créons un projet, cliquez sur le signe + dans le coin supérieur droit de la page > Analyser le projet > Créer un projet manuellement. Notez ci-dessous les informations qui seront utilisées dans notre travail de construction.
Remarque : Créez votre organisation unique et votre clé de projet, mais n'oubliez pas de les conserver en toute sécurité.
Organisation : Name-projects
Clé du projet : Name-vprofile-repo
URL sonarcloud : sonarcloud.io
jeton généré : <>
Étape 4 : AWS Systems Manager Parameter Store pour SonarCloud
Créez des paramètres avec les variables ci-dessous:
CODEARTIFACT_TOKEN Type:SecureString Value: (value of echo $CODEARTIFACT_AUTH_TOKEN)
HOST Value: https://sonarcloud.io type: string
ORGANIZATION Value:Name-projects type: string
PROJECT Value: Name-vprofile-repo type: string
SONARTOKEN Value: vprofile-sonartoken geenrated token SecureString

Étape 5 : AWS CodeBuild pour l'analyse du code SonarQube
Naviguez dans CodeBuild sur votre console de gestion AWS et cliquez sur Créer un projet de build.
ProjectName: Vprofile-Build
Source: CodeCommit
Branch: ci-aws
Environment: Ubuntu
runtime: standard:5.0
select New service role: codebuild009-Vprofile-Build-service-role
Insert buildspec content from directory aws-files/sonar_buildspec.yml, cat its content and past in the insert build command tab
under Logs > GroupName: vprofile-buildlogs
StreamName: sonarbuildjob
Assurez-vous que les sections paramètres du fichier sonar_buildspec.yml sont mises à jour avec les noms exacts donnés dans le store de paramètres SSM.

Cliquez sur Modifier > environnement et copiez le nom du rôle affiché et cliquez sur Annuler pour ajouter une politique au rôle de service créé pour ce projet Build

Accédez à IAM > cliquez sur Rôles > collez le rôle dans la barre de recherche pour trouver le rôle copié à partir de notre projet de build, le rôle devrait apparaître, cliquez dessus et modifiez pour attacher la stratégie.

Choisissez le service ( System Manager ), Dans le niveau d'accès Liste cochez la case**Describeparameter

Également dans le niveau d'accès Lecture, sélectionnez les cases de paramètres comme indiqué ci-dessous.

Vérifiez et donnez un nom à votre stratégie « vprofile-sonarparameteraccess » , puis cliquez sur Créer une stratégie.

Attachez la stratégie que vous venez de créer au rôle de projet CodeBuild.
Maintenant que CodeBuild dispose de l'autorisation appropriée, procédez à la création du projet en cliquant sur Démarrer la génération.

Une fois la construction terminée, vérifiez les résultats publiés dans SonarCloud.

Étape 6 : Configurer le projet de construction pour l'artefact
Sur votre console AWS, revenez à CodeBuild, puis cliquez sur Créer un projet de build. Encore une fois, les étapes sont similaires à celles précédemment vues lors de la création de build pour l'analyse du code avec DonarCloud.
Name: vprofile-CI-Pipeline
SourceProvider: Codecommit
branch: ci-aws
Change detection options: CloudWatch events
Build Provider: CodeBuild
ProjectName: vprofile-Build-Artifact
BuildType: single build
Deploy provider: Amazon S3
Bucket name: vprofile98-build-artifact
object name: pipeline-artifact
Après avoir créé le projet de build, vous devrez mettre à jour la nouvelle stratégie de rôle de service et pour ce faire, suivez les étapes ci-dessous :
Cliquez sur Génération > Projet de génération > Vprofile-Build-Artifact. Copiez le nom du rôle de service (voir la capture d'écran ci-dessous)

Ensuite, accédez à IAM > sélectionnez les rôles > recherchez le rôle de service que nous venons de copier > Cliquez dessus > cliquez sur Ajouter des autorisations > cliquez sur l'option attacher des stratégies

Recherchez ensuite et utilisez la stratégie utilisée pour le paramètre sonaraccess créé à la précédente étape. Sélectionnez-le et attachez-le au rôle de service. Cela devrait activer le niveau d'accès à la liste et les autorisations de niveau d'accès en lecture nécessaires pour créer notre Build. (reportez-vous à l'étape 5 pour voir le niveau d'accès complet en lecture et les autorisations des paramètres d'accès en liste)

Avec la politique mise à jour, il est temps de construire notre projet. Revenez à votre CodeBuild, sélectionnez le projet Vprofile-Build-Artifact et cliquez sur Démarrer la génération.

Étape 7 : configurer CodePipeline et notification SNS
Dans votre console AWS, accédez au service SNS et créez une notification SNS. Ensuite, créer un abonnement à une adresse mail valide.
SNS Topic Name: vprofile-pipeline-notification
Topic Type: Standard
subcription protocol: email

Une fois inscrit avec l'e-mail fourni, accédez à votre boîte de réception et confirmez l'abonnement aux notifications.

La prochaine étape consiste à créer CodePipeline avec les détails ci-dessous
Name: vprofile-CI-Pipeline
SourceProvider: Codecommit
branch: ci-aws
Change detection options: CloudWatch events
Build Provider: CodeBuild
ProjectName: vprofile-Build-Aetifact
BuildType: single build
Deploy provider: Amazon S3
Bucket name: vprofile98-build-artifact
object name: pipeline-artifact
Lorsque le pipeline est en cours de création, arrêtez le pipeline et ajoutez une étape de test à votre pipeline en cliquant sur ajouter une étape après l'étape source, nommez-la Test et saisissez les informations ci-dessous.
Action Name: Sonar-Code-Analysis
Action Provider: AWS CodeBuild
input aritfact: SourceArtifact
Project Name Vprofile-Build
Build Type: Select the Single Build

Ajoutez une autre étape après l'étape de Build, nommez-la Deploy et utilisez les informations ci-dessous.
Action Name: Deploy-To-S3
Action provider: Amazom s3
Region: Same region of codebuild
input artifact: BuilArtifact
Deployment Path: pipeline-artifact (this is the folder name created in your s3 bucket for the pipeline)
check the Extract file before deploy option

Assurez-vous d'avoir enregistré le pipeline après avoir ajouté les étapes de test et de déploiement.
L'étape suivante consiste à configurer les notifications. Accédez aux paramètre dans CodePipeline > cliquez sur l’option de notification > les paramètres de règles de notification.

Étape 8 : Tester le CodePipeline
Cliquez sur Publier les modifications et le pipeline devrait commencer à s'exécuter. suivez et assurez-vous que le pipeline s'est exécuté avec succès.

Vous devez vérifier que le pipeline est correctement configuré pour déclencher une tâche lorsque les modifications sont validées. Apportez une modification à n'importe quel code ou fichier README.md, ajoutez et validez les modifications dans la branche source et observez qu'un nouveau job est déclenché. Si cela se produit, votre pipeline est correctement configuré et prêt à passer à l’étape suivante.
Étape 9 : Créer un environnement Elastic Beanstalk
Configurez un environnement à l’aide d’un exemple d’application.
Name: vprofile-app
Plateform: Tomcat
Platform branch: Tomcat 8.5
Capacity: LoadBalanced
Min: 2
Max: 4
Keypair : Choose existing key-pair usedin previous steps

Étape 10 : Créer une base de données RDS MySQL
Créez un service RDS en utilisant les informations ci-dessous.
Remarque : N'oubliez pas de noter le mot de passe (vous le trouverez dans [Afficher les détails des informations d'identification]. Il sera utilisé plus tard lors de la configuration de votre base de données.
Engine: MySQL
version: 5.7
Template: use the Free-Tier
DB Identifier: vprofile-cicd-mysql
credentials: admin
Auto generate password (will take note of pwd once RDS is created)
DB instance class: db.t2.micro
Create new SecGrp Named: vprofile-cicd-rds-mysql-sg
In Additional Configurations: initial db name "accounts"

Étape 11 : Mettre à jour le groupe de sécurité RDS
Accédez aux instances Beanstalk créées et copiez son ID de groupe de sécurité. Procédez à la mise à jour des règles entrantes du groupe de sécurité RDS pour autoriser l'accès aux instances Beanstalk sur le port 3306.

Étape 12 : Déployer la base de données dans RDS. (initialisation de la base de données)
connectez vous à l'une des instances beanstalk et installez le client MySQL dans cette instance pour pouvoir se connecter à RDS. Installez également git pour cloner notre code source et nos scripts afin de créer un schéma dans notre base de données. Exécutez les commandes ci-dessous et assurez-vous de mettre à jour vos informations d'identification en conséquence pour le nom d'utilisateur, le mot de passe et le point de terminaison RDS.
sudo -i
yum install mysql git -y
mysql -h <RDS_endpoint> -u <RDS_username> -p<RDS_password>
show databases;
git clone https://github.com/Adutoby/vprofile-project-all.git
cd vprofileproject-all/
git checkout cd-aws
cd src/main/resources
mysql -h <RDS_endpoint> -u <RDS_username> -p<RDS_password> accounts < db_backup.sql
mysql -h <RDS_endpoint> -u <RDS_username> -p<RDS_password>
use accounts;
show tables;



Mise à jour de la surveillance de l'état :
Revenez à Elastic Beanstalk sur votre console AWS, dans l'environnement de votre projet, cliquez sur Configuration > modifiez la section Trafic et mise à l'échelle de l'instance, en particulier type d'équilibreur de charge > Cliquez sur Processus, et mettez à jour le chemin de vérification de l'état avec /login . Enregistrez et appliquez les modifications.


Étape 13 : Mettre à jour les scripts pom.xml & settings.xml
Revenez à CodeCommit et accédez à la branche cd-aws. Mettez à jour les fichiers pom.xml et settings.xml comme nous l'avons fait plus haut dans le projet dans la branche ci-aws et validez les modifications.
Dans le pom.xml, ajoutez l'URL correcte à partir des étapes de connexion de votre artefact de code :
<repository>
<id>codeartifact</id>
<name>codeartifact</name>
<url>https://visualpath-<awsaccountid>.d.codeartifact.us-east-1.amazonaws.com/maven/maven-central-store/</url>
</repository>
Également dans le fichier settings.xml, mettez à jour l'URL à partir de code artefact de (Remarque: assurez-vous de copier à partir des étapes de connexion et de mettre à jour l'URL en fonction de votre compte)
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<servers>
<server>
<id>codeartifact</id>
<username>aws</username>
<password>${env.CODEARTIFACT_AUTH_TOKEN}</password>
</server>
</servers>
<profiles>
<profile>
<id>default</id>
<repositories>
<repository>
<id>codeartifact</id>
<url>https://visualpath-<awsaccountid>.d.codeartifact.us-east-1.amazonaws.com/maven/vprofile-maven-repo/</url>
</repository>
</repositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>default</activeProfile>
</activeProfiles>
<mirrors>
<mirror>
<id>codeartifact</id>
<name>visualpath-vprofile-maven-repo</name>
<url>https://visualpath-<awsaccountid>.d.codeartifact.us-east-1.amazonaws.com/maven/vprofile-maven-repo/</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
</settings>
Étape 14 : configuration Build
Accédez à Codebuild et modifiez le code source des tâches de build précédentes Vprofile-Build et Vprofile-Build-Artifact de ci-aws à cd-aws puisque nous avons l'intention de construire à partir de la branche cd-aws. Cela déclenchera notre travail à partir de la nouvelle branchbranche cd-aws.e qui est la
Cliquez sur le projet de construction > cliquez sur le projet Vprofile-Build > cliquez sur modifier puis sur source > changez la branche source en cd-aws > cliquez sur mettre à jour les modifications. Répétez la même chose pour la branche source de Vprofile-Build-Artifact.

Créer un projet de construction BuildAndRelease
Créez un nouveau projet de build pour déployer les artefacts sur Elastic Beanstalk. Utilisez les détails ci-dessous:
Name: Vprofile-BuildAndRelease
Repo: CodeCommit
Repository: vprofile-code-repo
branch: cd-aws
In the Environment
Managed image: Ubuntu
select Standard
Image 5.0
Use existing role from previous Build project which has access to SSM Parameter Store
Buildspec: Insert build commands and switch to editor.
(From source code copy the spec file under `aws-files/buildAndRelease_buildspec.yml`)
LogGroup: vprofile-cicd-logs
Streamname: BuildAndReleaseJob
Ensuite, nous devons créer 3 nouveaux paramètres d'environnement qui seront utilisés dans le fichier BuilAndRelease_buildspec.yml dans le store de paramètres SSM. Voir ci-dessous. Si vous rencontrez une erreur avec le jeton d'artefact, régénérez le.
RDS-Endpoint: use String
RDSUSER: Use String
RDSPASS: use SecureString as this is the DB password.

Il est temps de lancer notre projet.

Notre projet de construction s'est exécuté avec succès !
Créez une tâche de build pour les tests logiciels.
De retour dans le projet de construction, nous créerons un autre projet qui exécutera nos scripts d'automatisation Selenium et stockera les artefacts dans le compartiment S3. Tout d’abord, nous devrons créer le bucket S3.
Name: vprofile-cicd-testoutput-rd (you need to have a unique name for your S3 bucket)
Region: You bucket must be in same region where you create your pipeline
Une fois le compartiment créé, nous créerons un nouveau projet de construction pour les tests d'automatisation Selenium en utilisant les détails ci-dessous :
Name: SoftwareTesting
Repo: CodeCommit
branch: seleniumAutoScripts
in the Environment section:
Operating systen: Windows Server 2019
Runtime: Base
Image: 1.0
Use existing role from previous Build project which has access to SSM Parameter Store
Insert build commands:
From source code we will get spec file under `aws-files/win_buildspec.yml`.
Update url part to your Elastic Beanstalk URL.
Artifacts:
Type: S3
Bucketname: vprofile-cicd-testoutput-toby
Enable semantic versioning
Artifcats packaging: zip
LogGroup: vprofile-cicd-logs
Streamname:
Étape 15 : Créer un pipeline
Créez un CodePipeline avec le nom vprofile-cicd-pipeline. utilisez les détails ci-dessous pour le configurer :
Pipeline name: vprofile-cicd-pipeline
Source provider: CodeCommit
Repository name: vprofile-code-repo
Branch name: cd-aws
select Amazon CloudWatch Events
select CodePipeline default
Build
Build Provider: CodeBuild
Project Name: Vprofile-BuildAndRelease
Build type: Single Build
Deploy
Deploy provider: Beanstalk
Application name: vprofile-app
Environment name: vprofile-app-env
click on next and create pipeline
Arrêtez le pipeline une fois qu'il est lancé et modifiez-le pour ajouter d'autres étapes.
Après l'étape Source, ajoutez l'étape CodeAnalysis en utilisant les détails ci-dessous :
Name: CodeAnalysis
Action provider: CodeBuild
Input artifacts: SourceArtifact
Project name: Vprofile-Build
Build type: single build
Ajoutez une deuxième étape également appelée étape CodeAnalysis pour créer et stocker les artefacts :
Name: BuildAndStore
Action provider: CodeBuild
Input artifacts: SourceArtifact
Project name: Vprofile-Build-artifact
OutputArtifact: BuildArtifact
Ajoutez ensuite une autre après l’étape BuildAndStore appelée étape DeployTos3. Cette étape déploiera l'artefact sur le compartiment S3 :
Name: DeployToS3
Action provider: Amazon S3
Input artifacts: BuildArtifact
Bucket name: vprofile98-build-artifact
check the Extract file before deploy box
Modifiez les artefacts de sortie des étapes Build et Deploy. Remplacez le nom de l'artefact de sortie par BuildArtifactToBeanStalk .
Modifiez à nouveau l'étape de déploiement, remplacez InputArtifact par BuildArtifactToBeanStalk.
Enfin, ajoutez après l’étape Deploy une étape pour tester l'application. Utilisez les détails ci-dessous:
Name: Software Testing
Action provider: CodeBuild
Input artifacts: SourceArtifact
ProjectName: SoftwareTesting
Enregistrez et appliquer la modification. Le CodePipeline devrait démarrer automatiquement.
Étape 16 : Notification SNS
Sélectionnez le pipeline > Cliquez sur Notifier > Cliquez sur Gérer la notification. Créez une nouvelle notification et enregistrez.
vprofile-aws-cicd-pipeline-notification
Select all
Notification Topic: use same topic from CI pipeline
Étape 17 : Valider et tester
Le pipeline s'est exécuté avec succès.

Revenez à votre environnement Elastic Beanstalk et récupérez le domaine ou le point de terminaison, collez-le dans un navigateur et vous devriez voir votre site Web opérationnel.
Si vous disposez de plusieurs instances, vous devrez activer la persistance de session. vous le trouverez en modifiant la section Trafic d'instance et mise à l'échelle dans la configuration, en particulier Type d'équilibreur de charge > Cliquez sur Processus > Action > modifier, puis recherchez les sessions, > activez la persistance de session en cochant la case. Assurez-vous de suivre ces étapes si vous avez plus d'une instance définie comme instance minimale dans vos configurations d'équilibrage de charge.

Nom d'utilisateur : admin_vp
Mot de passe : admin_vp

Félicitation !!! Vous avez arrivez à bout du projet.





