Azure DevOpsのPipelines ymlまとめ
はじめに
Azure DevOps の Pipelines におけるよく使う処理・タスクの書き方をまとめます。(随時追加予定)
MS のドキュメント、探しにくいんよな・・・
こんなんあるし、英語で探したほうがいいと思います。

前提
ubuntu を想定しています。
Windows や Mac は対象外です。(動くかもしれませんが、私は未検証です。)
セキュアファイルダウンロード
Library 画面の Secure files にアップロードしたファイルをダウンロードできます。
steps:
- task: DownloadSecureFile@1
name: secureFileTask
inputs:
secureFile: ".env.dev"
- script: |
ls -al $(secureFileTask.secureFilePath)
yml を分割し、共通化したい
使いまわしたいときに。
参照元
extends:
template: template/common-cicd.yml # 参照元から見たパス
parameters:
val1: "hoge"
参照先
parameters:
- name: val1
type: string
variables:
VAL1: ${{ parameters.val1 }}
stages:
- stage: TEST_STAGE
# 以降省力
パラメータを渡せるので、環境によってアクセス先などの設定を変えたい場合に使えます。
ステージに依存関係を追加する
stages:
- stage: Test
- stage: DeployUS1
dependsOn: Test # Testの後に実行
- stage: Test2
- stage: DeployUS2
dependsOn: [DeployUS1, DeployUS2] # 複数指定OK
条件を追加する
ステージ、ジョブ、ステップのそれぞれで条件を追加できます。
- stage: Test
dependsOn: [PreTest]
condition: succeeded()
variables:
HAS_HOGE: $[ stageDependencies.PreTest.hoge.outputs['hogehoge.HAS_HOGE'] ]
jobs:
- job: Fuga
pool: { vmImage: "ubuntu-latest" }
condition: eq(variables['HAS_HOGE'], 'true') # ステージ跨ぎの変数をステージ条件には使えないようなので、ジョブ条件で使うパターン
steps:
- task:
condition: succeeded()
条件に使用する式(eq、ne など)はこちらを参照
日本語ページは酷い。
変数を別ステージで使いたい
出力方法
$HOGE1="1"
echo "##vso[task.setVariable variable=HOGE2;isOutput=true]$HOGE1"
参照方法
- stage: TEST
dependsOn: HOGE # 依存指定がないと取得されない
variables:
HOGE2: $[ stageDependencies.STAGE_NAME.JOB_NAME.outputs['task_name.HOGE2'] ]
isOutput=trueが重要になります。
これがないと別ステージで参照できません。
STAGE_NAME、JOB_NAME は変数出力した stage と job の名称を指定します。
ビルド成果物を発行し、ダウンロードする
# 発行
steps:
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: hoge/fuga.json # フォルダーまたはファイル パス。 デフォルト $(Build.ArtifactStagingDirectory)
ArtifactName: fuga
publishLocation: 'Container'
# ダウンロード
steps:
- download: current
artifact: fuga
displayName: download fuga
continueOnError: true # エラーでも続ける
# 別ステージでの成果物をダウンロードする場合は、依存に追加
stages:
- stage: Test
jobs:
job: build
pool: {vmImage: 'ubuntu-latest'}
steps:
- publish: hoge/fuga.json
artifact: fuga
- stage: DeployUS1
dependsOn: Test
jobs:
job: build
pool: {vmImage: 'ubuntu-latest'}
steps:
- download: current
artifact: fuga
displayName: download fuga
スクリプトで AWS クレデンシャルを使用する
variables:
AWS_CREDENTIAL: 'aws-credential' # Azure DevOpsのServiceConnectionに登録した名前
AWS_REGION: 'ap-northeast-1'
# ~~~省略~~~
- task: AWSShellScript@1
displayName: AWS Work
inputs:
awsCredentials: $(AWS_CREDENTIAL) # 変数OK
regionName: $(AWS_REGION)
scriptType: 'inline'
inlineScript: |
# 作業ディレクトリは通常のScriptと同じ
pwd
# profileの指定なしでOK
# aws cliコマンド s3やssmなど
AWS コマンドを実行する
単発のコマンド実行であれば、こちらも使えます。
awsCommand、awsSubCommand、awsArgments は CLI での入力と同じです。
- task: AWSCLI@1
displayName: put param
inputs:
awsCredentials: $(AWS_CREDENTIAL)
regionName: $(AWS_REGION)
awsCommand: ssm
awsSubCommand: put-parameter
awsArgments: --name "app/dev/latest-version" --type String --value "1.0.0" --overwrite
@1 とありますが、こちらはタスクのメジャーバージョンなので、AWS CLI が v1 というわけではないそう。
ubuntu(22.04)では AWS CLI は v2 が入っています。
心配であれば、aws --versionをタスク内で実行してみるといいと思います。
