[JAVA] Ich habe Code Pipeline mit AWS CDK erstellt.

Gute Arbeit. @naokiur. Wir freuen uns darauf, 2020 und auch in diesem Jahr mit Ihnen zusammenzuarbeiten.

Nach Kenntnis von AWS CDK "Wie erstellt man das mit einem AWS CDK ...?" Ich denke oft so.

Diesmal eine einfache CI / CD-Umgebung Erstellt mit AWS CDK (Java).

Umgebung

Building Code Pipeline

Diagramm

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

Holen Sie sich die Quelle, ZIP-Konvertierung, einfach in S3 speichern, Weil ich Github geschäftlich benutze Nicht CodeCommit Ich habe Github zur Quelle gemacht.

Code Pipeline Aufbau

So erstellen Sie CodePipeline Im Großen und Ganzen konnte ich es bauen, indem ich Folgendes erstellte.

Pipeline-Klasse

Es ist buchstäblich eine Klasse, die CodePipeline darstellt. build () diese Klasse Mit cdk deploy Ich konnte eine Code-Pipeline auf AWS erstellen.

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

Um AWS-Ressourcen zu generieren, scheint es oft möglich zu sein, mit hoge.Builder.create (Stapelklasse, ID) zu erstellen. ~ Ausgelassen ~ .build (), daher halte ich es für leicht verständlich. Ich werde. CodePipeline erfordert mindestens zwei "Stufen", daher müssen Sie eine Liste mit mindestens zwei Elementen in "Stufen ()" angeben. Wenn nicht angegeben, ist ein Fehler aufgetreten.

Bühnenklasse

Dies ist die Stage-Klasse, die in CodePipeline festgelegt werden soll. Diesmal (obwohl es nicht viel Inhalt gibt) Sie haben alle drei Phasen erstellt: Quelle, Erstellen und Bereitstellen.

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();

Es ist nicht als hoge.Builder.create (Stapelklasse, ID) geschrieben. ~ Ausgelassen ~ .build (). Stage ist kein AWS-Service, sondern ein Element von CodePipeline. Dies liegt daran, dass es nicht als "Ressource" im CloudFormation-Stapel angezeigt wird. (* Dies ist eine individuelle Meinung)

Es scheint, dass Stage mehrere Aktionen haben kann.

Aktionsklasse

Eine Aktionsklasse, die in Stage ausgeführt werden soll. Erstellen Sie Aktionen für jede Stufe. Diesmal (weil es nicht viel Inhalt gibt) Eine für jede Stufe.

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();

Im Paket codepipeline.actions Da es eine Klasse gemäß der auszuführenden Aktion gibt, Generieren Sie die gewünschte Klasse. (Derzeit scheint es nicht alles zu sein, was CodePipeline kann ...)

GitHubSourceAction-Klasse

Aktion zur Verwendung von Github als Quelle. Es ist leicht zu verstehen. Richten Sie ein Repository oder einen Zweig ein.

Sie können auch ein OAuth-Token für die Verbindung angeben. Verwenden Sie die SecretValue-Klasse.

SecretValue-Klasse

Diese Klasse dient dazu, geheime Informationen zu erhalten. Informationen von Secret im System Manager-Parameterspeicher abrufen Es scheint, dass Sie Informationen vom Secret Manager erhalten können.

Setzen Sie diesmal das Github-Token im Voraus in Secret Manager. Ich habe versucht, es zu bekommen.

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

CodeBuildAction-Klasse

Eine Klasse, die CodeBuild für CodePipeline erstellt. Dieses Mal habe ich buildspec.yml im Repository erstellt.

S3DeployAction-Klasse

Eine Klasse für die Bereitstellung in S3.

Artefaktklasse

Ich bin in der Action-Klasse herausgekommen Auch eine CodePipeline, Diese Klasse wird für die Eingabe / Ausgabe jeder Aktion angegeben. Jetzt haben Sie das Bild der Übergabe.

Erstellen Sie die folgenden zwei Spezifiziert für die Eingabe / Ausgabe jeder Aktion.

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

Jetzt hast du einen kompletten Build! !! スクリーンショット 2020-01-08 13.30.35.png

Wo ich süchtig war

Ich habe es als Referenz verwendet

Recommended Posts

Ich habe Code Pipeline mit AWS CDK erstellt.
Ich habe Step-Funktionen mit AWS CDK erstellt.
Ich habe mit Swing eine GUI erstellt
Ich habe eine Rails-Umgebung mit Docker und MySQL erstellt, aber ich war krank
Ich habe versucht, ein wenig mit BottomNavigationView zu spielen ①
Ich habe mit Ruby einen riskanten Würfel gemacht
Ich habe eine Janken App mit Kotlin gemacht
Ich habe eine Janken App mit Android gemacht
Ich habe versucht, ein Portfolio mit AWS, Docker, CircleCI, Laravel [mit Referenzlink] zu erstellen.
Ich habe eine Java EE-Umgebung auf AWS erstellt und versucht, eine Webanwendung auszuführen
Ich habe eine Jenkins-Datei mit deklarativer Pipeline geschrieben (Checkstyle, Findbugs, PMD, CPD usw.)
04. Ich habe mit SpringBoot + Thymeleaf ein Frontend gemacht
Ich habe einen LINE Bot mit Rails + Heroku gemacht
Versuchen Sie, ein Java-Programm mit VS-Code zu debuggen
Ich habe versucht, den Block mit Java zu brechen (1)
Ich habe mit Ruby On Rails ein Portfolio erstellt
Erstellen Sie eine Java-Entwicklungsumgebung mit VS Code
Ich habe einen Testcode (Junit & mockit) für den Code geschrieben, der die AWS-API (Java) aufruft.
Senden Sie einen Job an AWS Batch mit Java (Eclipse)
Ich habe den lesbaren Code gelesen, machen Sie sich also eine Notiz
[Ruby] Generiere verketteten QR-Code mit rqrcode (Knowledge)
So löschen Sie ein mit Rails erstelltes new_record-Objekt
[Ruby] Ich habe einen Crawler mit Anemone und Nokogiri gemacht.
Ich möchte eine bestimmte Datei mit WatchService überwachen
Warum können Sie Java mit Visual Studio Code entwickeln?
[Ruby] Generiere verketteten QR-Code mit rqrcode (Übung)
Ich habe versucht, mit OCR eine PDF-Datei mit Java zu verarbeiten
[Anfänger] Ich bin auf ein Projekt mit Rails6 gestoßen
Ich habe jetzt einen Test mit Spring Boot + JUnit 5 geschrieben