Skip to content

解説

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