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

推薦する

ランキングは良いのにトラフィックがない?正しい SEO の方向性を選択しましたか?

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています最近、36...

起業家が語る共同購入の内幕:大手ウェブサイトの参入で好景気は終わりを迎えつつある

2010年3月、わずか数万元で起業し、短期間で大金を稼ぐことができるビジネスモデルが突如登場した。わ...

iQIYIの沈む市場

2019年6月、 iQiyiの会員数は1億人を突破し、中国の有料動画市場は正式に「10億人レベル」の...

分散アーキテクチャでは、従来のデータベースの運用と保守はどのような変化に直面するでしょうか?

[[319472]]分散アーキテクチャは近年最もホットなトピックかもしれません。この記事では、集中型...

ブランドマーケティングプロモーション計画を準備するには?

ブランディング計画を書くことは、非常に大規模な計画を説明しているように感じられて難しいように思えるか...

インターネット携帯電話は、チャネルよりもマーケティングに重点を置いています。現実的に導入するのが難しく、モデルに革新が必要です。

モバイルインターネットの急速な発展に伴い、多くのインターネット企業が大手携帯電話ハードウェアメーカー...

SEO初心者のためのブログ外部リンク運用方法

多くの初心者の SEO の友人は、このタイトルを見ると、ブログの外部リンクについて長々と話す必要はな...

無料のオープンソース Web サイト構築プログラムが登場しました。 12の強力で使いやすい

前回の記事では、最も人気のある、絶対に失敗しないセルフサービス Web サイト構築プラットフォーム ...

Android チャンネルで APP アプリケーションを有料プロモーションするための 3 つのヒント

1. 本物のユーザーを見つけたいなら、アプリストアにお金を払おう●利点:実際のユーザーが多く、信頼性...

顧客の視点からソフトコピーを書く

Baidu Green Radish Algorithm 2.0 が登場して以来、多くのウェブサイト...

ライセンス獲得競争は徐々に沈静化し、サードパーティ決済会社は人員不足を懸念している。

サードパーティ決済事業者間のライセンス獲得競争は徐々に沈静化してきているようだ。ライセンス取得の有無...

インターネット上のゴミは至る所にあります。コミュニティはどのようにしてゴミによる被害を防ぐことができるでしょうか?

ネット荒らしはインターネット環境の一部です。実際、ネット荒らしとネット水軍には、しばしば一定の類似点...

ホームページ最適化の詳細な手順

これまで、ホームページの質の悪さが原因でユーザーが離脱してしまったウェブサイトは数え切れないほどあり...

1gbits: 月額 15 ドル、世界中の 20 のデータセンター、サーバー + VPS、1Gbps の帯域幅、無制限のトラフィック

1gbits は、公式にはリトアニアの商人であることが示されており、ドメイン名は 年に登録され、最後...

Douyu Liveは本当に停滞しているのか?

ゲームライブストリーミング分野での長年にわたる深い開拓を経て、2大ゲームライブストリーミングプラット...