Code Stream 管理者または開発者は、 Code Stream および VMware Tanzu Kubernetes Grid Integrated Edition(旧称 VMware Enterprise PKS)を使用して、ソフトウェア プリケーションの Kubernetes クラスタへの展開を自動化できます。この使用事例では、アプリケーションのリリースを自動化するためのその他の方法を紹介します。
この使用事例では、2 つのステージを含むパイプラインを作成し、Jenkins を使用してアプリケーションをビルドして展開します。
- 最初のステージは開発用です。Jenkins を使用して、GitHub リポジトリ内のブランチからコードを取得し、ビルドおよびテストして、公開します。
- 2 番目のステージは、展開用です。パイプラインがアプリケーションを Kubernetes クラスタに展開する前に、主要なユーザーの承認を必要とするユーザー操作タスクを実行します。
パイプライン ワークスペースで Kubernetes API エンドポイントを使用する場合、 Code Stream は、継続的インテグレーション (CI) タスクまたはカスタム タスクを実行するために必要な ConfigMap、シークレット、ポッドなどの Kubernetes リソースを作成します。 Code Stream は、NodePort を使用してコンテナと通信します。
パイプラインの実行の間でデータを共有するには、パーシステント ボリュームの要求を指定する必要があります。 Code Stream はパーシステント ボリュームの要求をコンテナにマウントしてデータを保存し、以降のパイプラインの実行に使用します。
Code Stream パイプライン ワークスペースでは、継続的インテグレーション タスクとカスタム タスクで Docker と Kubernetes がサポートされます。
ワークスペースの構成に関する詳細については、パイプライン ワークスペースの構成を参照してください。
パイプラインがアプリケーションをビルド、テスト、公開、および展開できるように、開発ツール、展開インスタンス、およびパイプライン YAML ファイルを使用できる必要があります。パイプラインは、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 ファイルが含まれていることを確認します。
手順
結果
完了です。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 と統合する方法を参照してください。