Bitbucket Cloud の使用を開始する
Bitbucket Cloud を初めてお使いですか? 新規ユーザー用のガイドをご利用ください。
このガイドでは、Bitbucket Pipelines を構成してコンテナ化したアプリケーションを Kubernetes に自動的にデプロイする方法を説明します。ここでは、アプリケーションの複数のインスタンスを実行する デプロイメントを Kubernetes 内に作成し、当社の Node.js アプリの新しいバージョンを Docker イメージの新しいバージョン内でパッケージ化し、このイメージを DockerHub にプッシュします。最後に、Pipelines を使用してデプロイメントを更新し、サービスを停止することなく新しい Docker イメージをリリースします。
すべてのコード スニペットはサンプル リポジトリでも入手できます。
以下が必要です。
イメージのプッシュ先となる、既存の DockerHub アカウント (または他の Docker レジストリ)
既存の kubernetes クラスタまたは minikube テスト環境
以下の例では、Node.js アプリをパッケージ化してデプロイします。Node.js プロジェクトを簡単にビルドするには、bitbucket-pipelines.yml を次のように構成します。
bitbucket-pipelines.yml
1
2
3
4
5
6
7
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 ファイルをチェックすることができます。
次に、Node.js アプリを Docker イメージとしてパッケージ化します。これを行うには、リポジトリで Docker を有効にし、Docker イメージを作成して、レジストリにプッシュする必要があります。この例では、DockerHub にプッシュします。
最初に、リポジトリのルートに Dockerfile が必要です。以下を使用します。
Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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 クラスターを構成するために Pipelines 外で一度だけ行う必要がある手動プロセスです。Kubernetes サーバーの場所を kubectl に構成済みであることを前提としています。
Bitbucket Pipelines を使用して継続的デプロイを実行するには、Kubernetes でアプリを実行するためのデプロイを構成する必要があります。kubectl コマンド ライン インターフェイスを使用して次のコマンドを実行し、デプロイを作成します。
次のプレースホルダーを上記で使用した値に置き換える必要があります。
<my.dockerhub.username>
<my.app>
1
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 スニペット
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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 ファイルをチェックすることができます。
この内容はお役に立ちましたか?