一つの Jenkins サーバーを複数のグループで共有しているときに、チームA用のCredentialをチームBには使わせたくない場合があります。 credentialを普通に作成するとGlobalに作成されて、どのジョブからでも利用できてしまいます。
特定のフォルダ配下にあるジョブだけに利用を制限するために、 Folders plugin の機能を利用します。
- Jenkins 2.440.3
- Configuration as Code Plugin 1775.v810dc950b_514
- Job DSL Plugin 1.87
- Folders Plugin 6.940.v7fa_03b_f14759
GUIから設定する場合
フォルダを開いて、サイドバーの Credentials
> Stores scoped to <folder>
からCredentialを追加します。
そうするとこのフォルダでのみ利用できるcredentialが作成できます。
Job DSL + Confiuration as Codeで設定する
https://your.jenkins.installation/plugin/job-dsl/api-viewer/index.html でJob DSLのリファレンスを開いて、 folderCredentialsProperty
の項目を開くとfolderへのcredentialの設定方法がわかります。
リファレンスからはsecret textやsecret fileの設定方法がわからなかったのですが、 Create a folder credential of type “secret file” and “secret text” with Job DSL - Using Jenkins / Ask a question - Jenkins によると stringCredentialsImpl
で設定できるようです。
ポイントは hudson.util.Secret.fromString
でJenkins用の暗号化を施してから保存することです
helm + Configuration as Codeで設定する
Jenkins Helm Chart を使って Kubernetes で構築している場合は次のようにします。
helmの values.yaml
に次のようにSecretから取得した値が設定されているとして、 ${name-keyName}
の形式でそのsecretの値に置き換えることができます。
おわりに
- Folder pluginの機能でフォルダ配下限定のcredentialを作成できる
- Configuration as CodeでもJob DSLと組み合わせることで、少しトリッキーな見た目になるが実現できる