Code Stream 管理者または開発者は、 Code Stream および VMware Tanzu Kubernetes Grid Integrated Edition(旧称 VMware Enterprise PKS)を使用して、ソフトウェア プリケーションの Kubernetes クラスタへの展開を自動化できます。この使用事例では、アプリケーションのリリースを自動化するためのその他の方法を紹介します。

この使用事例では、2 つのステージを含むパイプラインを作成し、Jenkins を使用してアプリケーションをビルドして展開します。

  • 最初のステージは開発用です。Jenkins を使用して、GitHub リポジトリ内のブランチからコードを取得し、ビルドおよびテストして、公開します。
  • 2 番目のステージは、展開用です。パイプラインがアプリケーションを Kubernetes クラスタに展開する前に、主要なユーザーの承認を必要とするユーザー操作タスクを実行します。
アプリケーションを Kubernetes クラスタに展開するワークフローでは、Jenkins、Code Stream、GitHub、Git のトリガ、および Kubernetes が使用されます。

パイプラインがアプリケーションをビルド、テスト、公開、および展開できるように、開発ツール、展開インスタンス、およびパイプライン YAML ファイルを使用できる必要があります。パイプラインは、AWS 上の Kubernetes クラスタの開発インスタンスと本番インスタンスにアプリケーションを展開します。

ワークフローは、アプリケーションを Kubernetes クラスタにリリースするプロセスの操作に役立ちます。

アプリケーションのリリースを自動化するその他の方法は次のとおりです。

  • Jenkins を使用してアプリケーションをビルドする代わりに、 Code Stream のネイティブ ビルド機能と Docker ビルド ホストを使用できます。
  • アプリケーションを Kubernetes クラスタに展開する代わりに、Amazon Web Services (AWS) クラスタに展開することができます。

Code Stream のネイティブ ビルド機能と Docker ホストの使用方法の詳細については、次を参照してください。

前提条件

  • 展開されるアプリケーション コードが、運用中の GitHub リポジトリにあることを確認します。
  • Jenkins の作業インスタンスがあることを確認します。
  • 動作しているメール サーバがあることを確認します。
  • Code Stream で、メール サーバに接続するメール エンドポイントを作成します。
  • 開発および本番環境用に、Amazon Web Services (AWS) 上に 2 つの Kubernetes クラスタを設定します。これにより、パイプラインでアプリケーションが展開されます。
  • GitHub リポジトリにパイプラインの YAML コードが含まれていること、および環境用のメタデータと仕様を定義する YAML ファイルが含まれていることを確認します。

手順

  1. Code Stream で、[エンドポイント] > [新規エンドポイント] の順にクリックし、パイプラインで使用する Jenkins エンドポイントを作成して、GitHub リポジトリからコードを取得します。
    オンプレミス Jenkins インスタンスのエンドポイントでは、クラウド プロキシが使用され、Jenkins URL、ユーザー名、パスワード、およびフォルダ パスを入力する必要があります。
  2. Kubernetes エンドポイントを作成するには、[新規エンドポイント] をクリックします。
    1. 開発 Kubernetes クラスタのエンドポイントを作成します。
    2. 本番 Kubernetes クラスタのエンドポイントを作成します。
      Kubernetes クラスタの URL では、 http://kubernetes_server_address/api/v1/namespaces/namespace_name/services/https:service_name:%5Bport_name%5D という形式が使用されます。ポート番号は、含まれる場合も、含まれない場合もあります。
      たとえば、 https://10.111.222.333:6443https://api.kubernetesserver.fa2c1d78-9f00-4e30-8268-4ab81862080d.k8s-user.com のようになります。
    オンプレミス Kubernetes インスタンスのエンドポイントでは、クラウド プロキシが使用され、Kubernetes クラスタの URL、ユーザー名、およびパスワードを入力する必要があります。
  3. Wordpress などの、アプリケーションのコンテナを開発 Kubernetes クラスタに展開するパイプラインを作成し、そのパイプラインの入力プロパティを設定します。
    1. パイプラインがそれをトリガする GitHub 内のコード コミットを認識できるようにするには、パイプラインで [入力] タブをクリックし、[自動挿入プロパティ] を選択します。
    2. [GIT_COMMIT_ID] という名前のプロパティを追加し、星印をクリックします。
      パイプラインが実行されると、パイプラインの実行で、Git トリガが返すコミット ID が表示されます。
    Jenkins と Kubernetes を使用するパイプラインでは、入力 タブに Git 入力プロパティが表示されます。
  4. パイプラインが成功または失敗したときに E メールを送信するための通知を追加します。
    1. パイプラインで、[通知] タブをクリックし、[追加] をクリックします。
    2. パイプラインの実行が完了したときに E メール通知を追加するには、[E メール] を選択し、[の完了時] を選択します。次に、メール サーバを選択し、メール アドレスを入力して、[保存] をクリックします。
    3. パイプラインの失敗に関して別の E メール通知を追加するには、[の失敗時] を選択して、[保存] をクリックします。
    E メール通知を追加するときは、パイプラインの状態を 1 つ選択し、メール サーバと受信者を選択します。
  5. 開発ステージをパイプラインに追加し、アプリケーションをビルド、テスト、および公開するタスクを追加します。次に、各タスクを検証します。
    1. アプリケーションをビルドするには、Jenkins エンドポイントを使用する Jenkins タスクを追加し、Jenkins サーバからビルド ジョブを実行します。次に、パイプラインがコードを取得するために、Git ブランチを次の形式で入力します。$ {input.GIT_BRANCH_NAME}
    2. アプリケーションをテストするには、同じ Jenkins エンドポイントを使用する Jenkins タスクを追加し、Jenkins サーバからテスト ジョブを実行します。次に、同じ Git ブランチを入力します。
    3. アプリケーションを公開するには、同じ Jenkins エンドポイントを使用する Jenkins タスクを追加し、Jenkins サーバから公開ジョブを実行します。次に、同じ Git ブランチを入力します。
    Jenkins と Kubernetes を使用するパイプラインの場合、アプリケーションをビルドする Jenkins タスクでは、Jenkins エンドポイント、Jenkins ジョブ、ブランチ名が使用されます。
  6. パイプラインに展開ステージを追加してから、アプリケーションの展開の承認を必要とするタスクと、アプリケーションを Kubernetes クラスタに展開する別のタスクを追加します。次に、各タスクを検証します。
    1. アプリケーションの展開で承認を要求するには、ユーザー操作タスクを追加し、承認する必要のあるユーザーのメール アドレスを追加して、メッセージを入力します。次に、[E メールの送信] を有効にします。
    2. アプリケーションを展開するには、Kubernetes タスクを追加します。次に、Kubernetes タスクのプロパティで、開発 Kubernetes クラスタを選択し、[作成] アクションを選択して、[ローカル定義] ペイロード ソースを選択します。次に、ローカル YAML ファイルを選択します。
  7. Code Stream が Git トリガを使用できるようにする Git Webhook を追加します。これにより、開発者がコードをコミットするときにパイプラインがトリガされます。
    Kubernetes パイプラインをトリガする Git の Webhook では、ブランチとシークレット トークンを入力する必要があります。
  8. パイプラインをテストするには、GitHub リポジトリに移動し、アプリケーション YAML ファイルを更新して、変更をコミットします。
    1. Code Stream で、コミットが表示されていることを確認します。
    1. [トリガ] > [Git] > [アクティビティ] の順にクリックします。
    2. パイプラインのトリガを探します。
    3. [ダッシュボード] > [パイプライン ダッシュボード] の順にクリックします。
    4. パイプライン ダッシュボードで、正常に変更が行われた最新の領域で GIT_COMMIT_ID を見つけます。
  9. パイプライン コードを調べて、変更が表示されることを確認します。

結果

完了です。Kubernetes クラスタへのソフトウェア アプリケーションの展開が自動化されました。

例: Kubernetes クラスタにアプリケーションを展開するパイプライン YAML の例

この例で使用されるパイプラインのタイプについては、YAML は次のコードに似ています。

apiVersion: v1
kind: Namespace
metadata:
  name: ${input.GIT_BRANCH_NAME}
  namespace: ${input.GIT_BRANCH_NAME}
---  
apiVersion: v1
data:
  .dockercfg: eyJzeW1waG9ueS10YW5nby1iZXRhMi5qZnJvZy5pbyI6eyJ1c2VybmFtZSI6InRhbmdvLWJldGEyIiwicGFzc3dvcmQiOiJhRGstcmVOLW1UQi1IejciLCJlbWFpbCI6InRhbmdvLWJldGEyQHZtd2FyZS5jb20iLCJhdXRoIjoiZEdGdVoyOHRZbVYwWVRJNllVUnJMWEpsVGkxdFZFSXRTSG8zIn19
kind: Secret
metadata:
  name: jfrog
  namespace: ${input.GIT_BRANCH_NAME}
type: kubernetes.io/dockercfg
---   
apiVersion: v1
kind: Service
metadata:
  name: codestream
  namespace: ${input.GIT_BRANCH_NAME}
  labels:
    app: codestream
spec:
  ports:
    - port: 80
  selector:
    app: codestream
    tier: frontend
  type: LoadBalancer 
---
apiVersion: extensions/v1
kind: Deployment
metadata:
  name: codestream
  namespace: ${input.GIT_BRANCH_NAME}
  labels:
    app: codestream
spec:
  selector:
    matchLabels:
      app: codestream
      tier: frontend
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: codestream
        tier: frontend
    spec:
      containers:
      - name: codestream
        image: cas.jfrog.io/codestream:${input.GIT_BRANCH_NAME}-${Dev.PublishApp.output.jobId}
        ports:
        - containerPort: 80
          name: codestream
      imagePullSecrets:
      - name: jfrog
      

次のタスク

ソフトウェア アプリケーションを本番の Kubernetes クラスタに展開するには、手順を再度実行して、本番クラスタを選択します。

Code Stream と Jenkins の統合の詳細については、Code Stream を Jenkins と統合する方法を参照してください。