Appearance
解説
AssemblyLineとProjectリソースの関係
以下に今回利用したAssemblyLineのYAML定義を示しています。このAssemblyLineは、Stage定義に手順3-1で登録したTekton Pipeline名を指定しています (14行目) 。 これに加えて、15-17行目でApplication nginx-demoのDeployment stagingを指定しています。この設定によって、手順2-2で作成したDeploymentをこのAssemblyLineに紐づけています。Qmonus Value Streamはここで解決した紐づけを元に、手順2および手順3でGUIを通して設定したProjectリソース情報をAssemblyLineの実行パラメータにバインドし、CI/CDパイプラインを実行しています。
yaml
apiVersion: vs.axis-dev.io/v1
kind: AssemblyLine
metadata:
name: staging-deploy
spec:
params:
- name: gitRevision
type: string
- name: imageName
type: string
stages:
- name: deploy
spec:
pipeline: nginx-demo-deploy
deployment:
app: nginx-demo
name: staging
params:
- name: gitRevision
value: $(inputs.gitRevision)
- name: imageName
value: $(inputs.imageName)
- name: resolve-ip-address
spec:
pipeline: nginx-demo-resolve-ip-address-after-deploy
deployment:
app: nginx-demo
name: staging
runAfter:
- deploy
results:
- name: ipAddress
value: $(stages.resolve-ip-address.results.ipAddress)Cloud Native Adapter
Qmonus Value Streamでは設定ファイルとしてQVS Configが必要となります。 本チュートリアルではアプリケーションリポジトリの .valuestream/qvs.yaml に配置しています。 QVS ConfigはCloud Native Adapter等を指定します。本チュートリアルでは再利用可能なAdapterとして公開しているOfficial Cloud Native Adapterを指定しています(qvs.yaml 8行目)
Cloud Native Adapterとは
Cloud Native Adapterはデプロイ構成を柔軟にモジュール化し、再利用する機能です。 商用で実績のあるシステム構成やCI/CDパイプライン構成を再利用可能な形でまとめることができ、アプリケーションと Cloud Native Adapter を組み合わせることで、ベストプラクティスに沿ったシステム構成やCI/CDを実現できます。 詳細はWhat is Cloud Native Adapterを参照してください。
使用したOfficial Cloud Native Adapterでは、input parameterとして、[k8sNamespace, imageName] を定義してます。さらにはQVS Config側で、このparametersをPipelineから受け取るよう宣言しています(qvs.yaml 1-5行目)。k8sNamespaceについては、手順2-2のDeploymentの作成時に設定した namespace の値が暗黙的に渡され、その値がAssemblyLine実行時に自動でバイドされます。imageName については、AssemblyLineのinputパラメータとして指定しているので、AssemblyLine実行のたびにユーザが指定します。
yaml
params:
- name: k8sNamespace
type: string
- name: imageName
type: string
modules:
- name: github.com/qmonus/official-cloud-native-adapters
revision: v0.8.2
designPatterns:
- pattern: qmonus.net/adapter/official/kubernetes/deployment/simple
params:
k8sNamespace: $(params.k8sNamespace)
imageName: $(params.imageName)
appName: nginx-demo
port: "80"
replicas: "1"
- pattern: qmonus.net/adapter/official/kubernetes/sample:loadbalancer
params:
k8sNamespace: $(params.k8sNamespace)
appName: nginx-demo
port: "80"
- pattern: qmonus.net/adapter/official/pipeline/deploy:simple
- pattern: qmonus.net/adapter/official/pipeline/sample:resolveIPAddress