Appearance
CI/CD Adapter Specification
アプリケーションのデプロイ・試験を実施する「ワークフロー」を定義するCI/CD Adapterの仕様について以下に示します。
Qmonus Value Streamは、CI/CD AdapterからTekton Pipeline/Task Manifestを生成します。この処理をコンパイル
、と呼びます。 CI/CD AdapterはTask定義とPipeline定義に分かれます。それぞれ仕様が異なるため、内容を分けて説明します。
Task定義
以下のように、CI/CD AdapterのTask定義のフィールドの大部分はTekton Taskに依存する要素で構成されます。 Tekton TaskにはないCI/CD Adapter Task定義の固有のパラメータとして、大きく分けて以下の5種類に分類できます。
prefix
:Tekton Task名のパラメータのプレフィックスを指定します。prefixAllParams
:prefix
によって指定したプレフィックスをPipelineのパラメータにも伝播させることを指定します。params
: Tekton Taskのパラメータをオブジェクト型で与えます。approvalRequired
:Value Streamで承認行為をすることを指定します。input
: Pipeline定義により決定されるパラメータの型を指定します。
cue
#TaskBuilder: {
// Tekton steps
steps: [...tekton.#Step]
// Tekton Task volumes
volumes: [...corev1.#Volume]
// Tekton Task Workspaces
workspaces: [...tekton.#WorkspaceDeclaration]
// Tekton Result Definition
results: {
description: string | *""
}
id: string
// name is Task name
name: string
prefix: string | *""
// If flag is true, add prefix to parameter name
prefixAllParams: bool | *false
// This parameter is currently the same as Tekton's runAfter
runAfter: [...string]
// This parameter is the same as Tekton's when expressions
when: [...{
input: string | #TaskParam | #TaskResult
operator: selection.#Operator
values: [...string]
}]
// Tekton Param Definition
#TaskParam: {
desc: string
default: string
prefix: bool | *false
}
params: [string]: #TaskParam
// value stream approval task
approvalRequired: bool | *false
namespace: string | *""
// input given by user
input: {
// constant parameters passed from pipeline.
constParams: {[string]: !~"\\$\\(params\\..*\\)" | #TaskResult}
// When env is specified, Task is executed only in the environment
// If env is empty, Task is executed in all environments.
env: string | *""
...
}
}
Prefix
prefix
フィールドは、Task名であるmetadata.name
フィールドに対してプレフィックスを付与することが出来ます。
例
Task名にapp
というプレフィックスを付与します。
cue
prefix: "app"
PrefixAllParams
prefixAllParams
フィールドは、prefix
フィールドの入力を前提としています。true
にすることでprefix
フィールドで指定したプレフィックスをPipeline側のspec.params.name
フィールドにも反映できます。この時、Task側のspec.params.name
フィールドにはプレフィックスは付与されません。
例
Task名およびPipelineのパラメータ名にapp
というプレフィックスを付与します。
cue
prefix: "app"
prefixAllParams: true
Params
params
フィールドは、Tekton Taskのspec.params[]
フィールドに相当するパラメータをオブジェクト形式で宣言します。 さらに、params.[string].prefix
をtrue
にすることで、prefixで与えたプレフィックスをTaskのパラメータごとに指定して付与できます。また、prefixAllParamsがtrue
のときは、params.[string].prefix
の値に関わらず、全てのPipelineパラメータにプレフィックスが付与されます。
例
二つのパラメータオブジェクトを作成し、pathToDockerFile
のパラメータのみ、prefix
で指定しているプレフィックスapp
を付与する。
prefix: "app"
params: {
pathToDockerFile: {
desc: "The path to the dockerfile to build (relative to the context)"
default: "Dockerfile"
prefix: true
}
imageTag: {
desc: "The tag name of container"
default: "latest"
}
}
Input
Input
フィールドは、CI/CD AdapterのPipeline定義から渡されるパラメータのリストを宣言します。
例
string型のパラメータであるphase
と、boolean型のパラメータであるuseDebug
を、CI/CD AdapterのPipeline定義から受け取る事を宣言しています。
cue
input: {
phase: string
useDebug: bool
}
ApprovalRequired
approvalRequired
フィールドは、Qmonus Value Streamで実行されるTaskに承認行為を要求するパラメータです。 こちらを指定することで、approval
というTaskが追加で生成され、Pipelineの中で該当Taskの後に指定されます。このPipelineを指定したAssemblyLineをQmonus Value Streamで実行すると、approval Taskの後のTaskを実行するかどうか、GUI上で判断することを要求します。 このTaskを使用したQmonus Value Streamでの動作イメージは、商用環境のPromotionを参考にしてください。
例
Taskの実行後にQmonus Value Streamで承認行為を要求します。
cue
approvalRequired: true
Pipeline定義
以下のように、CI/CD AdapterのPipeline定義の固有のフィールドは、主に初期化時に利用するpipelineParameters
、出力するTekton Pipeline/Task Manifestを宣言するpipelines
、および組み合わせるInfrastructure Adapterのリストcomposites
から構成されます。
cue
#DesignPattern: {
name: string
description: string | *""
// input parameters for pipeline
pipelineParameters?: {[string]: _}
// enumerates design pattern
composites?: [...#CompositeDef]
// pipeline declaration
pipelines?: {[string]: _}
}
Pipelineの基本要素
name
およびdescription
フィールドは、CI/CD Adapterについての説明を記述します。現在、これらのフィールドがコンパイル時に利用されることはありません。
ここで、name
は必須フィールドです。
例
cue
name: "pattern01"
description: "a sample ci/cd adapter"
PipelineParameters
pipelineParameters
フィールドは、CI/CD Adapterの初期化時に、外から受け取るパラメータのリストを宣言します。コンパイル時にQVS ConfigのpipelineParams
フィールドで渡されたパラメータの値は、ここで宣言したpipelineParameters
にバインドされます。
例
stringのパラメータを2つ、booleanのパラメータを1つ受け取ります。
cue
pipelineParameters: {
image: string
version: string
useDebug: true
}
Pipelines
pipelines
フィールドは、CI/CD Adapterが出力するPipeline Manifestについて、Pipeline名をkeyとしたObjectの形で宣言します。
[string]
にPipeline名を記載し、[task=string]にはPipelineのspec.tasks[].name
フィールドに相当するTask名を入力し、#TaskBuilder
として記述したTask定義がspec.tasks[].taskRef.name
フィールドのTask名としてBindされ、Pipeline/Taskとして一度に出力される構造になっています。 [string].results
では、Task定義でresults
フィールドを指定した際にのみ、TaskからPipelineへ伝搬されるspec.results
フィールドに追従して、Task定義で記載されているDescriptionが自動で付与されます。
cue
#PipelineBuilder: {
[string]: {
tasks: [task=string]: #TaskBuilder
results: [string]: description: string
...
}
}
例
compileApp
, deployApp
Task定義を importして#Builder
スキーマからPipeline/Taskを生成します。 Inputに対応するように、compile
Task定義のinput
フィールドに、stringのパラメータを1つ、booleanのパラメータを1つ渡します。
cue
import (
"module-to-load/tasks:compileApp"
"module-to-load/tasks:deployApp"
)
[...]
pipelines: {
"deploy": {
tasks: {
"compile": compileApp.#Builder
input: {
phase: "app"
usedebug: "true"
}
"deploy": deployApp.#Builder
}
}
}
出力されるPipeline Manifestは以下になります。
yaml
kind: Pipeline
apiVersion: tekton.dev/v1beta1
metadata:
name: deploy
spec:
tasks:
- name: compile # Pipeline定義でtasks以下に指定したTask名
taskRef:
name: compile-app-name # Task定義で指定されるTask名
[...]
- name: deploy # Pipeline定義でtasks以下に指定したTask名
taskRef:
name: deploy-app-name # Task定義で指定されるTask名
[...]
Composites
Infrastructure Adapterと同様に、CI/CD Adapter同士を組み合わせて新しいCI/CD Adapterを定義するために、composites
フィールドを使用することが出来ます。 詳細は、Infrastructure AdapterのCompositeの説明を参照してください。 CI/CD Adapterで解決したManifestは、pipelines
フィールドに全て結合されます。
例
compile
Task -> deploy
Task の順で実行されるdeploy
Pipeline定義をCompositeし、解決したPipeline/Task定義に対して、compile
Taskの後(deploy
Taskの前)に承認行為を要求するTaskを追加します。
cue
import (
"module-to-load:deploy"
)
composites: [
{
pattern: deploy.DesignPattern
pipelineParams: {
useDebug: pipelineParameters.useDebug
deployPhase: "app"
}
},
]
pipelines: {
"deploy": {
tasks: {
"compile": {
approvalRequired: true
}
}
}
}