[DOCKER] Construire Java avec Wercker

http://www.wercker.com/

Wercker est un outil de CI basé sur le cloud populaire de nos jours.Il est intuitif et facile à comprendre que CI peut être exécuté sur l'image docker, et je suis personnellement reconnaissant qu'il puisse également fonctionner gratuitement avec le référentiel privé de github. est.

Je l'utilise personnellement dans plusieurs langues, mais j'écrirai ici une série d'étapes pour construire un programme Java sur wercker.

Cas d'utilisation

Ici, l'exemple de configuration réel est décrit en fonction des cas d'utilisation suivants.

Workflows

Cette fois, c'est comme suit.

  1. build
  1. maven
  1. docker (maître uniquement) --Pousser l'image docker vers ECR

image.png

Pipeline: build Comme il s'agit du pipeline par défaut, je le laisse tel quel et envoie juste un petit message. En fait, s'il y a une création de fichier ou une copie requise pour le traitement ultérieur, cela se fera ici.

wercker.yml


box: busybox
build:
  steps:
    - script:
        name: echo
        code: |
          echo " ${WERCKER_GIT_REPOSITORY}"

Pipeline: maven Exécutez maven. maven est spécifié pour box afin que les commandes java et maven puissent être utilisées.

wercker.yml


maven:
  box: maven:3.5.2-jdk-8-alpine
  steps:
    - java/maven:
        goals: clean package
        cache_repo: true
    - java/maven:
        goals: sonar:sonar
        maven_opts: -Dsonar.host.url=${SONAR_URL} -Dsonar.login=${SONAR_LOGIN_KEY}
        cache_repo: true
    - script:
        name: copy to output
        code: |
          cp target/sada4j-*.jar $WERCKER_OUTPUT_DIR/sada4j.jar
  after-steps:
    - slack-notifier:
        url: ${SLACK_WEBHOOK_URL_NOTIFY}
        channel: ${SLACK_ROOM_NOTIFY}
        notify_on: failed
        username: wercker maven notify

Voici un aperçu de ce que vous faites.

Exécution de maven à l'aide de l'étape Java / Maven

L'étape d'exécution de maven est définie à l'avance dans wercker, et si vous spécifiez java / maven pour l'étape lors de l'exécution de maven, l'environnement d'exécution de maven sera construit automatiquement.

Veuillez vous référer aux documents suivants pour plus de détails tels que les options qui peuvent être spécifiées. https://github.com/wercker/step-maven

Utilisation de variables d'environnement

Vous pouvez utiliser des variables d'environnement dans worcker. http://devcenter.wercker.com/docs/environment-variables

Les trois types de niveaux d'environnement suivants peuvent être définis. La portée des paramètres sera ajustée selon les besoins.

Les variables d'environnement prises en charge par wercker en standard sont les suivantes. http://devcenter.wercker.com/docs/environment-variables/available-env-vars

Enregistrement des résultats d'exécution dans $ WERCKER_OUTPUT_DIR

Dans wercker, le processus CI est également effectué sur le conteneur docker, de sorte que les fichiers ne sont généralement pas hérités entre différents pipelines.

Si vous voulez que le fichier soit disponible dans les pipelines suivants, vous devez placer le fichier dans le répertoire spécifié par $ {WERCKER_OUTPUT_DIR}. Dans l'exemple ci-dessus, les fichiers à inclure dans l'image docker sont définis dans $ {WERCKER_OUTPUT_DIR} pour le processus de génération d'image docker suivant.

Notification Slack par étapes ultérieures

Les étapes suivantes vous permettent de définir les étapes qui seront toujours exécutées, que le traitement dans le pipeline fonctionne correctement ou non. Dans l'exemple ci-dessus, l'étape Slack-notifier est utilisée pour notifier Slack.

image.png

Dans le cas de slack-notifier, si vous écrivez notify_on: failed, vous pouvez envoyer une notification uniquement lorsque le processus de l'étape échoue.

Pipeline: docker Poussez l'image docker vers Amazon ECR. Wercker vous permet de pousser n'importe quelle image docker vers le référentiel docker en utilisant l'étape internal / docker-push.

La documentation officielle de Wercker (http://devcenter.wercker.com/docs/containers/pushing-containers) fournit un exemple du référentiel docker suivant:

Voici un exemple de la façon de pousser vers ECR.

wercker.yml


docker:
  box: openjdk:8-jdk-alpine
  steps:
    - internal/docker-push:
        aws-access-key: ${AWS_ACCESS_KEY_ID}
        aws-secret-key: ${AWS_SECRET_ACCESS_KEY}
        aws-region: ${AWS_REGION}
        aws-registry-id: ${AWS_REGISTRY_ID}
        aws-strict-auth: false
        repository: sada4j
        tag: latest
        ports: 8080
        working-dir: ${WERCKER_SOURCE_DIR}
        entrypoint: java -jar sada4j.jar

Histoire à usage général

docker push by wercker ne peut pas décrire la définition de la construction de docker à l'aide de Dockerfile. Une image docker est créée avec les règles suivantes.

--L'image du docker spécifiée comme boîte devient l'image de base

Voir ci-dessous pour plus de détails sur les options que vous pouvez spécifier. http://devcenter.wercker.com/docs/steps/internal-steps#docker-push

Étant donné que les spécifications sont telles que décrites ci-dessus, il est nécessaire de prendre en compte les éléments suivants en fonctionnement.

Histoire spécifique d'Amazon ECR

Si vous souhaitez pousser vers ECR, définissez les valeurs suivantes.

Nous ne voulons pas écrire les informations d'identification directement dans wercker.yml, nous allons donc les définir dans la variable d'environnement wercker.

Vous devriez maintenant être en mesure de créer Java et de le pousser vers le référentiel docker selon votre cas d'utilisation.

Autres conseils

wercker-cli

Ce que je pense que Wercker est extrêmement supérieur aux autres SaaS CI, c'est la richesse des outils qui peuvent être utilisés pour vérifier le fonctionnement dans l'environnement local.

Wercker fournit un outil de ligne de commande appelé wercker-cli, qui vous permet de reproduire et d'exécuter le comportement sur le serveur même dans l'environnement local.

$ wercker build --pipeline maven
--> No Docker host specified, checking: /var/run/docker.sock
--> Executing pipeline
--> Running step: setup environment
Pulling from library/openjdk: latest
Digest: sha256:9745ed74401b23fb845b4eb7ae07ecb7dc2d40bece6bdb089975a20f76766401
Status: Image is up to date for openjdk:latest
--> Copying source to container
--> Running step: wercker-init
--> Running step: maven
02:19:34:  Hello from the Maven Wercker Step
(snip.)

Vous pouvez également faire les mêmes choses que vous pouvez faire avec les API décrites ci-dessous, telles que les instructions de construction sur le serveur Wercker. Pour plus de détails, reportez-vous aux sites suivants et à l'aide sur les commandes. http://www.wercker.com/cli

Actuellement, seules les versions OSX et Linux sont disponibles.

API

Les API suivantes sont fournies. Vous pouvez définir l'application et donner des instructions pour la construction. http://devcenter.wercker.com/docs/api/endpoints

Wercker Source IP

En raison du flux CI / CD, il peut y avoir des cas où Wercker et certains outils internes doivent être combinés et utilisés. Dans ce cas, il est possible de spécifier l'adresse IP source de Wercker et d'autoriser la connexion uniquement pour une IP spécifique.

L'adresse IP source de Wercker est publiée dans le format suivant, donc pour référence. https://s3.amazonaws.com/status.wercker.com/worker_ips/production/public.json

Utilisez l'image docker enregistrée dans ECR dans la boîte

Écrivez comme suit dans la zone spécifiée une partie de wercker.yml.

  box:
    id: <docker image name>
    aws-access-key: ${AWS_ACCESS_KEY_ID}
    aws-secret-key: ${AWS_SECRET_ACCESS_KEY}
    aws-region: ${AWS_REGION}
    repository: <docker image name>
    aws-registry-id: ${AWS_REGISTRY_ID}

Recommended Posts

Construire Java avec Wercker
Créez et testez des applications Java + Gradle avec Wercker
build java vagrant
Application Java CICS-Run - (3) Gestion de build avec Gradle
Application Java CICS-Run - (2) Gestion de build avec Maven
Construire OpenCV avec Java Wrapper sur Ubuntu 18.04
Installez java avec Homebrew
Changer de siège avec Java
Installez Java avec Ansible
Construire Doma1 avec Ant
java construire un triangle
Construction de premier niveau (Java)
Créer un environnement de test E2E avec Selenium (Java)
Changer java avec direnv
En utilisant Gradle avec VSCode, compilez Java → exécutez
Construisez Growai avec Centos7
Téléchargement Java avec Ansible
Raclons avec Java! !!
Construisez bazel avec alpin
Conversion Endian avec JAVA
Créer un environnement de développement Java avec VS Code
Créer un environnement de développement Java avec VS Code sur Mac
Vérifiez la couverture avec Codecov dans la configuration Java + Gradle + Wercker
Créer un environnement de développement de programme Java avec Visual Studio Code
(Java) BDD facile avec Spectrum?
Utiliser des couches Lambda avec Java
Créer un multi-projet Java avec Gradle
Construire GitLab / Mattermost avec DockerForWindows
Configuration Java avec Spring MVC
Expérimentons l'expansion en ligne Java
Créez un VPN softether avec Centos7.
[Template] Connexion MySQL avec Java
Réécrire Java try-catch avec facultatif
Installez Java 7 avec Homebrew (cask)
[Java] Communication JSON avec jackson
Java pour jouer avec Function
Essayez la connexion DB avec Java
Activer Java EE avec NetBeans 9
[Java] JavaConfig avec classe interne statique
Essayez gRPC avec Java, Maven
Exploitons Excel avec Java! !!
Gestion des versions Java avec SDKMAN
Cryptage / décryptage RSA avec Java 8
Trier les chaînes comme une fonction caractéristique avec Java
Orienté objet avec Strike Gundam (java)
[Java] Acquisition de contenu avec HttpCliient
Gestion des versions Java avec jenv
Rationalisez les tests Java avec Spock
Connectez-vous à DB avec Java
Connectez-vous à MySQL 8 avec Java
Erreur lors de la lecture avec java
Utilisation de Mapper avec Java (Spring)
Mémo d'étude Java 2 avec Progate
Premiers pas avec les bases de Java
Construction ninja avec construction différentielle intelligente
Créez AWS Lambda avec Quarkus
Affichage saisonnier avec commutateur Java
Utiliser SpatiaLite avec Java / JDBC