jobTemplate内でConigMapをVolumeとしてマウントさせることで、CronjobからVolumeClaimTemplateを用いてパイプラインを実行させられたのでメモとして残します。
前提
task, pipelineはapply済み。Dynamic Provisioningが設定されている環境を想定しています。
やりたいこと
CronJobからVolumeClaimTemplateを用いてパイプラインを実行させたい。
課題
job上で、tknコマンドを用いてパイプラインを実行したいが、現時点ではtknコマンドはパラメータでのVolumeClaimTemplateの細かな設定は実装されておらず、外部ファイルのパスを参照する仕様となっているようです。
参考:https://github.com/chmouel/tektoncd-cli/blob/main/docs/cmd/tkn_pipeline_start.md
$ tkn pipeline start [name] --workspace name=[name],volumeClaimTemplateFile=/path/to/volume-claim-template.yaml
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: abc-xxx
ローカルからtknコマンドを実行する場合であれば問題ないが、Jobで実行しようとするとコンテナ内にファイルが存在しないためエラーとなります。
解決策
CronJobはjobTemplateの形式で記載できるので、ConfigMapでマウントさせることでコンテナ内にyamlを配置する。
volume-claim-template.yamlをConfigMapとしてapply。
apiVersion: v1
kind: ConfigMap
metadata:
name: volume-claim-template
data:
volume-claim-template.yaml: |
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: abc-xxx
作成したConfigMapをCronJob作成時に任意のパス(/volume-claim-templateなど)にマウントさせ、tkn実行時にパラメータで該当のパスを指定します。
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: test-cronjob
spec:
schedule: "0 0 * * *"
jobTemplate:
spec:
template:
spec:
serviceAccountName: sample
containers:
- name: sample-cronjob
image: image-registry.openshift-image-registry.svc:5000/openshift/pipelines-cli-tkn-rhel8:0.19.0-3
command: ["sh", "-c"]
args:
- |
tkn pipeline start sample-pipeline \
--prefix-name sample-pipeline \
--serviceaccount sample \
--param git-url=https://xxx/sample.git \
--param git-revision=develop \
--param maven-context-dir=sample \
--param maven-image=image-registry.openshift-image-registry.svc:5000/openshift/maven:3.8-openjdk-8 \
--param maven-goals=\
clean,\
verify,\
deploy,\
sonar:sonar \
--workspace name=maven-settings,secret=mvn-settings \
--workspace name=shared-workspace,volumeClaimTemplateFile=/volume-claim-template/volume-claim-template.yaml
volumeMounts:
- name: volume-claim-template
mountPath: "/volume-claim-template"
restartPolicy: Never
volumes:
- name: volume-claim-template
configMap:
name: volume-claim-template
これにより稼働させたコンテナ内でyamlファイルを読み込ませることができ、CronJobからVolumeClaimTemplateを用いたパイプラインが実行可能となります。