Bitbucket Pipelines 用パイプを作成する

パイプは、タスクを実行するためのスクリプトを含む、コンテナ用のカスタム Docker イメージです。多数のパイプが提供されていますが、自身で作成することもできます。

1 つのパイプはいくつかの異なるファイルで構成されます。

  • スクリプト、またはバイナリ、タスクを実行するコード。

  • Dockerfile。スクリプトを実行する Docker コンテナの構築方法を示します。

  • (オプション) メタデータと readme ドキュメント。パイプについて理解するのに役立ちます。

  • (オプション) パイプを簡単に更新できるようにする、いくつかの CI/CD 構成。

これらのファイルは 1 箇所 (通常はパイプ リポジトリ) に格納されます。

パイプを記述する理由

パイプを記述する理由はいくつかあります。

  • パイプラインの複数のステップで同じアクションを実行するため

  • 複数のリポジトリで同様のタスクを実行するため

  • ベンダーの場合、ソフトウェアまたはサービスをパイプラインによって使いやすくするため

  • メインのパイプラインにはない、依存関係を必要とするアクションを実行するため

パイプを作成することで、Pipelines の構成を簡素化し、簡単かつ効率的に再利用できるようになります。

パイプの可能性は無限ですが、すぐに利用できる次のようなパイプを提供しています。

パイプを記述する方法

必要な内容に応じて、シンプルなパイプまたは完全なパイプを作ることができます。これらは同じように動作しますが、追加可能な詳細設定や構成が異なります。

simple

完全なパイプ

すぐに利用を開始

べスト プラクティス

後からの更新は複雑性を高める可能性がある

CI/CD によるバージョニングの自動化

最小限の構成

他のユーザーや自身が将来使用できる、便利なドキュメント

私的利用のみ

マーケットプレイスに追加可能

3 つのファイル:

  • スクリプト

  • 1 つのDockerfile

  • Dockerhub を更新するための 1 つの基本的なパイプライン

前述の 3 つのファイルと次のファイル:

  • 1 つのメタデータ ファイル

  • 1 つの readme

  • 1 つのテスト スクリプト

  • 任意の他のファイル

このガイドでは、まずシンプルなパイプを作成し、それを完全なパイプにする手順について説明します。コンテナをビルドして Dockerhub にアップロードするため、Dockerhub にアカウントがあることを確認してください (無料でセットアップできます)。

前提条件

  • パイプは、docker ハブのパブリック イメージでのみ機能します。

  • Docker に精通していて、私的使用のためにのみパイプを作成したい場合、必要なすべてのファイルを含む独自の Docker コンテナを作成できます。

ステップ 1 - リポジトリを作成またはインポートする

最初に、ファイルを配置する場所が必要となるため、リポジトリを作成します。

パイプ リポジトリを作成する方法は主に 3 つあります。

  1. 空のリポジトリを作成する (含める情報については後述します)

  2. サンプル リポジトリのいずれか 1 つをインポートする

  3. アトラシアンのジェネレータを使用してローカル リポジトリを作成する (完全なパイプでのみ推奨)

1. Bitbucket で新しいリポジトリを作成する方法

Bitbucket で、グローバル サイドバーの [+] アイコンをクリックし、[リポジトリ] を選択します。
Bitbucket に、[新規リポジトリの作成] ページが表示されます。ダイアログに表示されるコンテンツをご確認ください。このページで入力する内容は、リポジトリ タイプを除いてすべて後から変更できます。

また、 シンプルなパイプ リポジトリ 1 つと、参照に使用したり、インポートしたりできる完全なパイプ リポジトリ 2 つ (Bash 用と Python 用) の、3 つのサンプル リポジトリを用意しています。

2. リポジトリをインポートする方法

  1. http://bitbucket.org を開き、ログインしていることを確認します。

  2. 左側のバーの [+] をクリックし、インポート見出しの下にある [リポジトリ] を選択します。

  3. サンプル リポジトリの URL を入力します (bash 用の完全なパイプの場合 - https://bitbucket.org/atlassian/demo-pipe-bash/src/main/)

  4. パイプ リポジトリに名前を付けます (例: my first bash pipe)

完全なパイプを作りたい場合、アトラシアンのジェネレータを使用してフレームワークを作成し、ファイルに部分的に入力できます。

3. 完全なパイプ ジェネレータを入手して使用する方法

  1. ローカル マシンに node.js をインストールします。

  2. アトラシアンのジェネレータは Yeoman を使用して実行します。そのため、Yeoman とアトラシアンのパイプ ジェネレータをインストールする必要があります。

    1 npm install -g yo generator-bitbucket-pipe
  3. これで準備が整いました。ジェネレータを実行してプロンプトに従います。

    1 yo bitbucket-pipe

    ジェネレーターは次の内容を確認します。

  • Bitbucket アカウント名

    • リポジトリ (ローカルで生成) の呼び名

    • Dockerhub ユーザー名

    • パイプに設定するタイトル

    • パイプを管理するユーザー

    • パイプで使用したい SVG ロゴが他の場所でホストされている場合、その URL (指定しない場合、既定でリポジトリ内の場所に設定されます)

    • パイプの説明に使用したいメタデータ タグがある場合、その情報 (例: 'Deployment' や 'kubernetes')

ジェネレーターはこの情報を使用して必要なファイルを作成し、情報を可能な限り入力します。

ステップ 2 - スクリプトまたはバイナリを作成する

これはパイプが呼び出されたときに実行される、パイプの主要部分です。パイプ タスクを実行するためのすべてのコマンドとロジックが含まれます。任意のコーディング言語を使用して、スクリプトまたはバイナリ ファイルを作成します。

簡単なスクリプトは次のようになります。

例: pipe.sh

1 2 3 #!/usr/bin/env bash set -e echo 'Hello World'

処理を拡張したい場合、変数を使用できます。

パイプを呼び出すパイプライン ステップで使用可能な任意のデフォルト変数 (デフォルト変数の一覧を参照) と、パイプが呼び出されたときに提供される任意のパイプ変数を使用できます。pipe.yml に記載する場合、ユーザー定義の変数 (アカウントとチーム、リポジトリ、またはデプロイメント) のみを使用できます (詳細は後述)。

例: pipe.sh

1 2 3 4 5 6 7 8 9 #!/usr/bin/env bash set -e echo 'Hello $BITBUCKET_REPO_OWNER' #when you call the pipe from your pipeline #you can provide variables, for example here: GREETING echo '$GREETING'

いくつかの変数を必須にしたり、指定した既定値を変数で使用するようにしたりすることができます。既定値を指定する方法は 2 とおりあります。ここではスクリプトでの定義方法を示しますが、後ほど、pipe.yml ファイルを使用する、より強力な方法について説明します。bash の完全なパイプの例では両方について説明します。

必須および推奨変数を使用する pipe.sh の例

完全なリポジトリでは、スクリプトは pipe ディレクトリに保存されます。

以下のスクリプトでは 3 つの変数を使用できますが、2 つの変数に対して適切な既定値を設定することで、内容をシンプルに保つことができます。これにより、パイプのエンド ユーザーは $NAME を提供するだけでパイプを動作させることができます。

トラブルシューティングに役立つデバッグ モードを提供することもおすすめします。この例ではコマンドをターミナルに出力するだけですが、ここにあらゆる種類の詳細を追加して、ユーザーが問題の原因を追跡できるよう支援できます。

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 31 32 33 # # Required globals: # NAME # # Optional globals: # GREETING (default: "Hello World") # DEBUG (default: "false") source "$(dirname "$0")/common.sh" info "Executing the pipe..." enable_debug() { if [[ "${DEBUG}" == "true" ]]; then info "Enabling debug mode." set -x fi } enable_debug # required parameters NAME=${NAME:?'NAME environment variable missing.'} # default parameters GREETING=${GREETING:="Hello world"} DEBUG=${DEBUG:="false"} run echo "${GREETING} ${NAME}" if [[ "${status}" == "0" ]]; then success "Success!" else fail "Error!" fi

より強力な pipe.yml ファイルを使用する方法については、後ほどこのガイドで解説します。

パイプのエンド ユーザーが使いやすいよう、必須変数は最小限に抑えることをおすすめします。変数に適切な既定値がある場合はスクリプトでそれらを指定すると、エンド ユーザーは必要に応じて変数をオーバーライドできます。

また、ログ出力に色を追加し、外部情報に遷移できるクリック可能なリンクを提供することをおすすめします。

これからスクリプトを実行するため、スクリプトが実行可能である必要があります (したがって、ターミナルで chmod +x pipe.sh を実行することが必要な可能性があります)。アトラシアンのサンプル リポジトリを使用している場合、これはすでに完了しています。

ステップ 3 - Dockerfile を構成する

先ほど作成したスクリプトを実行するには、スクリプトを Docker コンテナーに入れる必要があります。Dockerfile は、この Docker コンテナーを構築する方法の詳細を定義します。最低でも、FROMCOPY、および ENTRYPOINT の値が必要です。

FROM、COPY、および ENTRYPOINT の詳細情報

コマンド

詳細とヒント

FROM <imagename>

Docker コンテナのベースとして使用するイメージを示します。

例: Alpine Linux バージョン 3.8 を使用するには、"alpine:3.8" を使用します。

ヒント:

  • 正式な Docker イメージを使用するようにします。

  • 可能な場合は軽量なイメージを使用するようにします。これらは、しばしば "alpine" または "slim" バージョンと呼ばれます。これらはサイズが小さく、素早くダウンロードできるため、パイプを高速化します。

  • latest タグを使用するのではなくイメージ バージョンを指定して、イメージの変更でパイプが壊れないようにします。

イメージの操作の詳細については、Docker のベスト プラクティスのドキュメントを参照してください。

COPY <source> <destination>

スクリプト (またはバイナリ) をコンテナにコピーします。

例: pipe ディレクトリの内容をコンテナのルートにコピーするには、次のようにします。 

COPY pipe/

ヒント:

パイプのパフォーマンスを確保するため、パイプで実行する必要があるファイルのみをコピーします。

ENTRYPOINT [“<path to script/binary”]

コンテナが作成されたときに実行するスクリプトまたはバイナリへのパス。

例: コンテナのルートにコピーしたばかりのスクリプト pipe.sh を実行するには、次のようにします。

ENTRYPOINT [“/pipe.sh”]

ヒント: パスは、元の pipe リポジトリではなくコンテナ内での場所です

bash の完全なパイプのサンプルの場合、すでにルート ディレクトリに Dockerfile が含まれています。

1 2 3 4 FROM alpine:3.8 RUN apk update && apk add bash COPY pipe / ENTRYPOINT ["/pipe.sh"]

この場合、コンテナは次のことを実行します。

  • Alpine Linux 3.8 イメージを使用する

  • 更新コマンドを実行し、コンテナに bash をインストールする

  • pipe ディレクトリの内容をルート ディレクトリにコピーする

  • pipe.sh の実行を開始する

これらをニーズに合わせて編集できます。Alpine Linux 3.9 を使用したい場合、FROM alpine:3.9 を読み込むように FROM を変更するだけです。

Linux にさらにパッケージをインストールしたい場合、RUN コマンドに追加します。その前に、それらのパッケージをインストール済みのイメージがあるかどうかを Dockerhub で確認してください。これにより、貴重な時間を節約できます。

希望どおりのスクリプトとコンテナを作成するために、複数回の反復作業が必要になることがあります。これを考慮し、Docker をローカル マシンにインストールすることをおすすめします。こうすることで、ビルド時間を使用せずにパイプ コンテナのビルドと実行をテストできます。 

ローカルでの docker の使用についての詳細

Docker をインストールしたら、イメージをビルドする必要があります。

1 docker build -t bitbucketpipelines/demo-pipe-bash:0.1.0 .

ここで:

  • -t: 指定された名前、イメージ名、およびタグで、アカウントのイメージを作成します。

  • .: Docker で、現在のディレクトリを Docker ビルドのルートとして使用するように指定します (現在のディレクトリで Dockerfile という名前のファイルを自動的に検索します)。

次に、新しく構築されたイメージを実行し、-e を使用して変数を渡すことができます。

1 2 3 4 5 6 docker run \ -e NAME="first last" \ -e DEBUG="true" \ -v $(pwd):$(pwd) \ -w $(pwd) \ bitbucketpipelines/demo-pipe-bash:0.1.0

ローカルでの Docker の実行について詳細をご確認ください。

ステップ 4 - パイプ コンテナを Dockerhub に更新するための基本的なパイプラインを作成する

シンプルなパイプを作成する最後のステップは、コンテナを構築し、それを Dockerhub にアップロードすることです。

必ずしもパイプラインを使用する必要はありませんが、これによって将来の更新が容易になり、バージョン番号が自動的に更新されるため、最新バージョンを使用していることをすばやく確認できます。

以下のサンプルの bitbucket-pipelines.yml は、コミットのたびにコンテナーの新しいバージョンをビルドして Dockerhub にプッシュします。したがって、Docker コンテナーで使用したいイメージを更新したり、スクリプトを変更したりすると、このファイルによって Dockerhub のバージョンが自動的に最新に保たれます。dockerhub アカウントを持っていることを確認したら、pipe リポジトリに 2 つの変数 DOCKERHUB_USERNAMEDOCKERHUB_PASSWORD を追加し、パイプラインを有効化します。

例: bitbucket-pipelines.yml

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 image: name: atlassian/default-image:2 pipelines: default: - step: name: Build and Push script: # Build and push image - VERSION="1.$BITBUCKET_BUILD_NUMBER" - echo ${DOCKERHUB_PASSWORD} | docker login --username "$DOCKERHUB_USERNAME" --password-stdin - IMAGE="$DOCKERHUB_USERNAME/$BITBUCKET_REPO_SLUG" - docker build -t ${IMAGE}:${VERSION} . - docker tag ${IMAGE}:${VERSION} ${IMAGE}:latest - docker push ${IMAGE} # Push tags - git tag -a "${VERSION}" -m "Tagging for release ${VERSION}" - git push origin ${VERSION} services: - docker

これでシンプルなパイプができました。

シンプルなパイプに必要な手順は以上です。これで、次の構文を使用して、ステップでパイプを参照できるようになりました。

1 pipe: docker://<DockerAccountName>/<ImageName>:<version>

パイプ作成の次のステップは、長期的な利便性を高め、他のユーザーがパイプを使用しやすくするために設計されています。正式にサポートされるパイプを作りたいユーザーの場合、このステップが必要です。

完全なパイプを作成する場合は、以下もセットアップする必要があります。

  • パイプのメタデータ -パイプの詳細 (保守担当者の名前など)

  • readme - パイプの使用方法の詳細 (必要な変数など)

  • 自動テスト - 変更によって問題が発生していないことの確認

  • セマンティック バージョニング - 使用するパイプのバージョンを明確にする

  • デバッグ ロギング - 何か問題が生じた場合にエンド ユーザーが容易にトラブルシューティングできるようにする

これらはサンプル リポジトリ (BashPython) で構成済みなので、リンク先をご確認ください。次のステップをご案内します。

ステップ 5 - pipe.yml (メタデータ ファイル) を作成する

pipe.yml ファイルは、パイプを分類するための便利な情報を提供します。

キーワード

説明

name

パイプに対して表示する名前またはタイトル。

image

account/repo:tag の形式で Dockerhub 上で作成した、パイプの Docker イメージ。

category

パイプのカテゴリ。次のいずれかになります。

  • Alerting

  • Artifact management

  • Code quality

  • Deployment

  • Feature flagging

  • Monitoring

  • Notifications

  • Security

  • Testing

  • Utilities

  • Workflow automation

description

パイプの実行内容を説明する簡単な要約。

repository

Bitbucket パイプ リポジトリの絶対 URL。例: atlassian/demo-pipe-bash

maintainer

name、website、email を含むオブジェクト。

  • Name は、メンテナンスの担当会社の名前です。

  • Website は、メンテナンスの担当会社の Web サイトです。

  • Email は、パイプのメンテナンスを行うチームまたは担当者のメール アドレスです (オプション)

vendor

name、website、email を含むオブジェクト。ベンダー パイプの場合、このフィールドの入力は必須です。

  • Name はベンダー企業の名前です。

  • Website はベンダー企業の Web サイトです。

  • Email は、ベンダー企業、チーム、または担当者のメール アドレスです (オプション)。

tags

パイプの検索と分類に役立つキーワード。オプションとして、パイプが実行する関数のタイプ (deploy、notify、test)、製品名、会社名、名前、連携している特定のツールなどを含めることができます。

variables (オプション)

namedefault を含むオブジェクト。

  • name - 変数の名前。

  • default - 既定値、またはパイプラインの設定された環境変数から取得する変数。

pipe.yml ファイルは次のように表示される可能性もあります。

pipe.yml の例

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 name: My demo pipe image: bitbucketpipelines/demo-pipe-bash:0.1.0 category: Utilities description: Showing how easy is to make pipes for Bitbucket Pipelines. variables: - name: ENV_NAME default: ‘Production’ - name: SECRET_KEY default: ‘${SECRET_KEY}’ # this is pulling the value of $SECRET_KEY from the pipeline - name: COMMIT_HASH default: "$BITBUCKET_COMMIT" repository: https://bitbucket.org/atlassian/demo-pipe-bash maintainer: name: Atlassian website: https://www.atlassian.com/ja/ email: contact@atlassian.com vendor: name: Demo website: https://example.com/ email: contact@example.com tags: - helloworld - example

ステップ 6 - README.md (readme ファイル) を作成する

ユーザーは readme を使用して、パイプの使用方法を確認できます。これは Bitbucket で表示されるため、マークダウンで特定の形式で記述し、見出しを順番に並べる必要があります。

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 # Bitbucket Pipelines Pipe: <pipe_name> <pipe_short_description> ## YAML Definition Add the following snippet to the script section of your `bitbucket-pipelines.yml` file: <pipe_code_snippet> ## Variables <pipe_variables_table> ## Details <pipe_long_description> ## Prerequisites <pipe_prerequisites> ## Examples <pipe_code_examples> ## Support <pipe_support>

セクション

説明

<pipe_name>

パイプ名

<pipe_short_description>

パイプの実行内容の要約 - 次の形式を使用することをお勧めします。"[宛先 | ベンダー | スイート] (への) [アクションを表す動詞]" 例: "Dockerhub へのデプロイ" または "Opsgenie への通知"

<pipe_code_snippet>

ユーザーがパイプを使用するためにパイプラインにコピーして貼り付ける必要があるもの

<pipe_variable_table>

パイプが必要とする変数の一覧。必須か任意かを明確にします。

<pipe_long_description>

使用方法、構成、セットアップなどの詳細な説明。

<pipe_prerequisites>

パイプを使用する前に必要となるもの。例: インストール済みのパッケージ、サードパーティ システムのアカウント。

<pipe_code_examples>

サンプル変数を持つコード スニペット。少なくとも以下を網羅することをおすすめします。

  • 基本的なパイプ: 必須変数のみ。

  • 高度なパイプ: すべての変数。

<pipe_support>

質問やサポートのための問い合わせ先を記載します。
バックアップとして、アトラシアンのコミュニティを案内することもできます。他のユーザーが同じ質問を投稿していた場合は簡単に回答が見つかりますが、これはパイプ ユーザーに良いエクスペリエンスを提供するとは限りません。

次の readme の例をご確認ください。

Atlassian の Slack 通知パイプの readme は次のとおりです。

Bitbucket Pipelines Pipe: Slack Notify

Sends a notification to Slack.

YAML Definition

Add the following snippet to the script section of your bitbucket-pipelines.yml file:

1 2 3 4 5 - pipe: atlassian/slack-notify:0.2.1 variables: WEBHOOK_URL: '<string>' MESSAGE: '<string>' # DEBUG: '<boolean>' # Optional.

Variables

変数

用途

WEBHOOK_URL (*)

Incoming Webhook URL. It is recommended to use a secure repository variable.

MESSAGE (*)

Notification message.

DEBUG

Turn on extra debug information.Default: false.

(*) = required variable.

前提条件

To send notifications to Slack, you need an Incoming Webhook URL. You can follow the instructions here to create one.

Basic example:

1 2 3 4 5 script: - pipe: atlassian/slack-notify:0.2.1 variables: WEBHOOK_URL: $WEBHOOK_URL MESSAGE: 'Hello, world!'

サポート

If you’d like help with this pipe, or you have an issue or feature request, let us know on Community.

If you’re reporting an issue, please include:

  • パイプのバージョン

  • 関連するログとエラー メッセージ

  • 再現手順

License

Copyright (c) 2018 Atlassian and others. Apache 2.0 licensed, see LICENSE.txt file.

ステップ 7 - テストを作成する

パイプに自動統合テストを追加することをおすすめします。こうすることで、一般に公開する前に、期待どおりに動作していることを確認できます。たとえば、予期しない変数を処理する方法や、必要なサードパーティ サービスに正常に接続できるかどうかをテストできます。正式にサポートされる予定のパイプは、定期的にテストすることが非常に重要です。

テストの例

アトラシアンの bash デモ パイプでは bats (Bash Automated Testing System) を使用して基本的なテストを実行し、NAME 変数が渡された Dockerコンテナを実行できることを確認します。

例: test.bats

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 #!/usr/bin/env bats setup() { DOCKER_IMAGE=${DOCKER_IMAGE:="test/demo-pipe-bash"} echo "Building image..." run docker build -t ${DOCKER_IMAGE} . } teardown() { echo "Teardown happens after each test." } @test "Dummy test" { run docker run \ -e NAME="baz" \ -v $(pwd):$(pwd) \ -w $(pwd) \ ${DOCKER_IMAGE} echo "Status: $status" echo "Output: $output" [ "$status" -eq 0 ] }

ステップ 8 - パイプをデバッグしやすくする

スクリプトには、パイプで行われていることの追加情報を出力するデバッグ モードを追記することをおすすめします。

また、ログに表示されるリンクをクリックできるようにし、出力では色を使用して重要な情報を強調表示することをおすすめします。

これを行う方法はスクリプトの作成に使用している言語によって異なりますが、アトラシアンの bash デモ リポジトリの common.sh ファイルで例を確認できます。

ステップ 9 - テストと更新を自動化するよう CI/CD をセットアップする

また、CI/CD を以下に使用することをお勧めします。

  • 自動テスト

  • Dockerhub (または選択したサイト) への自動アップロード

  • 以下のバージョン番号を自動的に更新

    • 変更履歴

    • readme

    • メタデータ

bitbucket-pipelines.yml ファイルを構成したら、パイプラインを有効化できます。リポジトリの [設定] > [Pipelines] セクション > [設定] > [パイプラインの有効化] でパイプラインを有効にできます。

CI/CD ワークフローの例

アトラシアンでは、すべてのパイプ開発作業をフィーチャー ブランチで実行するワークフローを推奨しています。フィーチャー ブランチの任意のコミットによってテストが実行されるようにパイプラインをセットアップします。

テストに合格したら、自信を持ってそれを main ブランチにマージできます。このマージは、パイプのバージョンを更新する main ブランチ固有のパイプラインをトリガーして (これを行う方法については次のステップで説明します)、イメージを Docker にアップロードします。

アトラシアンの bash デモ リポジトリではこれらのパイプラインを次のようにセットアップしています。

例: 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 31 32 image: name: atlassian/default-image:2 test: &test step: name: Test image: atlassian/default-image:2 script: - npm install -g bats - bats test/test.bats services: - docker push: &push step: name: Push and Tag image: python:3.6.7 script: - pip install semversioner==0.6.16 - ./ci-scripts/bump-version.sh - ./ci-scripts/docker-release.sh bitbucketpipelines/$BITBUCKET_REPO_SLUG - ./ci-scripts/git-push.sh services: - docker pipelines: default: - <<: *test branches: main: - <<: *test - <<: *push

ステップ 10 - セマンティック バージョニングをセットアップする

パイプにセマンティック バージョニング (semver) を使用することをお勧めします。これにより、どのバージョンが最新であるか、どのバージョンを使用すべきか、更新によって問題が発生する可能性があるかどうかが明確になります。バージョンは 3 つの部分に分かれます: <major>.<minor>.<patch>。例: 6.5.2

行った変更に応じてバージョン番号を増やします。次のように更新します。

  • major: 既存のユーザーによる使用に問題が生じる可能性のある変更を加えた場合 (例: 必須変数の名前の変更)

  • minor: 下位互換性のある方法で機能を追加した場合

  • patch: 下位互換性のあるバグ修正の場合

バージョンを変更する際は、複数の場所の更新が必要な場合があります。この作業を簡素化する、semversioner (https://pypi.org/project/semversioner/) と呼ばれるツールがあります。このツールは、変更履歴に新しいエントリを作成し、バージョン番号を更新して、リポジトリにコミットします。

semversioner の使用についての詳細

1. ローカル マシンに semversioner をインストールします。

pip install semversioner

2. 開発中は、main に統合する変更には 1 つ以上のチェンジセットファイルが必要です。semversioner を使用してチェンジセットを生成します。

semversioner add-change --type patch --description "Fix security vulnerability."

3. コードを使用して、.change/next-release/ フォルダで生成されたチェンジセット ファイルをコミットします。次に例を示します。

git add .

git commit -m "BP-234 FIX security issue with authentication"

git push origin

4. Atlassian のデモ リポジトリをインポートした場合は、これで完了です。main にマージすると、それ以降の操作は Bitbucket Pipelines によって実行されます。

  • チェンジセット タイプ majorminorpatch に基づいて新しいバージョン番号を生成します。

  • この特定のバージョンのすべての変更を含む新しいファイルを .changes ディレクトリに生成します。

  • CHANGELOG.md ファイルを (再) 生成します。

  • README.md の例と pipe.yml メタデータのバージョン番号を上げます。

  • コミットしてリポジトリにプッシュ バックします。

  • 新しいバージョン番号を使用してコミットにタグを付けます。

これは、semversioner を使用する 3 つのスクリプトを呼び出すパイプラインと、パイプ リポジトリで使用可能な変数によって実現されます。アトラシアンのサンプル CI スクリプトをご覧ください。

ステップ 11 - 新しい完全なパイプを使用する

パイプのシンプルなバージョンと同様、最後のステップはコンテナを構築して Dockerhub にプッシュすることです。 

他のリポジトリでこのパイプを参照する方法は 2 とおりあります。bitbucket-pipelines.yml ファイルでは、次の操作を実行できます。

  1. docker イメージを直接参照する 
    pipe: docker://acct/repo:tag (ここで acct/repo は Dockerhub のアカウントとリポジトリ) 注: Docker のパブリック イメージを参照する際は、必ず docker:// を指定する必要があります。

  2. Bitbucket でホストされているパイプ リポジトリを参照する
    pipe: <BB_acct>/repo:tag (ここで、BB_acct/repo は自分の Bitbucket アカウントとパイプ リポジトリです)
    この参照バージョンは pipe.yml ファイルでイメージの取得先を見つけます。

高度なヒント

  • Docker イメージをホストする別のサービスがある場合は Dockerhubを使用する必要はありませんが、イメージは公開されている必要があります

  • Docker をローカル マシンにインストールすることで、アップロードの前にすべてがうまく動作することをテストできます。

  • 重要な変数がある場合は、それらの変数が提供され、有効であることをスクリプトでテストするようにします。

  • 必須変数は最小限に抑え、可能であれば既定値を指定します。

  • 予期せぬ事態が発生した場合に備えて、迅速かつ効率的にパイプ サポートを提供できるプロセスを用意しておきます。フィードバックをすばやく受け取り、パイプ ユーザーにより良いエクスペリエンスを提供できます。

  • 他のパイプと共有したいファイル、またはメイン パイプラインで使用するファイルを作成する場合、そのファイルの権限を編集する必要があります。これを行う一般的な方法として、パイプ スクリプトの先頭に umask 000 を配置します。1 つのファイルの値のみを変更したい場合、chown または chmod コマンドを使用することもできます。

  • 最適な引用方法や配列変数を渡す方法などのさらに高度なパイプ記述テクニックをご覧ください。

公式パイプへの参加

パイプを登録してアトラシアンの公式リストへの追加を依頼できます。その場合、完全なパイプの作成方法に従っていることをご確認ください。

パイプの投稿方法の詳細をご覧ください。

さらにヘルプが必要ですか?

アトラシアン コミュニティをご利用ください。