質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.37%

jenkinsで新規JOBを作成してwebアプリケーションがデプロイできない

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 722

score 11

事象

  • jenkinsで新規JOBを作成してwebアプリケーションをデプロイできない

事象に対して予想していること

  • jenkinsで展開したワークスペースでmvnを実行できる権限がない
  • buildが終わる前に後続のdocker tag~~~が実行されている

事象箇所

Building in workspace /var/lib/jenkins/jobs/xxxxx/workspace
 > git rev-parse --is-inside-work-tree # timeout=10
[workspace] $ mvn -f /var/lib/jenkins/jobs/xxxxx/workspace/pom.xml -Dmaven.test.skip=true clean package docker:build
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] Building xxxxx  0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- docker-maven-plugin:1.0.0:tag (tag-image) @ APIプロジェクト ---
[INFO] Using authentication suppliers: [ConfigFileRegistryAuthSupplier]
[INFO] Creating tag xxxxxx.dkr.ecr.ap-xxxx.amazonaws.com/xxxxx/api from xxxxx/api
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.117 s
[INFO] Finished at: 2019-08-26T08:54:38Z
[INFO] Final Memory: 56M/398M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal com.spotify:docker-maven-plugin:1.0.0:tag (tag-image) on project APIプロジェクト: Exception caught: Image not found: xxxxx/api: Request error: POST unix://localhost:80/images/xxxxx/api/tag?repo=xxxx.dkr.ecr.ap-xxxx.amazonaws.com%2Fxxxxx%2Fapi: 404, body: {"message":"No such image: xxxxx/api:latest"}: HTTP 404 Not Found -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
Build step 'Invoke top-level Maven targets' marked build as failure
Finished: FAILURE

実現したいこと

  • dockerコンテナをjenkinsのJOB経由で開発環境にデプロイしたい

技術まわり

  • AWS-ECS,ECR
  • docker
  • java
  • spring boot
  • jenkins
  • mvn

参考ソース

POM.xml ※Spring-boot回りの記述は省略しました
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.brainlab</groupId>
    <artifactId>xxxxx-api</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>xxxxx api</name>
    <description>API for xxxx </description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.8.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <distributionManagement>
        <repository>
            <id>ixor</id>
            <name>ixor-releases</name>
            <url>http://repo.ixor.be/nexus/content/repositories/ixor-releases</url>
        </repository>
        <snapshotRepository>
            <id>ixor</id>
            <name>ixor-snapshots</name>
            <url>http://repo.ixor.be/nexus/content/repositories/ixor-snapshots</url>
        </snapshotRepository>
    </distributionManagement>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <configuration>
                            <target>
                                <delete dir="${project.basedir}/docker/api/config" />
                                <mkdir dir="${project.build.directory}/config" />
                                <mkdir dir="${project.basedir}/docker/api/config" />
                                <copy todir="${project.build.directory}/config">
                                    <fileset dir="${project.basedir}/config/dev/">
                                        <include name="*.yml" />
                                    </fileset>
                                    <fileset dir="${project.basedir}/config/prod/">
                                        <include name="*.yml" />
                                    </fileset>
                                    <fileset dir="${project.basedir}/config/stage/">
                                        <include name="*.yml" />
                                    </fileset>
                                    <fileset dir="${project.basedir}/config/">
                                        <include name="*.yml" />
                                    </fileset>
                                </copy>
                                <copy todir="${project.basedir}/docker/api/config">
                                    <fileset dir="${project.build.directory}/config" />
                                </copy>
                            </target>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <imageName>xxxxx/api</imageName>
                    <baseImage>tesla/base-java</baseImage>
                    <dockerDirectory>docker/api</dockerDirectory>
                    <!-- copy the service's jar file from target into the root directory of the image -->
                    <resources>
                        <resource>
                            <targetPath>/opt/api/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
                <executions>
                    <execution>
                        <id>tag-image</id>
                        <phase>package</phase>
                        <goals>
                            <goal>tag</goal>
                        </goals>
                        <configuration>
                            <image>xxxxx/api</image>
                            <newName>xxxxxx.dkr.ecr.xxxxx.amazonaws.com/xxxxx/api</newName>
                        </configuration>
                    </execution>
                    <execution>
                        <id>push-image</id>
                        <phase>install</phase>
                        <goals>
                            <goal>push</goal>
                        </goals>
                        <configuration>
                            <imageName>xxxxx.dkr.ecr.xxxxx.amazonaws.com/xxxxx/api</imageName>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
ビルド定義です

#!/bin/bash -xe


BASE_DIR="${WORKSPACE}/"

cd "${BASE_DIR}"

# mvn clean package docker:build -Dmaven.test.skip=true

docker tag aaaaa/api:latest xxxxx.dkr.ecr.ap-xxxxxx.amazonaws.com/aaaaa/api:${VERSION}


$(aws ecr get-login --no-include-email --region xx)

docker push xxx.dkr.ecr.ap-xxx.amazonaws.com/xxx:${VERSION}

docker rmi -f xxx.dkr.ecr.ap-xxx.amazonaws.com/xxx:${VERSION}


~~ ecs-cli compose -f docker/docker-compose.yml --project-name xxx service up --cluster xxx --deployment-max-percent 200 --deployment-min-healthy-percent 0
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

事象原因

  • docker image(docker:build)を作成する前にタグ付け(package)をしようとするが対象のイメージがないため、エラーとなっていた。

改修理由

+ 初回構築はうまくいってこのままでも動くが
jenkinsのビルドでdocker tag もpushもしてるので代替している定義があるのでpom.xmlとしては不要なので削除しておいたほうがいいと指摘を貰った為

                <executions>
                    <execution>
                        <id>tag-image</id>
                        <phase>package</phase>
                        <goals>
                            <goal>tag</goal>
                        </goals>
                        <configuration>
                            <image>xxx</image>
                            <newName>xx.dkr.ecr.ap-xx.amazonaws.com/xx</newName>
                        </configuration>
                    </execution>
                    <execution>
                        <id>push-image</id>
                        <phase>install</phase>
                        <goals>
                            <goal>push</goal>
                        </goals>
                        <configuration>
                            <imageName>xx.dkr.ecr.ap-xx.amazonaws.com/xx</imageName>
                        </configuration>
                    </execution>
                </executions>

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る