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

推薦する

デジタル変革市場の価値は7,160億ドルです。イノベーションは自動車業界に何をもたらすのでしょうか?

2018年に入り、世界、特に中国はデジタル変革にとって重要な年に入りました。マイクロソフトと市場調査...

中国の SaaS は終焉を迎えたのか?

最近、中国のいくつかのスターSaaS企業が「困難な状況」にあると報告している。総合労務管理サービスプ...

nodeserv-年間15ドル/512MBメモリ/50GBハードディスク/1TBトラフィック/フロリダ

nodeserv は 2009 年に設立され、比較的運営歴が短いです。openvz に基づく VPS...

ウェブサイトの最適化について、SEO 最適化を簡単にする (I)

私はウェブサイトの最適化に1年近く携わり、この間多くのSEOの依頼を引き受けてきました。残念ながら、...

nexusbytes: ロサンゼルスのハイエンド VPS、限定プロモーション、月額 6.4 ドル、KVM/4G メモリ/2 コア/40g SSD+80g HDD/4T トラフィック

流行の影響か、Nexusbytesのロサンゼルスデータセンターには大量の未使用サーバーリソースがある...

大容量ハードディスク VPS: Ftpit - 年間 35 ドル / メモリ 1g / コア 3 個 / ハードディスク 100g / トラフィック 2T / G ポート / ロサンゼルス

大容量ハードドライブ搭載のVPS、Ftpitをご紹介します。大容量ハードドライブ搭載のbackups...

ChinaJoy がやって来ました! 360 が「中国 PC ゲーム調査レポート」を発表

明日、ChinaJoy 2018が上海で開幕します。中国のゲーム業界で最も注目されるイベントであるC...

質の高い空間を選ぶ3つの方法

良いスペースを選ぶことは、ウェブマスターやSEO担当者にとって非常に重要です。なぜなら、高品質のスペ...

AWS のコンピューティングイノベーションにより、顧客に 400 のインスタンスを提供

[51CTO.com からのオリジナル記事] コンピューティング能力はクラウド サービスの核となる基...

12306 のチケット予約体験からオンライン マーケティングを考察

12306のウェブサイトがアップグレードされ公開された後、全国の人々から批判を受けました。火星人と同...

URL露出率とBaiduへの掲載の関係性に関する研究

「研究」という言葉を聞くと、おそらくこの事件を真剣に受け止めて厳密に考えることが頭に浮かぶでしょうが...

ハイブリッドクラウドは、今後しばらくの間、最適なクラウド戦略となるだろう

[51CTO.comからのオリジナル記事] 「インターネット+」という国家戦略の推進により、ますます...

ホリデープロモーションのトピックを素早く構築し、まずはコピーライティングからインスピレーションを得ましょう

フェスティバルの前夜になると、あらゆるeコマース企業が準備を始め、フェスティバルのプロモーション用の...

COVID-19がクラウドコンピューティングを加速させる6つの理由

Nutanix の副社長兼最高営業責任者である Andrew Brinded 氏は、クラウド コンピ...