[JAVA] J'ai créé Code Pipeline avec AWS CDK.

Bon travail. @naokiur. Nous sommes impatients de travailler avec vous en 2020 et cette année également.

Après avoir connu AWS CDK "Comment créez-vous cela avec un AWS CDK ...?" Je pense souvent comme ça.

Cette fois, un simple environnement CI / CD Construit avec AWS CDK (Java).

environnement

Pipeline du code du bâtiment

Diagramme

スクリーンショット 2020-01-05 21.01.32.png

Obtenez la source, Conversion ZIP, il suffit de stocker dans S3, Parce que j'utilise Github pour les affaires Pas CodeCommit J'ai fait de Github la source.

Construction du pipeline de code

Pour créer CodePipeline De manière générale, j'ai pu le construire en créant ce qui suit.

Classe de pipeline

Littéralement, c'est une classe qui représente CodePipeline. build () cette classe Par cdk deploy J'ai pu créer un pipeline de code sur AWS.

final Pipeline saveToS3Pipeline = Pipeline.Builder
        .create(this, "saveSourceToS3")
        .pipelineName("saveSourceToS3")
        .stages(new ArrayList<>(Arrays.asList(source, build, deploy)))
        .build();

Pas limité à cela Pour générer des ressources AWS hoge.Builder.create (classe Stack, id). ~ Omis ~ .build () Il semble qu'il puisse être construit avec Je pense que c'est facile à comprendre.

CodePipeline nécessite au moins deux Stages, donc Vous devez spécifier une liste avec au moins deux éléments dans stages (). Si non spécifié, une erreur s'est produite.

Classe de scène

Il s'agit de la classe Stage à définir dans CodePipeline. Cette fois (bien qu'il n'y ait pas beaucoup de contenu) Vous avez créé les trois étapes: source, construction et déploiement.

final StageProps source = StageProps.builder()
        .stageName("DownloadSourceFromGithub")
        .actions(new ArrayList<>(Arrays.asList(github)))
        .build();

final StageProps build = StageProps.builder()
        .stageName("BuildSource")
        .actions(new ArrayList<>(Arrays.asList(codeBuild)))
        .build();

final StageProps deploy = StageProps.builder()
        .stageName("SaveSourceToS3")
        .actions(new ArrayList<>(Arrays.asList(s3)))
        .build();

Il n'est pas écrit comme hoge.Builder.create (Stack class, id). ~ Omis ~ .build (). Stage n'est pas un service AWS, mais un élément de CodePipeline, En effet, il n'apparaît pas comme une «ressource» dans la pile CloudFormation. (* Ceci est une opinion individuelle)

Il semble que Stage puisse avoir plusieurs actions.

Classe d'action

Une classe d'action à exécuter dans l'étape. Créez des actions pour chaque étape. Cette fois (car il n'y a pas beaucoup de contenu) Un pour chaque étape.

final Action github = GitHubSourceAction.Builder
        .create()
        .actionName("DownloadFromGithub")
        .oauthToken(githubToken)
        .branch(branchName)
        .repo(repoName)
        .owner(ownerName)
        .output(sourceArtifact)
        .build();

final Action codeBuild = CodeBuildAction.Builder
        .create()
        .actionName("BuildSource")
        .project(codeBuildProject)
        .input(sourceArtifact)
        .outputs(new ArrayList<>(Arrays.asList(buildArtifact)))
        .build();

final Action s3 = S3DeployAction.Builder
        .create()
        .bucket(deployBucket)
        .actionName("DeploySourceToS3")
        .input(buildArtifact)
        .build();

Dans le package codepipeline.actions, Puisqu'il y a une classe selon l'action à exécuter Générez la classe requise. (Actuellement, cela ne semble pas être tout ce que CodePipeline peut faire ...)

Classe GitHubSourceAction

Action d'utiliser Github comme source. C'est facile à comprendre. Configurez un référentiel ou une branche.

Vous pouvez également spécifier un OAuthToken auquel vous connecter Utilisez la classe SecretValue.

Classe SecretValue

Cette classe sert à obtenir des informations secrètes. Obtenir des informations de Secret dans le magasin de paramètres System Manager Il semble que vous puissiez obtenir des informations auprès de Secret Manager.

Cette fois, définissez à l'avance le jeton Github dans Secret Manager, J'ai essayé de l'obtenir.

final SecretsManagerSecretOptions secretOptions = SecretsManagerSecretOptions.builder()
        .jsonField("github-token")
        .build();
final SecretValue githubToken = SecretValue.secretsManager(
        "naokiur-secret",
        secretOptions
);

Classe CodeBuildAction

Une classe qui génère CodeBuild pour CodePipeline. Cette fois, j'ai créé buildspec.yml dans le référentiel.

Classe S3DeployAction

Une classe pour le déploiement sur S3.

Classe d'artefact

Je suis sorti dans la classe Action Aussi un CodePipeline, Cette classe est spécifiée pour les entrées / sorties de chaque action. Maintenant, vous avez l'image de la remise.

Créez les deux Spécifié pour l'entrée / la sortie de chaque action.

final Artifact sourceArtifact = Artifact.artifact("Source");
final Artifact buildArtifact = Artifact.artifact("Build");

Vous avez maintenant une version complète! !! スクリーンショット 2020-01-08 13.30.35.png

Où j'étais accro

Je l'ai utilisé comme référence

Recommended Posts

J'ai créé Code Pipeline avec AWS CDK.
J'ai créé des fonctions d'étape avec AWS CDK.
J'ai créé une interface graphique avec Swing
J'ai construit un environnement de rails avec docker et mysql, mais j'étais malade
J'ai essayé de jouer un peu avec BottomNavigationView ①
J'ai fait une mort risquée avec Ruby
J'ai créé une application Janken avec kotlin
J'ai créé une application Janken avec Android
J'ai essayé de créer un portefeuille avec AWS, Docker, CircleCI, Laravel [avec lien de référence]
J'ai créé un environnement Java EE sur AWS et essayé d'exécuter une application Web
J'ai écrit un fichier Jenkins avec Declarative Pipeline (Checkstyle, Findbugs, PMD, CPD, etc.)
04. J'ai fait un frontal avec SpringBoot + Thymeleaf
J'ai créé un robot LINE avec Rails + heroku
Essayez de déboguer un programme Java avec VS Code
J'ai essayé de casser le bloc avec java (1)
J'ai fait un portfolio avec Ruby On Rails
Créer un environnement de développement Java avec VS Code
J'ai écrit un code de test (Junit & mockit) pour le code qui appelle l'API AWS (Java)
Soumettre une tâche à AWS Batch avec Java (Eclipse)
J'ai lu le code lisible, alors prends note
[Ruby] Générer un code QR concaténé avec rqrcode (Knowledge)
Comment supprimer un objet new_record construit avec Rails
[Ruby] J'ai fait un robot avec de l'anémone et du nokogiri.
Je souhaite surveiller un fichier spécifique avec WatchService
Pourquoi pouvez-vous développer Java avec Visual Studio Code?
[Ruby] Générer un code QR concaténé avec rqrcode (pratique)
J'ai essayé OCR de traiter un fichier PDF avec Java
[Débutant] Je suis tombé sur le lancement d'un projet avec Rails6
J'ai écrit un test avec Spring Boot + JUnit 5 maintenant