0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CI/CDパイプライン実行時のsecret変数参照先を調べてみた。

Last updated at Posted at 2024-12-17

2024/12/17
新規作成

概要

 過去に作成したパイプラインを再実行した際に、git clone タスク実行時のsecretが原因でstepエラーとなったことを切掛に、secretの参照関係を調査しました。
 状況としては、再実行時に該当のsecretが参照パスがなくなっていたことが原因でした。また、project間でyamlをコピーした際など、別projectのsecretを参照することは出来ないことも注意点です。


前提・環境など

  • OCP 14.16 (IBM Managed Openshift /ROKS)
  • RedHat Enterprise Linux 8.6 (踏み台サーバー)

前提知識

  • tekton の基礎知識 (PipeLine、Taskなど)
  • OpenShiftの基礎知識 (ConfigMap、Secret、deployment、Dockerfile、podなど)

1. Pipeline実行時の参照secretについて

 secretの参照関係を図にしてみました。各コンポーネントの概要は以下の表の通りです。

default-secret.png

# コンポーネント 概要
(1) Pipelines パイプライン定義 実行予定のTaskの順序や関連性を定義する
(2) Tasks タスク定義 実行するコンテナイメージや、コンテナ稼働後のbash処理などを定義する
(3) PipelineRuns 実行後のパイプラインのインスタンス。結果やログなどのstatus情報を含む
(4) TaskRuns 実行後のタスクのインスタンス。結果やログなどのstatus情報を含む
(5) Secret basic認証や、key-value変数などを定義 (Taskに直接記載せずに分離する)
(6) ServiceAccount パイプライン実行時のユーザー。Pipeline実行権限(Role)を持つ必要がある
(7) TectonConfig パイプライン実行時のdefault Service Account(pipeline)を定義している

以下、よく見るパイプライン実行時のGUIから情報をたどってみます。

1-1.実行時UI (認証情報オプション)

 Pipelineの起動時には、認証情報オプションという欄があります。
image.png

 image.png

 この一覧で参照できているものが、パイプライン/タスク内でのGitアクセスなどに利用可能な Secretとなります。

1-2.(Service Account)pipeline からみる参照Secret

 先の1-1の参照Secretは、どこで定義されているのかを辿ってみます。
 結論から記載すると、今回は pipelineという名前のServiceAccountから紐づいていました。このpipelineは、パイプラインを実行する際のデフォルトServiceAccountに相当します。(後述)
image.png

 画像のsecrets: 定義を見ていただくと、先の認証情報オプションにもあった git250225-pipelinepipelinetestsecret が指定されていることがわかります。ServiceAccountは、これらのsecretをproject内部で探して、パイプライン実行時に参照するというワケです。(ちなみに、github-erimというgit認証用のbasic認証Secretは、別projectに存在し参照スコープ外のため、先の実行時画面で表示されていません)

1-2.PipelineRuns / TaskRunsからみる service account

 実際、パイプライン実行時にどのServiceAccountを指定しているのか見てみます。
 Pipelines、Tasks自体にはServiceAccountの指定はありません。その代わりに、PipelineRuns、TaskRunsの各インスタンスで実行時に指定されていることがわかります。(下図:例)

image.png
image.png

 spec.serviceAccountName変数として、pipeline というServiceAccountリソースをTaskRunで指定していることがわかります。

 ちなみに、このインスタンス実行時のServiceAccountですが、デフォルト定義としては、config というTektonConfigs に記載があります。TektonConfigsは、CustonResourceDefinitions 一覧から参照することができるカスタムリソースです。(configはTektonConfigsのインスタンス名)

image.png

image.png

image.png

この、config というTektonConfigsリソースに default-service-account: pipeline という記載があるため、tekton パイプラインの実行サービスアカウントが (SA)pipeline となり、 (SA)pipelineから参照可能なSecretを参照して、Gitアクセスができる、という流れになります。

2. 各変数のスコープについて

 改めてではありますが、各コンポーネントのスコープを整理しておきます。Pipelineを実行する際、リソースはprojectスコープとなります。
 つまり、Pipeline実行時に参照するServiceAccount、Secretは、同一projectで定義してある必要があります。(当たり前と言えば当たり前)
 ただし、Pipeline実行時のdefault ServiceAccountを管理しているTektonConfigsはprojectのリソースではありません。

コンポーネント スコープ 備考
Pipeline / PipelineRuns project
Task / TaskRuns project
ServiceAccount project
Secret project
TektonConfigs 共通

おわりに

ここまで読んでくださって有難うございました。認識違い等、お気づきの点ありましたらコメント頂けますと幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?