LoginSignup
10
4

More than 5 years have passed since last update.

Azure PipelinesへtagをpushしてBuildとReleaseさせたい

Posted at

今回はAzure Pipelinesで以下のようにするのがゴールです。

  • v1.0.0 といったvで始まるタグがpushされたとき、ビルドとリリースを行う
  • masterブランチがpushされたとき、ビルドのみ行う
  • 他のブランチはpushされても何もしない

やっていきましょう。

Build

see: https://docs.microsoft.com/ja-jp/azure/devops/pipelines/build/triggers

Pipelinesでは「Build」を行う必要があります。その際に何をトリガーにするかを設定する事が出来ます。

v1.0.0等のvで始まるタグとmasterブランチの変更でトリガさせる場合のyamlファイルの設定例です。

azure-pipelines.yml
trigger:
  branches:
    include:
    - refs/tags/v*
    - master

なお、pull requestについてはこの辺りに書かれていますが、今回は触れません。(よくわからない)

Release

次にビルドで作成した成果物をどのようにリリースするかをReleaseで定義していきます。こっちは画面上で作る必要があります。。。

なお、Stagesは今回は関係ないので触れません。

image.png

まずはArtifactsを決めます。

Default VersionをLatestにしておきます。これでビルドが行われるたびに出来上がる成果物をトリガーに動くようになります。
(それ以外はよくわかっていない。PipelinesのBuildに対してもgitのタグではない別のタグがつけれるようなので、それに関するフィルター条件だと思われる。)

しかし、これだけだとmasterブランチのビルドにも反応してしまうので、次の設定でタグが付いたもののみを行うようにします。

image.png

Artifactsのトリガー(?)の設定です。雷のマークを押してメニューを出します。

  • 「Continuous deployment trigger」を有効化にする
  • 「Continuous deployment trigger」のBuild branch filtersのBuild Branchのところをrefs/tags/v*としておく

これでvで始まるタグについてBuildがうまくいったときだけReleaseの処理を行うようになります。
masterブランチはBuildは行われるがReleaseは行われず、他のブランチ・タグは何も起きないようになります。

以上です。

おまけ:ビルドに関する情報を埋め込む

もし成果物にビルド番号を埋め込みたい場合、以下の環境変数があるので使えるかもしれない。

see: https://docs.microsoft.com/ja-jp/azure/devops/pipelines/build/variables

環境変数 意味
BUILD_SOURCEBRANCHNAME ブランチ名/タグ名 master, v1.0.0
BUILD_SOURCEBRANCH ブランチ名/タグ名 refs/tags/v1.0.0
BUILD_SOURCEVERSION コミットID b995561c1e...
BUILD_BUILDNUMBER ビルド番号(日付.連番) 20190201.7
BUILD_BUILDID ビルド番号(シーケンス) 30
SYSTEM_PIPELINESTARTTIME ビルド開始日時 2019-02-01 14:26:56+00:00

後はBuild時にこの環境変数を使ってファイルに書き出すような事を行う。

以下は雑だけどHostedなubuntuイメージに入っているenvsubstを使うやり方です。

まず置き換えもとになるファイルを用意します。今回はPythonで定数を並べたファイルを作る事にします。
envsubstで環境変数の値に置き換えたい箇所を$環境変数名(例:$BUILD_BUILDNUMBER)というように書いていきます。

buildinfo.py
# Don't touch me!!
BUILDNUMBER="$BUILD_BUILDNUMBER"
SOURCEVERSION="$BUILD_SOURCEVERSION"
SYSTEM_PIPELINESTARTTIME="$SYSTEM_PIPELINESTARTTIME"

後は以下のようなビルドのタスクを書きます。
一時ファイルで書き出して、envsubstで置き換えたファイルで上書きして、一時ファイルを削除する、という事をやってます。

ファイルパスとかファイル名はいい感じに調整します。

- script: cp buildinfo.py buildinfo.py.temp && envsubst < buildinfo.py.temp > buildinfo.py && rm buildinfo.py.temp
  displayName: 'Write buildinfo.py'

すると、以下のようなファイルで書きだされます。

buildinfo.py
# Don't touch me!!
BUILDNUMBER="20190201.7"
SOURCEVERSION="b995561c1e..."
SYSTEM_PIPELINESTARTTIME="2019-02-01 14:26:56+00:00"

あとはメインのコードでこんな感じで使います。

import buildinfo
buildinfo.BUILDNUMBER # "20190201.7"

ローカルで開発中は 置き換え前の文字 $BUILD_BUILDNUMBER と出てしまうのでちょっと残念。良いやり方があれば是非…

10
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
4