Appearance
What is AssemblyLine
AssemblyLineとは、CI/CD Pipelinesに示す通り、Deployment Parametersで与えられた、ユーザのアプリケーションの環境に関する情報をTekton Pipelineに注入し、Qmonus Value StreamでCI/CDプロセスを管理・実行する役割を担います。AssemblyLineで定義するCI/CD Pipelineの単位はAssemblyLine Stage
(以下、Stage)と呼ばれます。 ここでは、AssemblyLineの推奨配置場所、およびAssemblyLineの仕様について説明します。
AssemblyLineの推奨配置場所
AssemblyLineは、アプリケーションのGitリポジトリに配置することを推奨します。配置した場合の例は以下の通りで、アプリケーションを管理する環境ごとにディレクトリを作成して配置することを推奨します。
Application Repository
└── .valuestream/
└── assemblylines
├── dev/
│ └──assemblyline-{用途}.yaml
├── stg/
│ └──assemblyline-{用途}.yaml
└── prod/
└──assemblyline-{用途}.yaml
AssemblyLineの仕様
AssemblyLineはYAML形式のManifestで記述され、ManifestをQmonus Value StreamへApplyすることで、実行可能なAssemblyLineをQmonus Value Streamに登録できます。
AssemblyLineでは以下のフィールドを指定します。
- apiVersion(固定):
vs.axis-dev.io/v1
- kind(固定):
AssemblyLine
- metadata:
- name: AssemblyLineの名前
- annotations(任意):
- vs.axis-dev.io/event-type:
change-created
- vs.axis-dev.io/event-type:
- spec: AssemblyLineの定義
specについてはassemblylineで指定するspecフィールドの詳細で詳細に説明します。
Annotation として指定できるchange-created
については、Qmonus Value StreamでCI/CDリリースプロセスに関するメトリクスを収集するために付与するものとなります。詳しくは、DevOpsメトリクスの分析を参照してください。
AssemblyLine Manifestのサンプルは以下のようになります。
yaml
apiVersion: vs.axis-dev.io/v1
kind: AssemblyLine
metadata:
name: staging-deploy
annotations:
vs.axis-dev.io/event-type: change-created
spec:
params:
- name: gitRevision
type: string
description: "Revision number of the git repository"
stages:
- name: build
spec:
pipeline: nginx-demo-build
deployment:
app: nginx-demo
name: staging
params:
- name: gitRevision
value: $(inputs.gitRevision)
description: "Revision number of the git repository"
- name: cacheImageName
value: $(params.imageRegistryPath)/$(params.imageShortName)
description: "Name of the cache image"
- name: deploy
spec:
pipeline: nginx-demo-deploy
deployment:
app: nginx-demo
name: staging
params:
- name: gitRevision
value: $(inputs.gitRevision)
description: "Revision number of the git repository"
- name: imageName
value: $(stages.build.results.imageFullNameTag)
description: "Name of the image"
runAfter:
- build
results:
- name: gitRevision
value: $(inputs.gitRevision)
description: "Revision number of the git repository"
- name: imageName
value: $(stages.build.results.imageFullNameTag)
description: "Name of the image"
artifacts:
- path: .
AssemblyLineで指定するSpecフィールドの詳細
AssemblyLineのSpecフィールドでは、以下の4つの配列形式のフィールドを定義できます。
以下では、それぞれのフィールドで定義されるパラメータを説明します。
1. params(spec.params)
spec.params
をキーとするフィールドではname
とtype
、description
をセットとして、AssemblyLine実行時に指定するパラメータ(Input Parameters
)を配列形式で宣言します。ここで指定したパラメータは、params(spec.stages.spec.params)で実際に実行するPipelineに注入するパラメータへマッピングできます。
- name(必須): パラメータ名
- type(任意): パラメータの型
- description(任意): パラメータの使用用途など、自由記述項目
Input Parameters
Input Parameters(paramsフィールド)は手動で入力する以外に、以下の2つのパターンで自動入力できます。
- 別のAssemblyLineのAssemblyLine Resultsから値を自動で入力
- Gitリポジトリへの特定のアクションに基づいて値を自動で入力
例
gitRevision
とimageName
をInput Parametersとして宣言します。
yaml
spec:
params:
- name: gitRevision
type: string
- name: imageName
type: string
例のマニフェストの場合、Apply後にQmonus Value Stream上でAssemblyLineを選択すると、Input Parametersとして反映されていることが確認できます。
2. stages
spec.stages
をキーとするフィールドではname
とspec
、runAfter
をセットとして、AssemblyLineで実行されるCI/CD Pipelineの実行単位を配列形式で宣言します。
- name(必須): Stage名
- spec(必須): PipelineとDeployment Parametersを指定するフィールド
- runAfter(任意): Stageの実行順序を制御するために、前段に実行するStageを指定する配列形式のフィールド(runAfterの指定がないStageは全て最初に並列で実行されます。)
- runAfterの例:
build
Stage、deploy
Stage、healthchek
Stageの順にAssemblyLineを実行します。yamlspec: stages: - name: build spec: [...] - name: deploy spec: [...] runAfter: - build - name: healthcheck spec: [...] runAfter: - deploy
- runAfterの例:
spec.stages
直下のspec
はさらに、
- params(任意)
- pipeline(必須)
- deployment(必須) という3つのフィールドに分かれます。以下でそれぞれを説明します。
2-1. params(spec.stages.spec.params)
spec.stages.spec.params
フィールドでは、name
とvalue
、description
をセットとして、Pipelineに受け渡すパラメータを宣言します。ここでPipelineに注入した値は、Qmonus Value Streamで予約されているパラメータや、Tekton Pipeline側で記述されたパラメータを上書きします。
- name(必須): Pipelineで宣言しているパラメータ名
- value(必須): Pipelineで宣言しているパラメータに注入する値
- description(任意): パラメータの使用用途など、自由記述項目
また、value
フィールドでは、定数値を指定する以外に、以下の3パターンによる変数値の指定が可能です。
$(inputs.[パラメータ名])
: params(spec.params)でInput Parametersとして与えたパラメータ$(params.[パラメータ名])
: Deployment Configの登録で与えたパラメータ$(stages.[stage名].results.[パラメータ名])
:runAfter
によって先に実行されたStageのTekton Pipeline Resultsのパラメータ
Pipeline Results
AssemblyLine内でPipeline Resultsを使用するには、別途Tekton PipelineでResultsの項目を定義することが必要になります。 CI/CD AdapterのPipeline定義ではこのPipeline Resultsを定義してPipeline/Task Manifestを生成できます。詳しくは、Pipelinesを参考にしてください。
さらに、value
フィールドでは以下の例のように、それぞれのパラメータの値を連結させることも可能です。
例build
Stageにおいて、Input ParametersのパラメータであるgitRevision
およびDeployment ConfigのパラメータであるimageRegistryPath
とimageShortName
から、PipelineにgitRevision
、cacheImageName
としてパラメータを注入します。
yaml
spec:
params:
- name: gitRevision
type: string
stages:
- name: build
spec:
params:
- name: gitRevision
value: $(inputs.gitRevision)
- name: cacheImageName
value: $(params.imageRegistryPath)/$(params.imageShortName)
pipeline: [...]
deployment: [...]
2-2. pipeline
spec.stages.spec.pipeline
フィールドでは、Stageで実行するTekton Pipelineを指定します。
例build
Stageにおいて、Qmonus Value StreamにApply済みのnginx-demo-build
Pipelineを実行Pipelineとして指定します。
yaml
spec:
stages:
- name: build
spec:
params: [...]
pipeline: nginx-demo-build
deployment: [...]
2-3. deployment
spec.stages.spec.deployment
フィールドではapp
とname
をペアとし、Qmonus Value StreamのApplicationとDeploymentを指定することで、Git RepositoryやKubernetes認証情報、クラウド認証情報などのユーザの環境の情報をPipelineに注入します。
- app(必須): Application名
- name(必須): Deployment名
例build
Stageにおいて、nginx-demo
Applicationとstaging
DeploymentをPipeline実行時に指定します。
yaml
spec:
stages:
- name: build
spec:
params: [...]
pipeline: [...]
deployment:
app: nginx-demo
name: staging
3. results
spec.results
フィールドでは、name
とvalue
とdescription
をセットとして、AssemblyLine実行時に指定したパラメータまたは実行中に取得したパラメータを、AssemblyLine実行後にAssemblyLine Resultsとして確認できます。
- name(必須): Resultsに出力するパラメータの名前
- value(必須): Resultsに出力するパラメータの値
- description(任意): パラメータの使用用途など、自由記述項目
value
フィールドはparams(spec.stages.spec.params)と同様に、Input Parameters、Deployment Config、Pipeline Resultsのそれぞれのパラメータを指定できます。
例
Input Parametersとして入力したgitRevision
、build
StageでPipeline Resultsとして出力されたimageFullNameTag
を、それぞれgitRevision
、imageName
というパラメータ名でAssemblyLine Resultsとして出力します。
yaml
spec:
stages:
- name: build
spec:
params:
- name: gitRevision
value: $(inputs.gitRevision)
pipeline: [...]
deployment: [...]
- name: deploy
spec:
params:
- name: gitRevision
value: $(inputs.gitRevision)
- name: imageName
value: $(stages.build.results.imageFullNameTag)
pipeline: [...]
deployment: [...]
runAfter:
- build
results:
- name: gitRevision
value: $(inputs.gitRevision)
- name: imageName
value: $(stages.build.results.imageFullNameTag)
例のマニフェストの場合、AssemblyLineを実行すると、実行後の結果画面からAssemblyLine Resultsとして出力されていることが確認できます。
4. artifacts
spec.artifacts
フィールドでは、AssemblyLine実行中にTekton Workspaceに出力されたファイルなどの生成物を、Qmonus Value Streamの実行結果からダウンロードできます。Tekton PipelineのWorkspaceの名前には、shared
と指定する必要があることに注意してください。 以下のような配列形式で指定します。
- artifacts:
- path(必須):
workspace.shared.path
からの相対パス
- path(必須):
Workspace
AssemblyLine内でArtifactを使用するには、別途Tekton Pipelineでshared
Workspaceの項目を定義することが必要になります。 CI/CD AdapterのTask定義では、このWorkspaceを定義してPipeline/Task Manifestを生成できます。詳しくは、Task定義を参照してください。
例
shared
Workspace上のファイル一式をartifactとして指定します。
yaml
spec:
params: [...]
stages: [...]
results: [...]
artifacts:
- path: .
AssemblyLineを実行すると、実行後の結果画面からTimelineの右下のARTIFACTS
ボタンが活性化され、生成物をtgz
圧縮ファイルとしてダウンロードすることが可能になります。