継続的インテグレーションパイプラインにおけるアーティファクト管理 (Nexus)

継続的インテグレーションパイプラインにおけるアーティファクト管理 (Nexus)

[[428249]]

このワークフローでは、Maven と CI サーバーを使用して、コンパイルされた成果物を構築、保存、管理できます。

Nexus は、成果物を保存および取得するリポジトリ マネージャーです。これにより、構築した成果物をプライベートで安全なリポジトリにホストできるようになります。デフォルトでは、開発者は開発時に、一般的なプロジェクトのコンパイルおよび構築ツールである maven、ant、gradle などのパッケージ管理ツールを使用します。これらのツールはコマンドライン ツールとして理解できます。依存パッケージ自体は保存されませんが、現在のプロジェクト ビルドに必要なパッケージをパブリック ネットワーク上の公式リポジトリからダウンロードします。 (イントラネットの速度はパブリックネットワークよりも速く、パイプライン構築の速度に直接影響します)

商品のアップロード

Nexus UI ページ

Nexus UI は、製品のアップロード機能を提供します。 「アップロード」に移動し、アップロードするターゲット リポジトリを選択します。最後に、倉庫内の荷物の座標と荷物情報を入力します。

Mavenツールの使用

通常、アップロードする前にウェアハウスを認証する必要があるため、まず Maven 構成ファイル (settings.xml) にウェアハウスの認証情報を入力する必要があります。

  1. <サーバー>
  2. <id>マイメイヴン</id>
  3. <ユーザー名>管理者</ユーザー名>
  4. <パスワード>admin123</パスワード>
  5. </サーバー>

mvn deploy コマンドを使用して、成果物をアップロードして公開します。コマンドのパラメータと形式は次のとおりです。

  1. mvn deploy:デプロイファイル
  2. -DgroupId=xxxxxx pom 内のグループ ID
  3. -DartifactId=xxxxxx pom のアーティファクト ID
  4. -Dversion=xxxxxx pom 内のバージョン番号
  5. -Dpackaging=xxxxxx pom でのパッケージング方法
  6. -Dfile=xxxxxx ローカルファイル
  7. -Durl=xxxxxx 倉庫 URL
  8. -DrepositoryId=xxxxxx は、setting.xml (認証) に対応します。

パッケージにすでに pom.xml ファイルの説明がある場合は、pom.xml ファイルを通じて直接アップロードできます。

  1. mvn deploy:デプロイファイル \
  2. -DgeneratePom=\
  3. -DリポジトリID=mymaven \
  4. -Durl=http://192.168.1.200:8081/リポジトリ/mymavenrepo \
  5. -DpomFile=pom.xml \
  6. -Dfile=target/demo-0.0.1-SNAPSHOT.jar

Jenkinsプラグインの使用

Nexus Artifact Uploader プラグインをインストールし、スニペット ジェネレーターを使用して DSL を生成します。

  1. nexusArtifactUploader アーティファクト: [[artifactId: 'devopstest' ,
  2. 分類子: ''
  3. ファイル: 'target/demo-0.0.1-SNAPSHOT.jar'
  4. タイプ: 'jar' ]],
  5. 資格情報ID: '1de05a13-197c-4a72-8c6a-cd330fc45559'
  6. グループID: 'com.jenkins'
  7. nexusUrl: '192.168.1.200:8081'
  8. nexusバージョン: 'nexus3'
  9. プロトコル: 'http'
  10. リポジトリ: 'mymavenrepo'
  11. バージョン: '1.1.2'  

拡張: 製品を頻繁にアップロードする必要がある場合は、最終的に関数にカプセル化して簡単に再利用できるようにします。

  1. //NexusUploadByPlugin( 'devops-test' 'target/demo-0.0.1-SNAPSHOT.jar' 'jar' 'com.jenkins' '1.1.2' )
  2.  
  3. def NexusUploadByPlugin(アーティファクトID、ファイル、タイプ、グループID、バージョン){
  4. nexusArtifactUploader アーティファクト: [[artifactId: アーティファクトId,
  5. 分類子: ''
  6. ファイル: ファイル、
  7. タイプ: タイプ]],
  8. 資格情報ID: '1de05a13-197c-4a72-8c6a-cd330fc45559'
  9. グループID: グループID、
  10. nexusUrl: '192.168.1.200:8081'
  11. nexusバージョン: 'nexus3'
  12. プロトコル: 'http'
  13. リポジトリ: 'mymavenrepo'
  14. バージョン: バージョン
  15. }

Nexus APIの使用

デバッグ後、次のファイルアップロード インターフェイスが整理されます。

  1. ##PNG
  2. curl -X POST "http://192.168.1.200:8081/service/rest/v1/components?repository=myrepo" \
  3. -H "受け入れる: application/json" \
  4. -H "コンテンツタイプ: multipart/form-data" \
  5. -F "raw.directory=/tmp" \
  6. -F "raw.asset1=@default title_custom px_2020-10-01-0.png;type=image/png" \
  7. -F "raw.asset1.filename=デフォルト title_custom px_2020-10-01-0.png"  
  8.  
  9.  
  10. ## tar.gz と ZIP
  11. curl -X POST "http://192.168.1.200:8081/service/rest/v1/components?repository=myrepo" \
  12. -H "受け入れる: application/json" \
  13. -H "コンテンツタイプ: multipart/form-data" \
  14. -F "raw.directory=/tmp" \
  15. -F "[email protected];タイプ=application/x-gzip" \
  16. -F "raw.asset1.filename=aaa.tar.gz"  
  17.  
  18.  
  19. curl -X POST "http://192.168.1.200:8081/service/rest/v1/components?repository=myrepo" -H "accept: application/json" -H "Content-Type: multipart/form-data" -F "raw.directory=/tmp" -F "raw.asset1=@waypoint_0.1.5_linux_amd64.zip;type=application/x-gzip" -F "raw.asset1.filename=waypoint_0.1.5_linux_amd64.zip"  
  20.  
  21.  
  22. ## Jarファイル
  23. curl -X POST "http://192.168.1.200:8081/service/rest/v1/components?repository=myrepo" \
  24. -H "受け入れる: application/json" \
  25. -H "コンテンツタイプ: multipart/form-data" \
  26. -F "raw.directory=/tmp" \
  27. -F "[email protected];type=application/java-archive" \
  28. -F "raw.asset1.filename=aopalliance-1.0.jar"  

製品をダウンロード

カール

  1. curl -u admin:admin123 http://192.168.1.200:8081/repository/anyops/com/anyops/a
  2. nyops-devops-service/1.1.1/anyops-devops-service-1.1.1.jar -o anyops-devops-service-1.1.1.jar

Wget

  1. wget --http-user=admin --http-passwd=admin123 http://192.168.1.200:8081/repos  
  2. itory/anyops/com/anyops/anyops-devops-service/1.1.1/anyops-devops-service-1.1.1.jar

例: 製品アップロードパイプラインの構成

実際、Nexus UI ページを参照して、Jenkins を使用して製品パッケージをアップロードするためのパイプライン ジョブを実行できます。

  • srcUrl はソース パッケージのソース コード/パッケージ リポジトリを参照します。
  • branchName ソース パッケージ リポジトリのブランチ。
  • groupId、artifactid、version Maven タイプ ウェアハウスの座標。
  • タイプパッケージタイプ;

この Jenkinsfile には、コードのダウンロード、コードのコンパイル、ユニット テスト、製品のアップロードという 4 つの段階が含まれています。

  1. @ライブラリ( "mylib@main" ) _
  2. org.devops.* をインポートします。
  3.  
  4. def checkout = 新しい Checkout()
  5. デフビルド = 新しいビルド()
  6. def unittest = 新しい UnitTest()
  7. 定義ソナー = 新しいソナー()
  8.  
  9. パイプライン
  10. エージェント { ラベル"build" }
  11.  
  12. オプション {
  13. デフォルトチェックアウトをスキップするtrue  
  14. }
  15.  
  16.  
  17. ステージ{
  18. ステージ( "チェックアウト" ){
  19. ステップ{
  20. スクリプト {
  21. println( "GetCode" )
  22. checkout.GetCode( "${env.srcUrl}" , "${env.branchName}" )
  23. }
  24. }
  25. }
  26.  
  27. ステージ( "ビルド" ){
  28. ステップ{
  29. スクリプト{
  30. println( "ビルド" )
  31. sh "mvn クリーンパッケージ "  
  32. }
  33. }
  34. }
  35.  
  36. ステージ( "UnitTest" ){
  37. ステップ{
  38. スクリプト{
  39. unittest.CodeTest( "${env.buildTool}" )
  40. }
  41. }
  42. }
  43.  
  44. ステージ( "アップロード" ){
  45. ステップ{
  46. スクリプト{
  47. NexusUploadByPlugin( "${env.artifactId}" ,
  48. 'target/demo-0.0.1-SNAPSHOT.jar'
  49. "${env.type}"
  50. "${env.groupId}"
  51. "${env.version}" )
  52. }
  53. }
  54. }
  55. }
  56. }
  57.  
  58. //NexusUploadByPlugin( 'devops-test' 'target/demo-0.0.1-SNAPSHOT.jar' 'jar' 'com.jenkins' '1.1.2' )
  59.  
  60. def NexusUploadByPlugin(アーティファクトID、ファイル、タイプ、グループID、バージョン){
  61. nexusArtifactUploader アーティファクト: [[artifactId: アーティファクトId,
  62. 分類子: ''
  63. ファイル: ファイル、
  64. タイプ: タイプ]],
  65. 資格情報ID: '1de05a13-197c-4a72-8c6a-cd330fc45559'
  66. グループID: グループID、
  67. nexusUrl: '192.168.1.200:8081'
  68. nexusバージョン: 'nexus3'
  69. プロトコル: 'http'
  70. リポジトリ: 'mymavenrepo'
  71. バージョン: バージョン
  72. }

歴史とNexus関連のトピック

この記事はWeChatのパブリックアカウント「DevOps Cloud Academy」から転載したものです。

<<:  インタビューシリーズ再開:JVM編

>>:  リフト&シフト後のクラウド コンピューティングの効率を最適化する 10 のステップ

推薦する

百度の独創性は実はこんな感じ

Baidu の Spark Original Program が開始されて以来、多くのウェブマスター...

コミュニティユーザーのニーズの変化は、マイクロコミュニティの写真共有活動から見ることができます。

最近、自主メディアパーソンのハオ・シャオリャン氏は、康盛マイクロコミュニティ(Discuz!チームが...

ウェブサイトのホームページを最適化する方法

ホームページの最適化の重要性は疑う余地がありません。ホームページの重要性が高いだけでなく、ホームペー...

Java バックエンド テクノロジー: Java 仮想マシン スタックの探索

Java に精通している学生は、JVM がスタックベースであることを知っておく必要があります。しかし...

友好的なリンクを共有したり交換したりする際に注意すべきいくつかの側面(I)

コンテンツは王様、外部リンクは女王様です。この文はウェブマスター業界で最もよく知られています。多くの...

TortoiseCloud Xen VPS-512M メモリ/30G ハードディスク/G ポート/20M 無制限

Tortoise は 2009 年に設立され、1 人の人物によって所有されているわけではありません。...

ユーザー運営:コミュニティ運営の3つの柱

1 年間のコミュニティ運営に基づいて、私はコミュニティ運営において最も重要な 3 つの要素を「三頭の...

#11.11# 恒創科技:香港クラウドサーバー(OpenStack)40%オフ、香港300G高防御サーバー40%~60%オフ

恒創科技の11.11(独身の日)プロモーションが始まりました:(1)香港クラウドサーバー、CN2+B...

ホスティング - 10月はすべてのVPSが30%オフ/9年目のワンマンブランド

Hostigationは、ボスが1人しかおらず、ほぼ10年間VPSを運営しているという、特異なホステ...

コンテナ クラウド アーキテクチャ | Kubernetes ネットワーク モデルを理解する

Kubernetes ネットワークを使用すると、k8s ネットワーク内での通信を構成できます。フラッ...

天猫ダブル11の余波:一部の家庭用家具製品の返品率が100%を超える

数日前、電子商取引は羨ましい売上高で脚光を浴びていた。11月11日、天猫ショッピングモールの家庭用家...

知乎の電子商取引の戦場

つい最近10月14日、知乎は杭州で「良質なコンテンツは良質なビジネス」をテーマにした電子商取引業界カ...

初のインターネット独占禁止法訴訟:360対テンセント独占訴訟が明日審理される

新浪科技新聞11月25日朝のニュースによると、最高人民法院は11月26日午前9時に最高裁判所第一法院...

降格したウェブサイトを素早く復元する方法の例の共有

実際、このような記事を書く主な目的は、過去 1 か月間の Web サイト構築の経験をまとめることです...