azukipochette's weblog

memory dump (mini)

Terraform の Azure DevOps プロバイダー

Terraform に Azure DevOps プロバイダーが追加されました。

www.terraform.io

Microsoft からも公式にアナウンスがありましたが、(なぜか)Azure DevOps Blog ではなく、Open Source Blog から発表されたので、気が付かなかったという人もいるかもしれません。

cloudblogs.microsoft.com

このプロバイダーを使えば、チーム プロジェクト、グループ、リポジトリ、ビルド定義などを Terraform で管理できるようになります。まだまだ機能的に制限はありますが、プロジェクト作成時に毎回同じ設定を手作業でするのが大変...という管理者の方には便利かと思います *1

インストール方法

まだ Terraform Registory には存在しないらしいので、自分でプラグインをインストールする必要があります。 GitHub ページの Release から入手します。

github.com

インストール方法は使われているプラットフォームなどによってことなりますが、私は Terraform を WSL2 (Pengwin) 上で使っているので、以下のような流れで導入しました。

mkdir ~/.terraform.d/plugins/linux_amd64
cd ~/.terraform.d/plugins/linux_amd64
wget https://github.com/microsoft/terraform-provider-azuredevops/releases/download/v0.1.3/terraform-provider-azuredevops_v0.1.3_linux_amd64.tar.gz
tar zxvf terraform-provider-azuredevops_v0.1.3_linux_amd64.tar.gz
chmod +x terraform-provider-azuredevops_v0.1.3

使い方

チームプロジェクトを新規に作成し、作成したプロジェクトに Git リポジトリを追加する場合は以下のような tf ファイルを記述します。

provider "azuredevops" {
    version = ">= 0.0.1"
}

resource "azuredevops_project" "project" {
    project_name = "Sample Project"
    description = "This is Sample Project"
    visibility = "private"
    version_control = "Git"
    work_item_template = "Scrum"
}

resource "azuredevops_git_repository" "repo" {
  project_id = azuredevops_project.project.id
  name       = "Sample Empty Git Repository"
  initialization {
    init_type = "Clean"
  }
}

対象の Azure DevOps 組織の URL や実行に使用するパーソナル アクセス トークン (PAT) は環境変数として設定します。*2

export AZDO_ORG_SERVICE_URL="https://dev.azure.com/<your org>/"
export AZDO_PERSONAL_ACCESS_TOKEN="<your PAT>"

おまけ

現時点でのリソースの一覧を以下に示します。
なお、実際に使うとすぐに気が付きますが、ドキュメントに記載はあっても、使おうとするとリリース バージョンにまだ実装されていないことがあるので、ドキュメントは参考程度に参照するとよいと思います。

  • azuredevops_agent_pool
  • azuredevops_agent_queue
  • azuredevops_git_repository
  • azuredevops_branch_policy_build_validation
  • azuredevops_branch_policy_min_reviewers
  • azuredevops_build_definition
  • azuredevops_group
  • azuredevops_group_membership
  • azuredevops_project
  • azuredevops_project_features
  • azuredevops_resource_authorization
  • azuredevops_serviceendpoint_azurerm
  • azuredevops_serviceendpoint_bitbucket
  • azuredevops_serviceendpoint_dockerhub
  • azuredevops_serviceendpoint_github
  • azuredevops_serviceendpoint_kubernetes
  • azuredevops_user_entitlement
  • azuredevops_variable_group

*1:リリースされたばかりで、できなことがたくさんありますが...

*2:PAT の権限は使用するリソースに依存します。最適な権限を設定してください。