継続的インテグレーションパイプラインにおけるアーティファクト管理 (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 のステップ

推薦する

インターネット製品のインタラクティブレビューをより効果的に実施する方法

インタラクティブプロトタイプは、製品開発プロセスにおける重要な出力です。製品のプレゼンテーション形式...

クラウド使用の実際のコストをご存知ですか?

クラウド サービスの成長に伴い、監視すべき費用はこれまで以上に増えています。なぜお金を使うのですか?...

クラウドロックインの懸念はあなたが思っているほど一般的ではない

ベンダー ロックインは長い間クラウド コンピューティングにとって悪夢でしたが、企業にとって以前ほど大...

北京工商局がオンライン虚偽広告5件を摘発、アマゾンが名指し

「オクスターウサギの毛皮」と称していたが、実際は「アクリル繊維」だった。「三級病院」と称していたが、...

マーベルとアマゾン ウェブ サービスが協力し、クラウドファーストのチップ設計を実現

データ インフラストラクチャ半導体ソリューションのリーダーである Marvell Technolog...

Tencent Cloud: 2018年12月、月額8.25元から、北京、上海、広州、深セン+香港/シンガポール/日本

テンセントクラウドは12月にクラウドサーバーに関する多くの有益な情報を共有しました。国内クラウドサー...

SaaSについて話すのはこれで最後だといいのですが

もうSaaSについて話したくありませんでした。私たちはそれについて5、6年話し合ってきました。私は翔...

#BlackWeek5# interserver-50% オフ/仮想ホスト/無制限のウェブサイト構築/SS サポート

17年の歴史を持つInterserver.netも今年のブラックフライデーのプロモーションに参加し、...

Zhihu がシリーズ B で 2,000 万ドルの資金調達を実施: 600 万人のユーザーを抱える知識共有コミュニティの構築方法

国内のQ&Aサイト「知乎」は最近、SAIF Partnersが主導する新たな資金調達ラウンド...

2019年第1四半期の世界モバイル市場レポート!

Sensor Tower Store Intelligence のデータによると、2019 年第 1...

クラウドコンピューティングのコンプライアンス問題に関する誤解と現実を合理的に考察

ハッカーが米国の3大信用機関の1つであるEquifaxのシステムを攻撃し、1億4,300万人の個人デ...

オンライン公開講座のウェブサイトは海外で盛んだが、中国ではほとんどない

近年、Khan Academy や Coursera といった 2 つの有名な Web サイトなど、...

主要産業がマルチクラウドの導入を推進する方法

パンデミックが拡大するにつれ、あらゆる業界の組織が、従業員にリモートワークをさせてコストを削減すると...

ウェブサイトを検索エンジンの検索結果の上位3位にランクインさせる

ウェブサイトの最適化、特にウェブサイトのキーワードランキングの最適化として、検索エンジンで上位 3 ...

電子商取引市場調査の観点から百度有為の必然的な失敗を考察する

電子商取引市場調査の観点から百度有為の必然的な失敗を考察するBaidu Youa は、日常生活の消費...