IBM Cloud Docs
创建工具链

创建工具链

工具链是支持开发、部署和操作任务的一组工具集成。 工具链的整体能力大于其各个单独工具集成的总和。

IBM Cloud®上提供了开放式工具链。 您可以通过多种方式创建工具链: 使用模板来创建工具链,为应用程序创建工具链,使用 HTTP API 或 SDK 创建工具链,或者使用 Terraform 创建工具链。

每个工具链都与特定的资源组相关联。 对工具链资源或包含该资源的资源组具有 Identity and Access Management (IAM) 查看者许可权的任何用户都可以访问该工具链。 有关资源组中工具链访问控制的更多信息,请参阅 管理用户对资源组中工具链的访问

在 IBM Cloud Public 中,根据您所使用的模板或工具链,工具链可能包括已经填充了应用程序入门模板代码的 GitHub 或 Git 存储库和预配置的 Delivery Pipeline。 当您将更改推送到工具链的存储库时,Delivery Pipeline 会自动构建应用程序,并将其部署到 IBM Cloud。

要查看哪些工具链和工具集成可用,请参阅工具链可用性、模板和教程

使用控制台从模板创建工具链

您可以使用模板作为 "创建工具链的起点,其中包括一组特定的工具集成。 根据使用的模板,您可以创建具有一组特定工具集成的工具链,或者创建可以向其中添加工具集成的空工具链。 了解有关如何使用 IBM Cloud Garage Method中的模板的更多信息。

  1. 登录到 IBM Cloud

  2. 从IBM Cloud控制台,单击菜单图标汉堡包图标>平台自动化>工具链

  3. 在“工具链”页面,单击“创建工具链”。

  4. 在创建工具链页面,单击工具链模板。

  5. 复查您要创建的工具链的图。 该图按生命周期阶段显示工具链中的每一个工具集成。

    有一些工具链模板具有工具集成的多个实例。 例如,IBM Cloud Public 上的“使用 Kubernetes 和 Helm开发和测试微服务”工具链模板包含四个 GitHub 实例和四个 Delivery Pipeline实例。

    以下图像中的图是示例。 创建工具链时,该图显示属于工具链的每一个工具集成。

    工具链图*" caption-side="bottom"}链{: caption="*

  6. 复查工具链设置的缺省信息:

    • 工具链的名称在 IBM Cloud 中起到标识符的作用。 如果要使用其他名称,请更改工具链的名称。
    • 要在其中创建工具链的区域。 如果要使用其他区域,请从可用区域列表中选择该区域。
    • 创建工具链的资源组。 如果要使用不同的资源组,请从可用资源组列表中选择。
    • 源存储库的提供者,例如 GitHub、GitLab 或 Bitbucket。 如果要使用其他源提供者,请从可用存储库列表中进行选择。
  7. 在“工具集成”部分中,选择要为工具链配置的每一个工具集成。 有些工具集成无需进行配置。 有关配置工具集成的更多信息,请参阅配置工具集成

    组成工具链的许多工具集成需要私钥才能向 Continuous Delivery 服务进行认证。

    私钥是可以密码,认证令牌,API 密钥或证书形式提供的凭证。 例如,将 Delivery Pipeline 工具集成添加到工具链时,必须以 API 密钥的形式提供私钥。

    a. 在“工具集成”部分中,单击 Delivery Pipeline

    b. 单击 新建 以创建 IBM Cloud® API 密钥。

    c. 单击 确定 以应用新的 API 密钥。

    每个用户最多可以有 20 个 API 密钥。

    d. 单击 确定 以创建 API 密钥而不保存密钥的安全副本。

    e. 要安全地保存 API 密钥,以便您可以在其他工具链工作流程中再次使用该 API 密钥:

    • 选中 将此密钥保存在密钥库中以供复用 复选框以与 Key Protect 或 Secrets Manager 密钥库集成。
    • 如果您没有 Key Protect 或 Secrets Manager的现有实例,请指定该实例的名称和私钥。
    • 单击 确定 以应用新的 API 密钥。

    f. 要验证是否已成功创建 Key Protect 或 Secrets Manager 实例,请转至 IBM Cloud® 资源列表 并展开 服务 折叠标记。 要查看 API 密钥,请从菜单栏中单击 管理> 访问权 (IAM),然后选择 IBM Cloud® API 密钥

    (例如, 您创建并复制到密钥项目的 API 密钥现在可在“创建工具链”页面上使用。 需要私钥的任何工具集成都会显示一个密钥图标。 单击密钥图标以打开“私钥选取器”对话框,以从一个或多个 Key Protect 或 Secrets Manager 实例检索私钥。

  8. 单击创建。 此时将自动运行数个步骤,以设置工具链。 根据您选择的工具链模板,设置的工具集成有所不同。 例如,在 IBM Cloud Public 上创建“使用 Kubernetes 和 Helm”工具链开发和测试微服务时,将运行以下步骤:

    • 将创建工具链。
    • 如果已配置 Delivery Pipeline,那么会创建并触发管道。
    • 如果配置了Event Notifications,工具链将被设置为向您指定的Event Notifications服务发送事件通知。
    • 如果已配置 Sauce Labs,那么会设置工具链以向管道添加 Sauce Labs 测试作业。
    • 如果已配置 PagerDuty,那么会设置工具链,以向指定的 PagerDuty 服务发送警报通知。
    • 如果已配置 Slack,那么会设置工具链,以向指定的 Slack 通道发送有关部署状态的通知。
    • 如果已配置源代码工具集成(如 GitHub),那么样本 GitHub 存储库会克隆到 GitHub 帐户。

    You can now distribute event notifications by using the Event Notifications tool integration. IBM Cloud Event Notifications is the preferred method for distributing notifications to PagerDuty and other communication channels such as Slack, email, SMS, push notifications, webhook, Microsoft® Teams, ServiceNow, and IBM Cloud Functions. 有关使用 Event Notifications的更多信息,请参阅 为工具链启用事件通知

使用控制台从应用程序创建工具链

可以通过应用程序来创建工具链。 工具链可以支持持续开发、部署、监视等操作,并且与应用程序相关联。 每个应用程序可以与一个工具链相关联。 当您将更改推送到工具链的 GitHub 存储库时,管道会自动构建和部署应用程序。

  1. 如果您使用IBM CloudPublic 来创建应用程序,它将被配置为从一个新的GitHubrepo 持续交付,该 repo 中填充了应用程序的启动代码。

  2. 在工具链配置页面上,复查您即将创建的工具链的图。 该图按生命周期阶段显示工具链中的每一个工具集成。

  3. 复查工具链设置的缺省信息。 工具链的名称在 IBM Cloud 中起到标识符的作用。 如果要使用其他名称,请更改工具链的名称。

  4. 在“工具集成”部分中,选择要为工具链配置的每一个工具集成。 有些工具集成无需进行配置。 有关配置工具集成的更多信息,请参阅配置工具集成

  5. 单击创建。 此时将自动运行数个步骤,以设置工具链。 例如,当您在 IBM Cloud Public 上通过应用程序创建工具链时,会运行以下步骤:

    • 将创建工具链。
    • 如果已配置 Delivery Pipeline,那么会创建并触发管道。
    • 如果已配置 GitHub,那么样本 GitHub 存储库会克隆到 GitHub 帐户。

使用应用程序接口创建工具链

  1. 获取 IAM 不记名令牌。 或者,如果您正在使用 SDK,请 获取 IAM API 密钥,并使用环境变量设置客户机选项。

    export CD_TOOLCHAIN_AUTH_TYPE=iam && \
    export CD_TOOLCHAIN_APIKEY={iam_api_key} && \
    export CD_TOOLCHAIN_URL={base_url}
    
  2. 查找要在其中创建工具链的资源组的标识

  3. 选择要在其中创建工具链的区域。

  4. 创建工具链实例

    curl -X POST \
      "{base_url}/toolchains" \
      -H 'Authorization: Bearer {token}' \
      -H 'Content-Type: application/json' \
        -d '{
        "name": "{toolchain_name}",
        "resource_group_id": "{resource_group_id}"
      }'
    
    const CdToolchainV2 = require('@ibm-cloud/continuous-delivery/cd-toolchain/v2');
    const toolchainService = CdToolchainV2.newInstance();
    ...
    (async() => {
       const toolchainPrototypeModel = {
          description: {toolchain_description},
          name: {toolchain_name},
          resourceGroupId: {resource_group_id}
       };
       const response = await toolchainService.createToolchain(toolchainPrototypeModel);
    })();
    
    import (
    	   "github.com/IBM/continuous-delivery-go-sdk/cdtoolchainv2"
    )
    ...
    toolchainClientOptions := &cdtoolchainv2.CdToolchainV2Options{}
    toolchainClient, err := cdtoolchainv2.NewCdToolchainV2UsingExternalConfig(toolchainClientOptions)
    createToolchainOptions := toolchainClient.NewCreateToolchainOptions({toolchain_name}, {resource_group_id})
    createToolchainOptions.SetDescription({toolchain_description})
    toolchain, response, err := toolchainClient.CreateToolchain(createToolchainOptions)
    
    from ibm_continuous_delivery.cd_toolchain_v2 import CdToolchainV2
    ...
    toolchain_service = CdToolchainV2.new_instance()
    toolchain = toolchain_service.create_toolchain(
       description = {toolchain_description},
       name = {toolchain_name},
       resource_group_id = {resource_group_id}
    )
    
    import com.ibm.cloud.continuous_delivery.cd_toolchain.v2.CdToolchain;
    import com.ibm.cloud.continuous_delivery.cd_toolchain.v2.model.*;
    ...
    CdToolchain toolchainService = CdToolchain.newInstance();
    CreateToolchainOptions createToolchainOptions = new CreateToolchainOptions.Builder()
       .description({toolchain_description})
       .name({toolchain_name})
       .resourceGroupId({resource_group_id})
       .build();
    Response<ToolchainPost> response = toolchainService.createToolchain(createToolchainOptions).execute();
    ToolchainPost toolchain = response.getResult();
    

下表列出并描述了先前步骤中使用的每个变量。

使用应用程序接口配置工具链的变量
变量 描述
{base_url} 工具链 API 端点 URL,例如 https://api.us-south.devops.cloud.ibm.com/toolchain/v2。 有关此端点 URL 的更多信息 (包括值列表),请参阅 端点 URL
{iam_api_key} 您的 IAM API 密钥。
{resource_group_id} 要在其中供应工具链的资源组的标识。 要查找可用资源组的标识,请运行 ibmcloud resource groups
{token} 有效的 IAM 不记名令牌。
{toolchain_description} 工具链的描述。
{toolchain_name} 工具链的名称。

有关使用 API 创建工具链的更多信息,请参阅 IBM Cloud API 文档中的 创建工具链

使用 Terraform 创建工具链

  1. 要安装 Terraform CLI 并为 Terraform 配置 IBM Cloud 提供程序插件,请遵循 IBM Cloud® 上的 Terraform 入门 的教程。

  2. 创建名为 "main.tf 的 Terraform 配置文件。 在此文件中,添加配置以使用 HashiCorp 配置语言创建工具链。 有关使用此配置语言的更多信息,请参阅 Terraform 文档

    以下示例使用 ibm_cd_toolchain 资源创建工具链。

    data "ibm_resource_group" "group" {
      name = "default"
    }
    
    resource "ibm_cd_toolchain" "cd_toolchain" {
      name              = "my toolchain"
      resource_group_id = data.ibm_resource_group.group.id
    }
    

    有关 ibm_cd_toolchain 的更多信息,请参阅 Terraform Registry 文档中的参数参考详细信息。

  3. 初始化 Terraform CLI。

    terraform init
    
  4. 创建 Terraform 执行计划。 此计划汇总了为创建工具链而必须运行的所有操作。

    terraform plan
    
  5. 应用 Terraform 执行计划。 Terraform 将执行所有必需的操作来创建工具链。

    terraform apply
    

查看工具链

您可以使用控制台,CLI,API 或 Terraform 来查看工具链。

使用控制台查看工具链

配置工具链及其工具集成之后,您可以查看工具链的可视化表示。

在应用程序的“详细信息”页面点击工具链名称,即可查看应用程序的工具链。

  1. 从IBM Cloud控制台,单击菜单图标汉堡包图标>平台自动化>工具链

  2. 在“工具链”页面上,选择 资源组位置。 显示所选资源组和位置中包含的所有工具链。 单击想要查看的工具链以打开其“概述”页面。 或者,在应用程序的“应用程序详细信息”页面,单击工具链名称。

  3. 要访问工具链中的工具集成,请转至相应的卡 (例如 Delivery pipeline),然后单击工具集成。

    您还可以在 资源列表开发者工具 类别中找到工具链。 缺省情况下,“资源”列表显示跨多个资源组和位置的工具链和其他资源。

    如果您有多个 GitHub 或 Git 存储库,那么 存储库 卡中可能有相同工具集成的多个实例,因为每个存储库都单独表示。 如果你有不止一个管道,你可能会有多个相同工具集成的实例,因为每个管道都是单独表示的。 例如,创建“使用 Kubernetes 和 Helm开发和测试微服务”工具链时,每个微服务都有自己的 GitHub 或 Git 存储库及其自己的管道。

从 CLI 查看工具链

命令行界面 (CLI) 工具链视图取决于目标资源组。 使用以下命令指定或更改目标资源组。

  • 要查看当前目标资源组,请运行以下命令:
ibmcloud target
  • 如果没有设置资源组,或者想要更改资源组,请运行以下命令:
ibmcloud target -g [RESOURCE-GROUP]
  • 要查看目标资源组中的工具链,请运行以下命令:
ibmcloud dev toolchains
  • 要查看特定工具链的详细信息,请运行以下命令:
ibmcloud dev toolchain-get [TOOLCHAIN-NAME]
  • 要在浏览器中查看工具链详细信息,请运行以下命令:
ibmcloud dev toolchain-open [TOOLCHAIN-NAME]

使用 API 获取工具链

  1. 获取 IAM 不记名令牌。 或者,如果您正在使用 SDK,请 获取 IAM API 密钥,并使用环境变量设置客户机选项。

    export CD_TOOLCHAIN_AUTH_TYPE=iam && \
    export CD_TOOLCHAIN_APIKEY={iam_api_key} && \
    export CD_TOOLCHAIN_URL={base_url}
    
  2. 查找工具链所在的资源组的标识

  3. 选择工具链所在的区域。

  4. 获取资源组中的工具链列表。

    curl -X GET \
      "{base_url}/toolchains?resource_group_id={resource_group_id}" \
      -H 'Authorization: Bearer {token}' \
      -H 'Accept: application/json'
    
    const CdToolchainV2 = require('@ibm-cloud/continuous-delivery/cd-toolchain/v2');
    const toolchainService = CdToolchainV2.newInstance();
    ...
    (async() => {
       const response = await toolchainService.listToolchains({
          resourceGroupId: {resource_group_id}
       });
    })();
    
    import (
    	   "github.com/IBM/continuous-delivery-go-sdk/cdtoolchainv2"
    )
    ...
    toolchainClientOptions := &cdtoolchainv2.CdToolchainV2Options{}
    toolchainClient, err := cdtoolchainv2.NewCdToolchainV2UsingExternalConfig(toolchainClientOptions)
    listToolchainsOptions := toolchainClient.NewListToolchainsOptions({resource_group_id})
    toolchains, response, err := toolchainClient.ListToolchains(listToolchainsOptions)
    
    from ibm_continuous_delivery.cd_toolchain_v2 import CdToolchainV2
    ...
    toolchainService = CdToolchainV2.new_instance()
    toolchains = toolchainService.list_toolchains(
       resource_group_id = {resource_group_id}
    )
    
    import com.ibm.cloud.continuous_delivery.cd_toolchain.v2.CdToolchain;
    import com.ibm.cloud.continuous_delivery.cd_toolchain.v2.model.*;
    ...
    CdToolchain toolchainService = CdToolchain.newInstance();
    ListToolchainsOptions listToolchainsOptions = new ListToolchainsOptions.Builder()
       .resourceGroupId({resource_group_id})
       .build();
    Response<ToolchainCollection> response = toolchainService.listToolchains(listToolchainsOptions).execute();
    ToolchainCollection toolchains = response.getResult();
    
  5. 获取特定工具链。

    curl -X GET \
      {base_url}/toolchains/{toolchain_id} \
      -H 'Authorization: Bearer {token}' \
      -H 'Accept: application/json'
    
    const CdToolchainV2 = require('@ibm-cloud/continuous-delivery/cd-toolchain/v2');
    const toolchainService = CdToolchainV2.newInstance();
    ...
    (async() => {
       const response = await toolchainService.getToolchainById({
          toolchainId: {toolchain_id}
       });
    })();
    
    getToolchainByIDOptions := toolchainClient.NewGetToolchainByIDOptions({toolchain_id})
    toolchain, response, err := toolchainClient.GetToolchainByID(getToolchainByIDOptions)
    
    toolchain = toolchainService.get_toolchain_by_id(
       toolchain_id = {toolchain_id}
    )
    
    GetToolchainByIdOptions getToolchainByIdOptions = new GetToolchainByIdOptions.Builder()
       .toolchainId({toolchain_id})
       .build();
    Response<Toolchain> response = toolchainService.getToolchainById(getToolchainByIdOptions).execute();
    Toolchain toolchain = response.getResult();
    

下表列出并描述了先前步骤中使用的每个变量。

使用应用程序接口查看工具链的变量
变量 描述
{base_url} 工具链 API 端点 URL,例如 https://api.us-south.devops.cloud.ibm.com/toolchain/v2。 有关此端点 URL 的更多信息 (包括值列表),请参阅 端点 URL
{resource_group_id} 工具链所在的资源组的标识。 要查找可用资源组的标识,请运行 ibmcloud resource groups
{token} 有效的 IAM 不记名令牌。
{toolchain_id} 工具链的标识。

有关使用 API 列出工具链以及使用 API 获取工具链的更多信息,请参阅 IBM Cloud API 文档中的 获取工具链列表获取工具链

使用 Terraform 查看工具链

  1. 找到包含现有工具链的 resource 块的 Terraform 文件 (例如,main.tf)。

  2. 如果 output 块尚未包含块,请将其添加到 Terraform 文件中。

    以下示例中的 resource 描述了现有工具链。 output 块指示 Terraform 输出工具链资源的属性。

    data "ibm_resource_group" "group" {
      name = "default"
    }
    
    resource "ibm_cd_toolchain" "cd_toolchain" {
      name              = "my toolchain"
      resource_group_id = data.ibm_resource_group.group.id
    }
    
    output "cd_toolchain_attributes" {
      value = ibm_cd_toolchain.cd_toolchain
    }
    

    有关 ibm_cd_toolchain 的更多信息,请参阅 Terraform Registry 文档中的参数参考详细信息。

  3. 初始化 Terraform CLI。

    terraform init
    
  4. 使用 refresh-only 选项应用 Terraform 执行计划。 Terraform 将刷新其状态并显示工具链资源的属性。

    terraform apply -refresh-only -auto-approve