robotsnoindex

このガイドでは、Bitbucket Pipelines を構成してコンテナ化したアプリケーションを Kubernetes に自動的にデプロイする方法を説明します。ここでは、アプリケーションの複数のインスタンスを実行する デプロイメントを Kubernetes 内に作成し、当社の Node.js アプリの新しいバージョンを Docker イメージの新しいバージョン内でパッケージ化し、このイメージを DockerHub にプッシュします。最後に、Pipelines を使用してデプロイメントを更新し、サービスを停止することなく新しい Docker イメージをリリースします。 

すべてのコード スニペットはサンプル リポジトリでも入手できます。

前提条件

以下が必要です。

  • イメージのプッシュ先となる、既存の DockerHub アカウント (または他の Docker レジストリ)
  • 既存の kubernetes クラスタまたは minikube テスト環境

アーティファクトのビルド

以下の例では、Node.js アプリをパッケージ化してデプロイします。Node.js プロジェクトを簡単にビルドするには、bitbucket-pipelines.yml を次のように構成します。 

bitbucket-pipelines.yml
pipelines:
  default:
    - step:
        script: # Modify the commands below to build your repository.
          # build and test the Node app
          - npm install
          - npm test

bitbucket-pipelines.yml ファイルをチェックするには、 オンライン バリデーターを使用します。.

Docker イメージのビルドとプッシュ

次に、Node.js アプリを Docker イメージとしてパッケージ化します。これを行うには、リポジトリで Docker を有効にし、Docker イメージを作成して、レジストリにプッシュする必要があります。この例では、DockerHub にプッシュします。 

最初に、リポジトリのルートに Dockerfile が必要です。以下を使用します。 

Dockerfile
FROM node:boron
 
# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
 
# Install app dependencies
COPY package.json /usr/src/app/
RUN npm install
 
# Bundle app source
COPY . /usr/src/app
 
EXPOSE 8080
CMD [ "npm", "start" ]

次に、Docker イメージをビルドして、DockerHub レジストリ内のプライベート リポジトリにプッシュします。Bitbucket Pipelines で変数として DockerHub 資格情報を構成する必要があります。

Bitbucket でリポジトリ設定に進み、[Pipelines] > [リポジトリ変数] に移動して、DockerHub のユーザー名とパスワードを追加します。

以下に示すように、資格情報を bitbucket-pipelines.yml ファイルに追加します。


bitbucket-pipelines.yml
pipelines:
  default:
    - step:
        name: Test
        script:
          - npm install
          - npm test
 
    - step:
        name: Build
        script:
          - export IMAGE_NAME=$DOCKER_HUB_USERNAME/$APPLICATION_NAME:$BITBUCKET_COMMIT
          # build the Docker image (this will use the Dockerfile in the root of the repo)
          - docker build -t $IMAGE_NAME .
          # authenticate with the Docker Hub registry
          - docker login --username $DOCKER_HUB_USERNAME --password $DOCKER_HUB_PASSWORD
          # push the new Docker image to the Docker registry
          - docker push $IMAGE_NAME
        services:
          - docker

注意

ここでは APPLICATION_NAME の環境変数を使用していますが、独自のものを設定することも、静的に定義することもできます。

アプリケーションの複数のインスタンスを実行するデプロイメントを Kubernetes で作成

これは、Kubernetes クラスタを構成するために Pipelines 外で一度だけ行う必要がある手動プロセスで、Kubernetes サーバーの場所を kubectl に構成済みであることを前提としています。例については、以下の「kubectl を構成する」セクションを参照してください。

Bitbucket Pipelines を使用した継続的なデプロイメントの演習を行うには、アプリケーションを Kubernetes で実行するデプロイメントを構成する必要があります。kubectl コマンド ライン インターフェイスを使用して次のコマンドを実行し、デプロイメントを作成します:  

次のプレースホルダーを上記で使用した値に置き換える必要があります。 

  • <my.dockerhub.username>  
  • <my.app>
kubectl run <my.app> --labels="app=<my.app>" --image=<my.dockerhub.username>/<my.app>:latest --replicas=2 --port=8080

これでアプリケーションは Kubernetes で実行されている状態になりますが、Kubernetes サービスとして公開されるまでは外部からアクセスできません。ただし、この例では Pipelines を使用してアプリケーションを更新する方法を紹介しているため、ここでは公開方法は説明していません。

要約

上記のすべてのステップを完了することで bitbucket-pipelines.yml  ファイルが完成します。

bitbucket-pipelines.yml スニペット
pipelines:
  default:
    - step:
        name: Test
        script:
          - npm install
          - npm test
 
    - step:
        name: Build
        script:
          - export IMAGE_NAME=$DOCKER_HUB_USERNAME/$APPLICATION_NAME:$BITBUCKET_COMMIT
          # build the Docker image (this will use the Dockerfile in the root of the repo)
          - docker build -t $IMAGE_NAME .
          # authenticate with the Docker Hub registry
          - docker login --username $DOCKER_HUB_USERNAME --password $DOCKER_HUB_PASSWORD
          # push the new Docker image to the Docker registry
          - docker push $IMAGE_NAME
        services:
          - docker
    - step:
        name: Deploy
        deployment: production
        script:
          - sed -i "s|{{image}}|$DOCKER_HUB_USERNAME/$APPLICATION_NAME:$BITBUCKET_COMMIT|g" deployment.yml
          - pipe: atlassian/kubectl-run:1.1.2
            variables:
              KUBE_CONFIG: $KUBE_CONFIG
              KUBECTL_COMMAND: 'apply'
              RESOURCE_PATH: 'deployment.yml'

アトラシアンのオンライン バリデーターでご使用の bitbucket-pipelines.yml ファイルをチェックすることができます。