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

推薦する

QRコードは急速に成長しています: 派手なものからO2Oまで

QRコードは国内で急速に普及し始めており、ネットユーザーの使用率が大幅に増加している(写真提供:テン...

locvps: 10周年、全品20%オフ、トップアップ用無料キャッシュ、9か国と地域の13のデータセンターにVPSを配布

locvpsは2017年10月10日にサービスを開始し、今年で10年目を迎えました。同年、米国で1つ...

モバイル インターネット レポート 2019: 11 億 3,600 万人の既存ユーザーがもたらすリスクとチャンス!

1. 2019年上半期の中国のモバイルインターネットの発展の概観1. 全体的な経済状況は改善していま...

ハイブリッドクラウドについて:パブリッククラウドとプライベートクラウドを1+1>2にする方法

[51CTO.com オリジナル記事] クラウド コンピューティングは 2016 年に驚異的な成長を...

Baidu による Sina Weibo リアルタイム検索の開始は、インターネットにどのような変化をもたらすでしょうか?

Admin5によると、3月1日夜、百度は新浪微博のコンテンツを統合したリアルタイム検索サービスを開始...

layerae: 米国 VPS、西海岸「スポケーン」、年間 15 ドル、AMD Ryzen 7950X+DDR5+NVMe 高性能 VPS、5 つのバックアップ付き

ドバイに登録されているlayer.aeは2017年に設立され、主にB2Bソーシャルメディア管理、イン...

2020年、クラウドコンピューティングが新たな戦場を開く

アプリケーションは2日で開発でき、需要は来春まで予定されています。プログラマーの生活のように聞こえま...

SEOをうまく行うための6つのステップの標準プロセス

SEO に取り組んでいる友人の多くは、SEO をうまく行うためにどのような点に注意を払う必要があるか...

電子商取引管理措置導入に関する意見:個人オンラインストアは一時的に免税される可能性がある

新浪科技報、9月13日午後、国家工商行政管理総局は昨日、「オンライン商品取引及び関連サービスの管理に...

知湖が「壁」を破壊

知乎がどのように商業化を達成できるかは、常に外部の世界にとって大きな関心事となっている。最近、知乎は...

ステーショングループの運営の成功または失敗に影響を与える、見落とされがちな5つの重要な要素

サイトクラスターの誕生当初の大きな衝撃に比べ、サイトクラスターの発展は安定期に入り、サイトクラスター...

誰もがオンラインでお金を稼ぐのに適しているわけではなく、ウェブサイトを構築するのはそれほど簡単ではありません - A5 Webmaster Network

この記事は、私自身のネットで稼ぐ経験をまとめたものです。よく考えてみると、ネットで稼ぐということに気...

クラウド コンピューティングの経済性: 可用性、パフォーマンス、コストの 3 つの鍵を握る

数多くの新興プラットフォームが、最も魅力的な IT 機能を可能な限り低コストで提供しているため、企業...

Baidu のリッチメディア広告プラットフォームについて簡単に説明します: Hong Media

インターネットの初期の段階では、インターネット広告は画像やテキストを使用して表示されることがほとんど...