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

ソフトウェア開発者はリリスを継続して行うと同時に技術を先に進める必要があります。詹金斯の継続的インテグレーション(CI)パイプラインをより新しい最適化されたシステムに移行することは,それほど難しいことではありません。また皆様の企業で現在の作業を完全に中断し,システムを丸ごと入れ替えるような余裕はないでしょう。
私たはci / cdソリュションであるJFrog pipelineを構築した時に,このことを深く理解していました。そのため,現在の詹金斯パイプラインとJFrog管道パイプラインを容易に接続できるようにしました。
多くの組織と同様に皆様も多くの詹金斯パイプラインを構築するために何百時間もの開発者の時間を費やしてきたかも知れません。これらの詹金斯パイプラインはCIの基本的な部分を継続して実行することができますが,JFrog管道の新しいワークフローに引き渡すことができます。
ここでは詹金斯とJFrog管道の連携を可能にするための方法を見てみましょう。
管道とプラットフォムの違い
管道は"ワンストップDevOps "のためのソリュションを提供するJFrog DevOps平台のエンドエンドのci / cdコンポネントです。ArtifactoryをベースとしたJFrogプラットフォームはアティファクトリポジトリ、バ邮箱ナリの配布、セキュリティスキャン, ci / cd自動化から組織のソフトウェアデリバリを管理するために必要なすべてを提供します。
皆様の詹金斯パンは,すでに去、码头工人、舵などのアーティファクトとビルドをArtifactoryリポジトリにプッシュしている可能性も十分にあるでしょう。これはArtifactoryのユニバサルリポジトリ管理が,様々なDevOpsルとの接続を可能にしているからです。そのおかげでArtifactoryはバイナリリポジトリ管理の業界標準として受け入れられるようになりました。
JFrog管道は,JFrog DevOps平台のすべての自動化ルです。詹金斯と同様に,コードからビルド,バイナリ,そして配布に至るまでの各段階でソフトウェアを移動させることができます。しかし,JFrog平台の一部として,Artifactory, Xray,および分布と自然に統合されており,統一したパミッションモデルで管理することができ,きめ細かなアクセス制御が可能です。

管道はエンタープライズ規模で運用も可能であり,すべての管理者とチームに単一のプラットフォームを提供し,何百ものCI / CDパイプラインをサポートすることができます。
これらの理由からCIを詹金斯から管道に移行することをお勧めしますが,一度に移行するのは現実的ではないかもしれません。
Jenkinsからpipelineへ
この例では,詹金斯がビルド,ユニットテストを実行し,ステージング码头工人リポジトリにプッシュする去休息アプリケーションを構築しました。次に、JFrog管道が码头工人去アプリケーションをステージングリポジトリからKubernetesクラスタにデプロ邮箱します。ここでは谷歌Kubernetes引擎(GKE)を使用します。さらに,DockerレジストリとしてArtifactoryを使用します。これにより,同じビルドを別のリリースレジストリにプッシュすることなく,簡単にリリースへのプロモーションを行うことができます。

この例のコドリポジトリには,去休息アプリケーション,詹金斯パイプラインJenkinsfile,およびJFrog管道s YAMLファルが含まれています。ベストプラクティスでは,パereplicationプラereplicationンのereplicationンフラストラクチャもこれらのファereplicationルで定義されています。
詹金斯パ邮箱プラ邮箱ン
詹金斯パイプラインは,アプリケーションの初期ビルドとテストを実行し,码头工人コンテナをビルド情報とともにリポジトリにプッシュします。

それでは,詹金斯のパ邮箱プラ邮箱ンを見てみましょう。以下の詹金斯档案の重要なセクションは,建立信息发布と帖子ステジです。詹金斯が去アプリケーションイメージをビルドしてテストした後,ビルド情報をArtifactoryに公開します。
stage {stage('Build') {steps {container('golang'){sh 'go Build'}}} stage('单元测试'){steps {container('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 {container(' Docker '){script {Docker . io/goci-example:latest ."withRegistry(“https://partnership-public-images.jfrog。Io ', 'gociexamplerepo') {sh "docker push partner -public-images.jfrog. sh "Io /goci-example:latest"}}}}}stage('发布构建信息'){environment {JFROG_CLI_OFFER_CONFIG = false} steps {container(' JFROG_CLI_OFFER_CONFIG '){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管道でどのように設定されているかについて説明します。
Post {success {script {sh"curl -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_openshiftk8s_comと呼びます)。このUIは上記のcurl webhookコマンドを提供し,詹金斯パイプラインがJFrog管道をトリガーできるようにします。

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

JFrog管道は,パereplicationプラereplicationンのステップをyamlで定義します。このファ邮箱ルの最初のセクションはリソ邮箱スです。これらはパ。この例では,GitHubリポジトリ,jenkins_openshiftk8s_com詹金斯インテグレーションに接続されたBuildInfoリソス,リリスを促進するための最終的なBuildInfoリソスを定義しています。BuildInfoリソスはビルドのメタデタを保存するために使用します。
2022世界杯阿根廷预选赛赛程资源:—name: gociexampleGithubRepo type: GitRepo configuration: giitprovider: myGithub path: myaccount/goci-example—name: jenkinsBuildInfo 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: jenkinsBuildInfo执行:onExecute: - echo 'Jenkins作业触发管道'
すべてがうまくいったら,执行REST命令アプリケ。ここではgkeクラスタを使用します。このクラスタは,gociexampleClusterCredsという名前のKubernetes econンテグレションを通して参照します。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/
次に,执行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.”执行:onExecute: - cd ../dependencyState/2022世界杯阿根廷预选赛赛程resources/gociexampleGithubRepo - go mod download - go test ./test -run登台
最後に,ステジングテストをパスした場合は,ビルドをリリションします。
—name: promote_release type: PromoteBuild configuration: targetRepository: partnership-public-images.jfrog。io status:已释放的注释:通过了分段测试。input2022世界杯阿根廷预选赛赛程Resources:—name: jenkinsBuildInfo outputResources:—name: releaseBuildInfo
JFrog管道をさらに拡張して,エンドシステムやJFrog边缘システムにソフトウェアを公開するために,JFrog分布を使用して継続的デリバリー(CD)を実現することができます。ただし,これにいては今後のブログ記事に譲ることにします。
DevOpsへの道を続ける
ご覧のように,詹金斯パイプラインをJFrog管道に接続するのは簡単なプロセスです。必要に応じて,JFrog pipelineからJenkinsパこともできます。
ツールのパッチワークからソフトウェアデリバリーツールチェーンを開発するのは,時間がかかり,イライラすることがあります。JFrog平台のような統一されたツールチェーンを使用することで,ツールではなくソフトウェアに集中することができます。しかし,既存のツールがある場合は,それらを簡単にJFrogプラットフォームに接続して,その機能を活用することができます。