先日以下のようなことをした。
しかし、僕が履歴を取りたいリソースグループにデプロイしているアプリケーションはBitbucketでリポジトリ管理していることに気が付いてしまった。仕方ないので同様のことをBitbucket Pipelinesで行った。
以下のような定義を行って好きなタイミングで実行できるようにした。
image: atlassian/default-image:2 pipelines: custom: default: - step: script: # azure-cli イメージを使って指定したARMテンプレートをエクスポートする。 - >- docker run -v ${BITBUCKET_CLONE_DIR}:${BITBUCKET_CLONE_DIR} -w ${BITBUCKET_CLONE_DIR} -e AZURE_APP_ID=${AZURE_APP_ID} -e AZURE_PASSWORD=${AZURE_PASSWORD} -e AZURE_TENANT_ID=${AZURE_TENANT_ID} microsoft/azure-cli:2.0.57 bash -c ' echo "AZURE_TENANT_ID:${AZURE_TENANT_ID} AZURE_APP_ID:${AZURE_APP_ID}"; az login --service-principal --username "${AZURE_APP_ID}" --password "${AZURE_PASSWORD}" --tenant "${AZURE_TENANT_ID}"; az group export --name test > test.json.txt' # 差分があればコミットして自リポジトリにプッシュする。 - | if [ -n "$(git status --porcelain)" ]; then git add . git commit -m "Update ARM template." git push else echo "No change" fi services: - docker caches: - docker
BITBUCKET_CLONE_DIR
配下のディレクトリのみをDockerコンテナにマウントできるらしいのでそうしている。この変数は自動的に設定される。
Dockerコマンドの実行については以下辺りに書いてある。
Bitbucket Pipelines で Docker コマンドを実行する - アトラシアン製品ドキュメント
AZURE_APP_ID
AZURE_PASSWORD
AZURE_TENANT_ID
は認証情報なので変数として設定しておく。PASSWORDはSecureだ。
認証情報を作るにはこの辺 Use Azure service principals with Azure CLI | Microsoft Docs を見ろ、と後述の Azure CLI run pipe の案内には書いてあった。
リポジトリへのPushbackは素直に行える。詳しくは以下に書いてあるようだ。
Push back to your repository - Atlassian Documentation
スケジュールしたかったらスケジュール機能がある。
Scheduled pipelines - Atlassian Documentation
ブラウザ上から任意のタイミングで実行もできる。
警告が出てるがまぁよし!
当初はAzure CLI run pipe を使おうとしたのだが CLI_COMMAND
はそれ全体1つのコマンドとして実行されるように作られているようで、パイプしてのAzure CLIの出力取得ができなかった。仕方ないのでAzure CLI(のDockerイメージを)直接使った次第。
image: atlassian/default-image:2 pipelines: custom: default: - step: script: - pipe: microsoft/azure-cli-run:1.0.2 variables: AZURE_APP_ID: $AZURE_APP_ID AZURE_PASSWORD: $AZURE_PASSWORD AZURE_TENANT_ID: $AZURE_TENANT_ID CLI_COMMAND: 'az group export --name test > test.json.txt' # DEBUG: DEBUG # Optional - | if [ -n "$(git status --porcelain)" ]; then git add . git commit -m "Update ARM template." git push else echo "No change" fi