JenkinsとJFrog管道:CI/CDの連携によるソフトウェアのリリ,ス

ソフトウェア開発者はリリ,スを継続して行うと同時に技術を先に進める必要があります。詹金斯の継続的インテグレーション(CI)パイプラインをより新しい最適化されたシステムに移行することは,それほど難しいことではありません。また皆様の企業で現在の作業を完全に中断し,システムを丸ごと入れ替えるような余裕はないでしょう。

私たはci / cdソリュ:ションであるJFrog管道を構築した時に,このことを深く理解していました。そのため,現在の詹金斯パイプラインとJFrog管道パイプラインを容易に接続できるようにしました。

多くの組織と同様に皆様も多くの詹金斯パイプラインを構築するために何百時間もの開発者の時間を費やしてきたかも知れません。これらの詹金斯パイプラインはCIの基本的な部分を継続して実行することができますが,JFrog管道の新しいワークフローに引き渡すことができます。

ここでは詹金斯とJFrog管道の連携を可能にするための方法を見てみましょう。

管道とプラットフォ,ムの違い

管道は“ワンストップDevOps”のためのソリュ,ションを提供するJFrog DevOps平台のエンドエンドのci / cdコンポネントです。ArtifactoryをベースとしたJFrogプラットフォームはア,ティファクトリポジトリバ@ @ナリの配布セキュリティスキャン, ci / cd自動化から組織のソフトウェアデリバリを管理するために必要なすべてを提供します。

皆様のJenkinsパ▪▪プラ▪▪ンは,すでに码头工人などのアーティファクトとビルドをArtifactoryリポジトリにプッシュしている可能性も十分にあるでしょう。これはArtifactoryのユニバ,サルリポジトリ管理が,様々なDevOpsルとの接続を可能にしているからです。そのおかげでArtifactoryはバイナリリポジトリ管理の業界標準として受け入れられるようになりました。

JFrog管道は,JFrog DevOps平台のすべてのルを統合する自動化ルです。詹金斯と同様に,コードからビルド,バイナリ,そして配布に至るまでの各段階でソフトウェアを移動させることができます。しかし,JFrog平台の一部として,Artifactory, Xray,および分布と自然に統合されており,統一したパ,ミッションモデルで管理することができ,きめ細かなアクセス制御が可能です。

管道はエンタープライズ規模で運用も可能であり,すべての管理者とチームに単一のプラットフォームを提供し,何百ものci / cdパ▪▪プラ▪▪ンをサポ,トすることができます。

これらの理由からCIを詹金斯から管道に移行することをお勧めしますが,一度に移行するのは現実的ではないかもしれません。

詹金斯から管道へ

この例では,詹金斯がビルド,ユニットテストを実行し,ステージング码头工人リポジトリにプッシュする去休息アプリケーションを構築しました。次に、JFrog管道が码头工人去アプリケーションをステージングリポジトリからKubernetesクラスタにデプロ@ @します。ここでは谷歌Kubernetes Engine(GKE)を使用します。さらに,DockerレジストリとしてArtifactoryを使用します。これにより,同じビルドを別のリリースレジストリにプッシュすることなく,簡単にリリースへのプロモーションを行うことができます。

この例のコ,ドリポジトリには,去休息アプリケーション,詹金斯パイプラインJenkinsfile,およびJFrog管道s YAMLファeconlルが含まれています。ベストプラクティスでは,パ▪▪プラ▪▪ンの▪▪ンフラストラクチャもこれらのファ▪▪ルで定義されています。

詹金斯パaapl . exeプラaapl . exeン

詹金斯パイプラインは,アプリケーションの初期ビルドとテストを実行し,码头工人コンテナをビルド情報とともにリポジトリにプッシュします。

それでは,詹金斯のパaapl . exeプラaapl . exeンを見てみましょう。以下の詹金斯菲尔の重要なセクションは,发布构建信息帖子ステ,ジです。詹金斯が去アプリケーションイメージをビルドしてテストした後,ビルド情報をArtifactoryに公開します。

阶段{阶段('构建'){步骤{容器('golang'){sh 'go构建'}}阶段('单元测试'){步骤{容器('golang'){sh 'go test ./…-run Unit'}}} stage('Docker Build') {steps {container(' Docker '){sh " Docker Build -t partnership-public-images.jfrog. sh "{}} stage('Docker Push to Repo') {steps{容器('Docker '){script {Docker . io/goci-example:latest ."withRegistry(“https://partnership-public-images.jfrog。Io ', 'gociexamplerepo') {sh "docker推送partnership-public-images.jfrog。Io /goci-example:latest"}}}}}stage('发布构建信息'){环境{JFROG_CLI_OFFER_CONFIG = false}步骤{容器('jfrog-cli-go'){withCredentials([usernamePassword(credentialsId: 'gociexamplerepo', passwordVariable: 'APIKEY', usernamvariable: 'USER')]) {sh "jfrog rt bce $JOB_NAME $BUILD_NUMBER" sh "jfrog rt bag $JOB_NAME $BUILD_NUMBER" sh "jfrog rt bad $JOB_NAME $BUILD_NUMBER \"go。*\"" sh "jfrog rt bp——build-url=https://jenkins.openshiftk8s.com/——url=https://partnership.jfrog。io/artifactory——user=$ user——apikey=$ apikey $JOB_NAME $BUILD_NUMBER"}}}}

次に帖子ステージでは、管道REST APIのwebhookでビルド情報を送り,JFrog管道をトリガーします。次に,このWebhookがJFrog管道でどのように設定されているかについて説明します。

后{成功{脚本{shcurl -XPOST -H \"授权:基本amVmabcdefM25rMW5z=\" \"https://partnership-pipelines-api.jfrog。io/v1/projectIntegrations/17/hook\" -d '{\"buildName\":\"$JOB_NAME\",\"buildNumber\":\"$BUILD_NUMBER\",\"buildInfoResourceName\":\"jenkinsBuildInfo\"}' -H \"Content-Type: application/json\""}}}

詹金斯とJFrog管道を接続するには,まず管道デプロイメントで詹金斯(Jenkins)ンテグレ,ションを作成する必要があります(ここではjenkins_openshiftk8s_comと呼びます)。このUIは上記のcurl webhookコマンドを提供し,詹金斯パイプラインがJFrog管道をトリガーできるようにします。

JFrog管道

JFrog管道は,詹金斯パイプラインによってプッシュされたビルド情報を介してトリガーされ,残りのデプロイメントとステージングアクションを実行してリリースします。

JFrog管道は,パ▪▪プラ▪▪ンのステップをyamlで定義します。このファ▪▪ルの最初のセクションはリソ▪▪スです。これらはパプランで使用されるデタのソスとデスティネションです。この例では,GitHubリポジトリ,jenkins_openshiftk8s_com詹金斯インテグレーションに接続されたBuildInfoリソ,ス,リリ,スを促進するための最終的なBuildInfoリソ,スを定義しています。BuildInfoリソ,スはビルドのメタデ,タを保存するために使用します。

2022世界杯阿根廷预选赛赛程资源:—名称:gociexampleGithubRepo类型:GitRepo配置:gitProvider: myGithub路径:myaccount/ goi -example- name: jenkins_buildinfo type: BuildInfo configuration: sourceArtifactory: MyArtifactory buildName: goci-example/master buildNumber: 1 externalCI: jenkins_openshiftk8s_com- name: releaseBuildInfo type: BuildInfo configuration: sourceArtifactory: MyArtifactory buildName: goci-example/master buildNumber: 1

最初のステップは,jenkinsBuildInfoを通して詹金斯のトリガ,を受け取るBashステップです。

—name: start_from_jenkins type: Bash配置:input2022世界杯阿根廷预选赛赛程Resources:—name: jenkinsBuildInfoexecute: onExecute: - echo 'Jenkins作业触发管道'

すべてがうまくいったら,Go RESTアプリケションをステジング環境にデプロします。ここではgkeクラスタを使用します。このクラスタは,gociexampleClusterCredsという名前のKubernetesンテグレションを通して参照します。kubeconfigデ,タを集成オブジェクトとして提供することで,任意のKubernetesクラスタと統合することができます。

HelmDeployステップを使用して,リポジトリのHelmChartディレクトリを使用してアプリケーションをデプロイします。

—name: deploy_staging type: HelmDeploy configuration: inputSteps:—name: start_from_jenkins inputRes2022世界杯阿根廷预选赛赛程ources:—name: gociexampleGithubRepo trigger: false integrations:—name: gociexampleClusterCreds releaseName: goci-example chartPath: chart/goci-example/

次に,Go RESTアプリケションが利用可能になるのを待Bashステップがあります。

- name: wait_for_server type: Bash configuration: inputSteps:—name: deploy_staging execution: onExecute:—timeout 60 Bash -c 'while [["$(curl -s -o /dev/null -w " %{http_code} " https://goci-example.35.238.177.209.xip.io)"= "200"]];做睡眠5;做的||真的

去RESTアプリケ,ションがステ,ジング環境で起動したら,ステ,ジングテストを実行します。

—name: staging_test type: Bash configuration: inputSteps:—name: wait_for_server inputRes2022世界杯阿根廷预选赛赛程ources:—name: gociexampleGithubRepo trigger: false runtime: type: image image: auto: language: go versions:—“1.13”environmentVariables: STAGING_URL:“https://goci-example.35.238.177.209.xip.”io" execute: onExecute: - cd ../dependencyState/2022世界杯阿根廷预选赛赛程resources/gociexampleGithubRepo - go mod download - go test ./test -run Staging

最後に,ステ,ジングテストをパスした場合は,ビルドをリリ,スに向けてプロモ,ションします。

—name: promote_release type: PromoteBuild配置:targetRepository: partnership-public-images.jfrog。io状态:已发布注释:已通过登台测试。input2022世界杯阿根廷预选赛赛程Resources:—name: jenkinsBuildInfo outputResources:—name: releaseBuildInfo

JFrog管道をさらに拡張して,エンドシステムやJFrog边缘システムにソフトウェアを公開するために,JFrog分布を使用して継続的デリバリー(CD)を実現することができます。ただし,これにいては今後のブログ記事に譲ることにします。

DevOpsへの道を続ける

ご覧のように,詹金斯パイプラインをJFrog管道に接続するのは簡単なプロセスです。必要に応じて,JFrog pipelineからJenkinsパaapl .プラaapl .ンをトリガ.することもできます。

ツールのパッチワークからソフトウェアデリバリーツールチェーンを開発するのは,時間がかかり,イライラすることがあります。JFrog平台のような統一されたツールチェーンを使用することで,ツールではなくソフトウェアに集中することができます。しかし,既存のツールがある場合は,それらを簡単にJFrogプラットフォームに接続して,その機能を活用することができます。