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?

More than 1 year has passed since last update.

CronJobからVolumeClaimTemplateを用いてtknコマンドでパイプラインを実行する

Last updated at Posted at 2022-04-21

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

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。

volume-claim-template-config.yaml
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実行時にパラメータで該当のパスを指定します。

test-cronjob.yaml
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を用いたパイプラインが実行可能となります。

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?