

# 连接到 CircleCI
<a name="connecting-to-data-circleci"></a>

CircleCI 是一个持续集成和持续交付平台。CircleCI 账户包含有关您项目、管线、工作流等的数据。如果您是 CircleCI 用户，则可以将 AWS Glue 连接到自己的 CircleCI 账户。然后，可以使用 CircleCI 作为 ETL 作业中的数据来源。通过运行这些作业，可在 CircleCI 与 AWS 服务或其他受支持的应用程序之间传输数据。

**Topics**
+ [AWS Glue 对 CircleCI 的支持](circleci-support.md)
+ [包含创建和使用连接的 API 操作的策略](circleci-configuring-iam-permissions.md)
+ [配置 CircleCI](circleci-configuring.md)
+ [配置 CircleCI 连接](circleci-configuring-connections.md)
+ [从 CircleCI 实体中读取内容](circleci-reading-from-entities.md)
+ [CircleCI 连接选项](circleci-connection-options.md)
+ [CircleCI 限制](circleci-connection-limitations.md)

# AWS Glue 对 CircleCI 的支持
<a name="circleci-support"></a>

AWS Glue 对 CircleCI 的支持情况如下：

**是否支持作为来源？**  
是。可以使用 AWS Glue ETL 作业查询 CircleCI 中的数据。

**是否支持作为目标？**  
否。

**支持的 CircleCI API 版本**  
支持以下 CircleCI API 版本：
+ v2

# 包含创建和使用连接的 API 操作的策略
<a name="circleci-configuring-iam-permissions"></a>

以下示例策略描述了创建和使用连接所需的 AWS IAM 权限。如果您要创建新角色，请创建包含以下内容的策略：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

如果您不想使用上述方法，也可以使用以下托管 IAM 策略：
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – 授予对各种 AWS Glue 进程代表您运行所需的资源的访问权限。这些资源包括 AWS Glue、Amazon S3、IAM、CloudWatch Logs 和 Amazon EC2。如果您遵循此策略中指定的资源的命名约定，则 AWS Glue 进程具有所需的权限。此策略通常附加到在定义爬网程序、作业和开发终端节点时指定的角色。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess)：当策略所附加到的身份使用 AWS 管理控制台时，授予对 AWS Glue 资源的完全访问权限。如果遵循此策略中指定的资源的命名约定，则用户具有完全控制台功能。此策略通常附加到 AWS Glue 控制台的用户。

# 配置 CircleCI
<a name="circleci-configuring"></a>

必须满足以下要求，才能使用 AWS Glue 从 CircleCI 传输数据：

## 最低要求
<a name="circleci-configuring-min-requirements"></a>

以下是最低要求：
+ 拥有 CircleCI 账户，且其中包含要传输的数据。
+ 在账户的用户设置中创建了个人 API 令牌。有关更多信息，请参阅 [Creating a personal API token](https://circleci.com/docs/managing-api-tokens/#creating-a-personal-api-token)。
+ 在创建连接时向 AWS Glue 提供个人 API 密钥。

如果满足这些要求，就可以将 AWS Glue 连接到 CircleCI 账户。

# 配置 CircleCI 连接
<a name="circleci-configuring-connections"></a>

CircleCI 支持自定义身份验证。

要配置 CircleCI 连接，请执行以下操作：

1. 在 AWS Secrets Manager 中，创建一个包含以下详细信息的密钥：

   1. 对于客户管理型关联应用程序，密钥应包含关联应用程序的 API 密钥，且以 `Circle-Token` 为键。

   1. 注意：必须在 AWS Glue 中为连接创建一个密钥。

1. 在 AWS Glue Glue Studio 中，按照以下步骤在**数据连接**下创建连接：

   1. 选择**数据来源**时，请选择 CircleCI。

   1. 选择 AWS Glue 可以代入并有权执行以下操作的 AWS IAM 角色：

------
#### [ JSON ]

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. 在 AWS Glue 中选择您要用于此连接的 `secretName`，然后放置令牌。

   1. 如果要使用网络，请选择网络选项。

1. 向与您的 AWS Glue 作业关联的 IAM 角色授予读取 `secretName` 的权限。

# 从 CircleCI 实体中读取内容
<a name="circleci-reading-from-entities"></a>

**先决条件**

要从中读取内容的 CircleCI 对象。您将需要对象名称。

**源支持的实体**：


| 实体 | 可以筛选 | 支持限制 | 支持排序依据 | 支持 Select \$1 | 支持分区 | 
| --- | --- | --- | --- | --- | --- | 
| 上下文 | 是 | 否 | 否 | 是 | 否 | 
| Organization Summary Metric | 是 | 否 | 否 | 是 | 否 | 
| 管道 | 否 | 否 | 否 | 是 | 否 | 
| 管道工作流 | 是 | 否 | 否 | 是 | 否 | 
| Project Branch | 是 | 否 | 否 | 是 | 否 | 
| Project Flaky Test | 否 | 否 | 否 | 是 | 否 | 
| Project Summary Metric | 是 | 否 | 否 | 是 | 否 | 
| 计划 | 否 | 否 | 否 | 是 | 否 | 
| Workflow Job Timeseries | 是 | 否 | 否 | 是 | 否 | 
| Workflow Metric And Trend | 是 | 否 | 否 | 是 | 否 | 
| Workflow Recent Run | 是 | 否 | 否 | 是 | 否 | 
| Workflow Summary Metric | 是 | 否 | 否 | 是 | 否 | 
| Workflow Test Metric | 是 | 否 | 否 | 是 | 否 | 

**示例：**

```
circleci_read = glueContext.create_dynamic_frame.from_options(
    connection_type="circleci",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "context/e7ea2945-dccb-4205-b673-8391fe1b3a4c",
        "API_VERSION": "v2"
    }
```

## CircleCI 实体和字段详细信息
<a name="circleci-reading-from-entities-field-details"></a>

有关实体和字段详细信息的更多信息，请参阅：
+ [Contexts](https://circleci.com/docs/api/v2/#operation/listContexts)
+ [Project Summary Metrics](https://circleci.com/docs/api/v2/#operation/getProjectWorkflowsPageData)
+ [Workflow Job Timeseries](https://circleci.com/docs/api/v2/#operation/getJobTimeseries)
+ [Organization Summary Metrics](https://circleci.com/docs/api/v2/#operation/getOrgSummaryData)
+ [Project Branches](https://circleci.com/docs/api/v2/#operation/getAllInsightsBranches)
+ [Project Flaky Tests](https://circleci.com/docs/api/v2/#operation/getFlakyTests)
+ [Workflow Recent Runs](https://circleci.com/docs/api/v2/#operation/getProjectWorkflowRuns)
+ [Workflow Summary Metrics](https://circleci.com/docs/api/v2/#operation/getProjectWorkflowMetrics)
+ [Workflow Metrics and Trends](https://circleci.com/docs/api/v2/#operation/getWorkflowSummary)
+ [Workflow Test Metrics](https://circleci.com/docs/api/v2/#operation/getProjectWorkflowTestMetrics)
+ [Pipelines](https://circleci.com/docs/api/v2/#operation/listPipelinesForProject)
+ [Pipeline Workflows](https://circleci.com/docs/api/v2/#operation/listWorkflowsByPipelineId)
+ [Schedules](https://circleci.com/docs/api/v2/#operation/listSchedulesForProject)

具有静态元数据的实体：

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/circleci-reading-from-entities.html)

**注意**  
在连接器的响应中，结构和列表数据类型将转换为字符串数据类型。

**对查询进行分区**

CircleCI 不支持基于字段的分区或基于记录的分区。

# CircleCI 连接选项
<a name="circleci-connection-options"></a>

以下是 CircleCI 的连接选项：
+ `ENTITY_NAME`（字符串）：（必填）用于读取。CircleCI 中对象的名称。
+ `API_VERSION`（字符串）：（必填）用于读取。要使用的 CircleCI Rest API 版本。
+ `SELECTED_FIELDS`（列表<字符串>）–默认：empty(SELECT \$1)。用于读取。您想要为对象选择的列。
+ `FILTER_PREDICATE`（字符串）– 默认：空。用于读取。应采用 Spark SQL 格式。
+ `QUERY`（字符串）– 默认：空。用于读取。完整的 Spark SQL 查询。

# CircleCI 限制
<a name="circleci-connection-limitations"></a>

以下是 CircleCI 的限制或注意事项：
+ CircleCI 不支持基于字段的分区或基于记录的分区。
+ 包含“-”（连字符）的筛选字段只有在用反引号括起来时才有效。例如：`workflow-name` = "abc"
+ 不支持 GitLab VCS 类型，因为没有编程方法可以检索 GitLab VCS 实体路径所需的“项目 ID”。