Jenkins の設定
セキュアな CI/CD ワークフロー用に Jenkins を設定する方法を学ぶ
概要
はじめに
Jenkins パイプラインが脆弱性スキャン、イメージ署名、アテステーションなどの重要なタスクを実行できるようにするには、次の手順に従います。この表には、実行する必要があるアクションと、完了する必要があるタイミングをまとめています。
アクション | 完了するタイミング |
---|---|
外部ツールとのセキュアな統合のために Jenkins にシークレットを追加する | セキュアなソフトウェアテンプレートを使用してアプリケーションを作成する前に、Jenkins にシークレットを追加します。これにより、ACS、Quay、GitOps とのシームレスな統合が保証されます。 |
Jenkins にアプリケーションを追加する | アプリケーションとソースリポジトリーを作成したら、それらを Jenkins に追加します。これにより、Red Hat Developer Hub プラットフォームで Jenkins パイプラインのさまざまな側面を確認できるようになります。 |
これらの手順を完了すると、Jenkins を ACS (Advanced Cluster Security)、Quay、GitOps とシームレスに統合し、コンテナーイメージの署名と検証に Cosign を利用できます。
第1章 外部ツールとの統合のために Jenkins にシークレットと環境変数を追加する
アプリケーションの作成時に CI プロバイダーとして Jenkins を選択した場合は、外部ツールとの安全な統合のために、シークレットと環境変数を Jenkins に追加する必要があります。これにより、Jenkins は脆弱性スキャン、イメージ署名、アテステーション生成などの重要なタスクを実行できるようになります。
前提条件
- Jenkins ジョブ、変数、CI パイプラインの作成および管理に必要な権限がある。
- Quay.io、Jfrog Artifactory、Sonatype Nexus などのイメージレジストリーのユーザー名とパスワードが必要です。
- 適切な GitOps 認証情報がある。
Jenkins パイプラインで実行する特定のタスクに使用するため、次の情報がある。
ACS タスクの場合:
- ROX Central サーバーのエンドポイントとトークン
SBOM タスクの場合:
- 署名鍵のパスワード、秘密鍵、公開鍵に署名する
- Trustification API と発行者 URL、クライアント ID、クライアントシークレット、サポートされている CycloneDX バージョン
注記これらの認証情報に使用される値はすでに Base64 でエンコードされているため、変換する必要はありません。これらの認証情報は
private.env
ファイルにあります。
1.1. Jenkins にシークレットを追加する
Jenkins サーバーの UI を使用して必要な認証情報を追加する手順に従います。
手順
- Web ブラウザーで Jenkins インスタンスを開き、管理者の認証情報でログインします。
- Jenkins ダッシュボードの右上隅にあるユーザー名を選択します。
- 左側のサイドバーから Manage Jenkins を選択します。
- Security セクションで、Credentials を選択します。
- Stores scope to Jenkins で System を選択します。
- 認証情報を追加するドメインを選択します。通常、これは Global credentials (unrestricted) です。このドメイン名をクリックします。
- Add Credentials を選択します。
- Kind ドロップダウンリストから、Secret text を選択します。
- Scope ドロップダウンリストのデフォルト値を Global (Jenkins…) のままにします。
- UI フィールドにシークレットに関連する情報を入力します。
- Create を選択します。
手順 7 - 11 を繰り返して、次の認証情報を追加します。
注記イメージレジストリーの場合、Quay がデフォルトのオプションです。JFrog Artifactory または Sonatype Nexus を使用するには、複製された tssc-sample-templates GitHub リポジトリー内の gitops-template フォルダーと source-repo フォルダーの両方にある 2 つの Jenkinsfiles で、対応する変数を含む行のコメントを解除します。
表1.1 イメージレジストリーおよび GitOps シークレット 変数 説明 QUAY_IO_CREDS
Quay.io リポジトリーにアクセスするためのユーザー名とパスワード。これは、Jenkinsfiles でコメントが解除されているデフォルトのオプションです。
ARTIFACTORY_IO_CREDS
JFrog Artifactory リポジトリーにアクセスするためのユーザー名とパスワード。
NEXUS_IO_CREDS
Sonatype Nexus リポジトリーにアクセスするためのユーザー名とパスワード。
GITOPS_AUTH_PASSWORD
新しくビルドされたイメージの GitOps リポジトリーを更新するためにシステムが使用するトークン。
表1.2 ACS および SBOM タスクに必要なシークレット 変数 説明 ROX_API_TOKEN
ROX サーバーにアクセスするための API トークン。
COSIGN_SECRET_PASSWORD
Cosign 署名鍵のパスワード。
COSIGN_SECRET_KEY
Cosign の秘密鍵。
TRUSTIFICATION_OIDC_CLIENT_SECRET
Trustification Bombastic API への認証にクライアント ID と一緒に使用されるクライアントシークレット。
最後に実行したパイプラインを再実行します。
- または、GitHub でアプリケーションのソースリポジトリーに切り替えて、小さな変更を加え、コミットして新しいパイプラインの実行をトリガーします。
1.2. Jenkins に環境変数を追加する
必要なシークレットをすべて追加したら、以下の手順に従って Jenkins サーバーで UI を使用して環境変数を追加します。
手順
- 左側のサイドバーから Manage Jenkins を選択します。
- System Configuration セクションで、System を選択します。
- System ページで下にスクロールして、Global properties セクションを見つけます。
- Environment variables > Add を選択します。
以下の環境変数にキーと値のペアを追加します。
表1.3 GitOps 変数 変数 説明 GITOPS_AUTH_USERNAME
(任意)Jenkins が GitLab と連携するために必要な変数。
表1.4 ACS タスクおよび SBOM タスクに必要な変数 変数 説明 ROX_CENTRAL_ENDPOINT
ROX Central サーバーのエンドポイント。
COSIGN_PUBLIC_KEY
Cosign の公開鍵。
TRUSTIFICATION_BOMBASTIC_API_URL
SBOM 生成で使用される Trustification Bombastic API の URL。
TRUSTIFICATION_OIDC_ISSUER_URL
Trustification Bombastic API と対話する際の認証に使用される OIDC 発行者 URL。
TRUSTIFICATION_OIDC_CLIENT_ID
OIDC を使用して Trustification Bombastic API に認証するためのクライアント ID。
TRUSTIFICATION_SUPPORTED_CYCLONEDX_VERSION
システムがサポートして生成する CycloneDX SBOM バージョンを指定します。
オプション: Jenkins がローカル OpenShift インスタンスで実行されず、Rekor サービスと TUF サービスが異なるクラスター上にある場合は、Rekor 変数と TUF 変数を設定します。また、クローンした tssc-sample-templates リポジトリー内の Jenkinsfile で、Rekor および TUF 変数を含む行のコメントを解除します。
表1.5 Rekor および TUF 変数 変数 説明 REKOR_HOST
Rekor サーバーの URL。
TUF_MIRROR
TUF サービスの URL。
- すべての変数を追加したら、Save を選択します。
- 最後に実行したパイプラインを再実行します。
関連情報
- アプリケーションのビルド時に Jenkins 継続的インテグレーション (CI) を選択した場合は、アプリケーションを Jenkins に追加 します。
第2章 Jenkins にアプリケーションを追加する
アプリケーションの作成時に CI プロバイダーとして Jenkins を選択した場合は、アプリケーションを Jenkins に追加する必要があります。適切な統合により、パイプラインが CI/CD ワークフローと連携し、シームレスに動作するようになります。
前提条件
- 環境に Jenkins がインストール、設定されている。
- Jenkins ジョブの作成および管理に必要な権限がある。
- RHTAP のインストール後のフェーズで、Jenkins パイプラインの 正しい認証情報を追加 している。
-
Jenkinsfile
を確認して Jenkins 設定と一致しているようにする。たとえば、パイプラインを実行できる場所を制限するためにエージェント設定を更新する必要がある場合があります。 -
Jenkins エージェントに必要なバイナリーがインストールされている (
git
、curl
、jq
、yq
、buildah
、syft
、cosign
、python3
、およびtree
)。パイプラインの実行が開始時に失敗する場合は、1 つ以上のバイナリーが欠落していることを示している可能性があります。
手順
- Jenkins インスタンスにログインします。
- Jenkins ダッシュボードから、New Item を選択します。
パイプラインジョブの名前を入力し、Pipeline プロジェクト (例:
secure-jenkins
) を選択します。注記パイプラインジョブの名前は、Jenkins CI を追加するアプリケーションの名前と一致する必要があります。名前が一致しないと、パイプラインは Jenkins 上で実行しれますが、RHDH には表示されません。
-
(オプション) 別のパイプライン名を使用する場合は、ソースリポジトリーの
catalog-info.yaml
ファイルのjenkins.io/job-full-name
フィールドを、選択したパイプライン名に更新します。
-
(オプション) 別のパイプライン名を使用する場合は、ソースリポジトリーの
- OK を選択してジョブを作成します。
- Configure > General ページで Pipeline セクションに移動し、Definition ドロップダウンリストから Pipeline script from SCM を選択します。
- SCM ドロップダウンリストから Git を選択します。
Repository URL フィールドに、Jenkins ソースリポジトリーの URL を入力します。
- Red Hat Developer Hub プラットフォームで、カタログから適切なアプリケーションを選択します。
- Overview タブに移動し、View Source を選択して、アプリケーションのソースコードが格納されているリポジトリーを開きます。
-
Branches to build セクションで、
*/main
と入力します。 - Save を選択します。システムは live-jenkins (ジョブの名前) ページを表示します。
Build Now を選択します。システムはビルドパイプラインを開始します。ビルドが完了するまで待機します。
- Stage View セクションで、Pipeline Overview を選択し、パイプライン実行を視覚化します。
- Pipeline Console を選択して、パイプライン実行の各ステージのライブログを確認します。
検証
アプリケーションを Jenkins と統合したら、Red Hat Developer Hub プラットフォームで Jenkins パイプラインのさまざまな側面を確認します。
カタログから適切なアプリケーションまたはコンポーネントを選択します。
- CI タブに移動して、Jenkins プロジェクトを表示します。適切な Jenkins ジョブは、Actions 列を使用して、ジョブの表示、再実行、および履歴の表示を行うことができます。システムは、最新の実行のステータスを含むジョブの概要を表示します。
- CD タブに移動し、適切なカードを選択して、コミットメッセージ、作成者名、ArgoCD と GitOps により管理されるデプロイメント履歴などのデプロイメントの詳細を表示します。
- カタログの Kind ドロップダウンリストから Resource を選択します。システムは Jenkins GitOps ジョブを表示します。適切な GitOps リソースを選択して確認します。
- Topology タブに移動して、デプロイメント namespace 内でのアプリケーションのデプロイメントを視覚化します。
これらの手順を完了すると、アプリケーションと Jenkins がシームレスに統合され、効率的で信頼性の高い CI/CD ワークフローが実現します。
改訂日時: 2025-05-01