使用Terraform提供程序来配置和管理CircleCI的功能

你好。我是CircleCI客户成功团队的Chisato。

最近,我开始种了大约7种野菜。
每天早晨浇水,能感受到它们的成长,这成为了我每日的乐趣。

本次我们将介绍CircleCI的支持工程师Kelvin先生创建的Terraform提供程序(Terraform Provider for CircleCI)。
由于这个Terraform提供程序目前还不是CircleCI的官方提供,因此在使用时请注意。

准备物品

    • CircleCIのアカウント と プロジェクト

 

    Terraform

Terraform 配置

Terraform是HashiCorp公司提供的一种基础设施即代码(IaC)工具,可以安全高效地进行基础设施的配置管理,包括构建、修改和版本控制。

请访问此页面并安装Terraform。
macOS的开源版本可以通过Homebrew进行安装。

~ % brew tap hashicorp/tap
~ % brew install hashicorp/tap/terraform

要确认是否正确安装,请使用 terraform version 命令。

~ % terraform version
Terraform v1.4.5
on darwin_amd64

地表建模供应商

使用Terraform的提供者,可以与所有服务的API进行协作。
例如,在Terraform的官方教程中,介绍了用于创建AWS EC2的提供者。
在Terraform的注册表中,可以搜索和使用各种提供者。

如果您使用我们今次介绍的供应商,可以轻松创建和管理CircleCI的以下资源。

通常情况下,以下资源是通过CircleCI的用户界面来创建的。
例如,环境变量创建后需要将值保存在某处,以便管理和删除时需要访问相应的页面,这会带来一些麻烦。

使用这个提供商,您可以在 Terraform 的 *.tf 文件中轻松执行以下资源的创建/配置、编辑和删除。

    • Project Webhook (ウェブフック)

 

    • Project Scheduled Pipeline(パイプラインのスケジュール実行)

 

    • Project Environment Variables(環境変数)

 

    • Project Checkout key(チェックアウトキー)

 

    • Context(コンテキスト)

 

    Context Environment Variables(コンテキストの環境変数)

 

创建和管理 Webhook

由于Terraform 这个名字听起来很强大和酷炫,所以我以为它的提供程序设置会很复杂,但实际上非常简单。

在这里,我们将创建Webhook。

在目标项目的目录中创建一个名为 main.tf 的文件。

2. 访问提供商网页,点击“使用提供商”。点击用粉色框圈起来的代码部分以进行复制。或者,可以复制底部的代码并使用。

Screenshot 2023-04-25 at 14.38.32.png
terraform {
  required_providers {
    circleci = {
      source = "kelvintaywl/circleci"
      version = "0.9.3"
    }
  }
}

provider "circleci" {
  # Configuration options
}

 

将复制的代码粘贴并保存到 main.tf 中。

在提供商的网页上,点击 “Documentation”。然后,点击展开位于目标页面左侧的 “Resources” 下拉菜单。在 “Resources” 栏中,可以找到有关创建和管理功能的说明。

Screenshot 2023-04-25 at 14.54.45.png
data "circleci_project" "my_project" {
  slug = "github/acmeorg/foobar"
}

resource "circleci_webhook" "my_webhook" {
  project_id     = data.circleci_project.my_project.id
  name           = "my_webhook"
  url            = "https://example.com/hook"
  signing_secret = "5uperSeCr3t!"
  verify_tls     = true
  events = [
    // accepts only "workflow-completed" and "job-completed"
    "job-completed",
    "workflow-completed"
  ]
}

output "webhooks" {
  description = "my_webhook_id"
  value       = circleci_webhook.my_webhook.id
}

 

Screenshot 2023-04-24 at 23.00.29.png

 

打开 main.tf 文件,并将先前复制的 ID 粘贴到 project_id = “项目ID” 部分。

terraform {
  required_providers {
    circleci = {
      source = "example.com/kelvintaywl/circleci"
    }
  }
}

provider "circleci" {
  // api_token = ""; or set via CIRCLE_TOKEN
  // hostname = "https://circleci.com"; or set via CIRCLE_HOSTNAME
}

locals {
  // 下記に CircleCI の project ID をペースト
  project_id = "プロジェクトID"
}

resource "circleci_webhook" "my_webhook" {
  project_id     = local.project_id
  name           = "my_webhook"
  url            = "WebhookのためのURL"
  signing_secret = "5uperSeCr3t!"
  verify_tls     = true
  events = [
    // accepts only "workflow-completed" and "job-completed"
    "job-completed",
    "workflow-completed"
  ]
}

output "webhooks" {
  description = "my_webhook_id"
  value       = circleci_webhook.my_webhook.id
}


 

7. main.tf 文件中的 “circleci” 提供者部分已被注释掉。
可以使用环境变量(Environment Variables)或个人 API 令牌(Personal API Token)与 CircleCI 进行集成。
本次我们将个人 API 令牌保存在 .bash_profile 中,与 CircleCI 进行了集成。
个人 API 令牌可以在 CircleCI 仪表板左下角点击个人图标,转到用户设置页面的个人 API 令牌选项卡中创建。

export CIRCLE_TOKEN="パーソナルAPIトークン"

 

Screenshot 2023-04-26 at 15.40.40.png

在 main.tf 文件中,将资源的 url = “Webhook的URL” 复制并粘贴刚才的URL。

 

如果执行terraform init命令后返回”成功初始化Terraform!”的消息,那么就继续进行下一步。

% terraform init

 

为了审查应该进行哪些更改,执行以下命令。


~ % terraform plan

 

10. 当内容的审查完成后,使用下列命令实际创建Webhook。当出现执行确认消息时,请输入“是”进行确认。


~ % terraform apply
~省略~
Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

circleci_webhook.my_webhook: Creating...
circleci_webhook.my_webhook: Creation complete after 0s [id=]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Outputs:

webhooks = ""

 

Screenshot 2023-04-26 at 13.54.35.png
Screenshot 2023-04-26 at 15.16.33.png

Webhook被触发并成功执行,工作流顺利完成并记录在表中。

当您想要更改设置时,只需在编辑main.tf文件后,按照之前相同的步骤执行teffaform plan,然后执行terraform apply即可轻松进行更改。

而且,如果不再需要Webhook功能,可以通过执行以下命令进行删除。

~ % terraform destroy

 

创建和管理项目的环境变量

我使用这个页面上的代码创建了一个环境变量。
在下面的代码中,将”FOOBAR”和”FIZZBUZZ”分别替换为环境变量的名称和值。
使用project_slug来指定项目。它的格式是VCS组织/VCS组织名/项目名称。

terraform {
  required_providers {
    circleci = {
      source = "kelvintaywl/circleci"
      version = "0.9.3"
    }
  }
}

provider "circleci" {
  // api_token = ""; or set via CIRCLE_TOKEN
  // hostname = "https://circleci.com"; or set via CIRCLE_HOSTNAME
}

# using for_each to generate multiple env var resources
resource "circleci_env_var" "my_env_vars" {
  for_each = {
    "FOOBAR"   = "0Cme2FmlXk"
    "FIZZBUZZ" = "Vbt2efixZAkrmTYiirhd"
  }

  project_slug = "github/chisato-ygc/hello-world"
  name         = each.key
  value        = each.value
}


 

Screenshot 2023-04-26 at 19.00.45.png
Screenshot 2023-04-26 at 19.02.46.png
Screenshot 2023-04-26 at 19.03.23.png

最后

通过这次项目,我对于Terraform的理解比以前更加深入了。
Kelvin先生非常详细地向我解释了Terraform的结构和这次项目。
非常感谢您。
而且,由于Provider的便利性,我对进一步学习更加技术性的部分充满了动力。
由于我在四月底写这篇文章,所以我只希望在黄金周期间不要让这份动力消失。
加油,未来的我。

感谢您阅读至最后一句。

参考链接:Terraform文档 – 提供程序:https://developer.hashicorp.com/terraform/language/providers

请将技术问题咨询转至支援中心。

广告
将在 10 秒后关闭
bannerAds