Azure PipelinesへtagをpushしてBuildとReleaseさせたい
今回は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ファイルの設定例です。
trigger:
branches:
include:
- refs/tags/v*
- master
なお、pull requestについてはこの辺りに書かれていますが、今回は触れません。(よくわからない)
Release
次にビルドで作成した成果物をどのようにリリースするかをReleaseで定義していきます。こっちは画面上で作る必要があります。。。
なお、Stagesは今回は関係ないので触れません。
まずはArtifactsを決めます。
Default VersionをLatest
にしておきます。これでビルドが行われるたびに出来上がる成果物をトリガーに動くようになります。
(それ以外はよくわかっていない。PipelinesのBuildに対してもgitのタグではない別のタグがつけれるようなので、それに関するフィルター条件だと思われる。)
しかし、これだけだとmasterブランチのビルドにも反応してしまうので、次の設定でタグが付いたもののみを行うようにします。
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
)というように書いていきます。
# 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'
すると、以下のようなファイルで書きだされます。
# 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
と出てしまうのでちょっと残念。良いやり方があれば是非…
Author And Source
この問題について(Azure PipelinesへtagをpushしてBuildとReleaseさせたい), 我々は、より多くの情報をここで見つけました https://qiita.com/fukasawah/items/e86cb1794b5328e1f6a9著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .