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

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

ただいまの
回答率

88.18%

Nexus(snapshotリポジトリ)へのPublish方法

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,486

d_tutuz

score 654

実現したいこと

jar を Nexus の snapshot リポジトリへ publish したい

実現方法をご存知であれば、ご教示いただきたいです m(_ _)m

詳細

Jenkins Pipeline から Gradle を用いた Java プロジェクトのアーティファクト(jar)を Nexus3 のアーティファクトリポジトリに Publish しようと考えています。(ただし要件上
build.gradle の maven-publish プラグインは用いずに...。 maven-publish を用いて gradle publish とする方法は snapshot リポジトリへ publish できることを確認しています)

Publish は Jenkins のジョブから実行しようと考えています。

snapshot リポジトリ に Publish したいのですが、いろいろ調査/実装してもできませんでした。

調査/確認事項

調べたところ、すでに以下のような Jenkins Plugin があるようです。

ただし、どちらのプラグインも snapshot リポジトリへの Publish はサポートされていないようです。(一応試してみましたが、エラーになりました)

また curl を用いて以下のように JenkinsPipeline スクリプトの中で API を Call しても許可されていませんでした。

        sh "curl -v -u admin:admin123 \
            -X POST http://localhost:8081/service/rest/v1/components?repository=maven=snapshots \
            -F maven2.groupId=${groupId} \
            -F maven2.artifactId=${artifactId} \
            -F maven2.version=${version} \
            -F maven2.asset1=build/libs/${artifactId}-${version}.jar \
            -F maven2.asset1.extension=jar \
            -F maven2.asset2=build/libs/${artifactId}-${version}.jar \
            -F maven2.asset2.classifier=javadoc \
            -F maven2.asset2.extension=jar \
            -F maven2.asset3=build/libs/${artifactId}-${version}.jar \
            -F maven2.asset3.classifier=sources \
            -F maven2.asset3.extension=jar"
        }

https://support.sonatype.com/hc/en-us/articles/115006744008-How-can-I-programmatically-upload-files-into-Nexus-3-

curl したときのエラーメッセージは以下です。

* Server auth using Basic with user 'admin'
> POST /service/rest/v1/components?repository=maven-snapshots HTTP/1.1

> Host: localhost:8081

> Authorization: Basic YWRtaW46YWRtaW4xMjM=

> User-Agent: curl/7.55.1

> Accept: */*

> Content-Length: 1379

> Expect: 100-continue

> Content-Type: multipart/form-data; boundary=------------------------bea51339dc9456fe

> 

< HTTP/1.1 100 Continue

} [1379 bytes data]
< HTTP/1.1 400 Bad Request

< Date: Sat, 13 Jul 2019 11:18:22 GMT

< Server: Nexus/3.17.0-01 (OSS)

< X-Content-Type-Options: nosniff

< Vary: Accept

< Content-Type: application/vnd.siesta-validation-errors-v1+json

< X-Siesta-FaultId: 2281dcfa-6583-456a-9970-318d54dd431b

< Content-Length: 93

* HTTP error before end of send, stop sending
< 

{ [93 bytes data]

100  1472  100    93  100  1379     93   1379  0:00:01 --:--:--  0:00:01  2944
* Closing connection 0
[{"id":"*","message":"Upload to snapshot repositories not supported, use the maven client."}][Pipeline] error

curl した際に得られた Upload to snapshot repositories not supported, use the maven client. というエラーメッセージにあるように、maven client (Gradle の Maven Publish Plugin や Maven の Apache Maven Deploy Plugin) を用いる必要があるのでしょうか?

宜しくおねがいします。

  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • asahina1979

    2019/07/13 22:42

    サポートしていませんってエラーがでてるの出てるの貴方のお使いの環境ではスナップショットを利用できません。
    URLがループバックドメインなのでサービスのポートできりかえればいいんじゃねの

    キャンセル

  • d_tutuz

    2019/07/13 23:27 編集

    追記ありがとうございます。

    NexusのURLが `localhost:8081` に問題ありそうということでしょうか...?意味が理解できておらず、もう少し詳細にご説明いただけると助かります。

    キャンセル

回答 1

checkベストアンサー

0

エラーメッセージから推察された通りで、http://maven.apache.org/plugins/maven-deploy-plugin/index.html + maven3の環境であれば、snapshot用にタイムスタンプ付きのjarが生成できるようになりました。

As of Maven 3, snapshot artifacts will always be deployed using a timestamped version.

maven-deploy-plugin から実行するのが良いでしょう。

gradle版も可能なようです(未検証)

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/07/15 11:32

    それをつかわない縛りプレイが欲しいらしい。

    キャンセル

  • 2019/07/15 12:26

    A-pZさん、asahina1979さん

    回答ありがとうございます!
    asahina1979さんには意図が正確に伝わらない質問で申し訳ないです。

    A-pZさんから回答いただいたように、Jenkins側に maven3 をインストールして、Apache Maven Deploy Plugin の deploy:deploy-file を用いるのが良さそうと考えました。

    ビルドは Gradle で実施して、デプロイを mvn deploy:deploy-file で実施することで Jenkins から Nexus3 に Publish できること確認できました。

    ----------------------------------------------------------

    sh "mvn deploy:deploy-file \
    -DgroupId=${groupId} \
    -DartifactId=${artifactId} \
    -Dversion=${appVersion} \
    -DgeneratePom=false \
    -Dpackaging=jar \
    -DrepositoryId=nexus-snapshots \
    -Durl=http://admin:admin123@${NEXUS_DOMAIN}/repository/maven-snapshots \
    -Dfile=build/libs/${artifactId}-${appVersion}.jar \
    -DpomFile=build/pom.xml \
    -Djavadoc=build/libs/${artifactId}-${appVersion}-javadoc.jar \
    -Dsources=build/libs/${artifactId}-${appVersion}-sources.jar \
    "

    ----------------------------------------------------------

    キャンセル

  • 2019/07/16 00:58

    d(・ω・Nice work.

    キャンセル

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

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

関連した質問

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