

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 教程：创建使用计算运行命令的管道（V2 类型）
<a name="tutorials-commands"></a>

在本教程中，您将配置一个管道，该管道使用构建阶段中的 Commands 操作持续运行所提供的构建命令。有关 Commands 操作的更多信息，请参阅 [Commands 操作参考](action-reference-Commands.md)。

**重要**  
作为创建管道的一部分，客户提供的 S3 工件存储桶将 CodePipeline 用于项目。（这与用于 S3 源操作的存储桶不同。） 如果 S3 工件存储桶与您的管道账户位于不同的账户中，请确保 S3 工件存储桶归其所有 AWS 账户 ，该存储桶是安全且可靠的。

## 先决条件
<a name="tutorials-commands-prereq"></a>

您必须已经具备以下各项：
+ 存储 GitHub 库。您可以使用您在中创建的 GitHub 存储库[教程：使用带有 GitHub 管道源的完整克隆](tutorials-github-gitclone.md)。

## 第 1 步：创建源文件并推送到您的 GitHub 存储库
<a name="tutorials-commands-push"></a>

在本节中，您将创建示例源文件并将其推送到管道用于源阶段的存储库。在此示例中，您将生成并推送以下内容：
+ 一个 `README.txt` 文件。

**创建源文件**

1. 创建一个包含以下文本的文件：

   ```
   Sample readme file
   ```

1. 将该文件保存为 `README.txt`。

**将文件推送到您的 GitHub 存储库**

1. 将文件推送或上传至您的 存储库。这些文件是由**创建管道**向导针对您在 AWS CodePipeline中的部署操作创建的源项目。您的文件在本地目录中应如下所示：

   ```
   README.txt
   ```

1. 在本地计算机上从克隆的存储库使用 Git 命令行：

   1. 运行以下命令以立即暂存您的所有文件：

      ```
      git add -A
      ```

   1. 运行以下命令以提交带有提交消息的文件。

      ```
      git commit -m "Added source files"
      ```

   1. 运行以下命令以将文件从您的本地存储库推送到您的 存储库：

      ```
      git push
      ```

## 步骤 2：创建管道
<a name="tutorials-commands-pipeline"></a>

在此部分中，您将使用以下操作创建管道：
+ 一个源阶段，对存储源文件的存储库进行 GitHub （通过 GitHub App）操作。
+ 包含 Commands 操作的构建阶段。

**使用向导创建管道**

1. 登录 AWS 管理控制台 并打开 CodePipeline 控制台，[网址为 http://console.aws.amazon。 com/codesuite/codepipeline/home](https://console.aws.amazon.com/codesuite/codepipeline/home)。

1. 在**欢迎**页面、**入门**页面或**管道**页面上，选择**创建管道**。

1. 在**步骤 1：选择创建选项**页面上的**创建选项**下，选择**构建自定义管道**选项。选择**下一步**。

1. 在**步骤 2：选择管道设置**的**管道名称**中，输入 **MyCommandsPipeline**。

1. CodePipeline 提供 V1 和 V2 类型的管道，它们的特性和价格各不相同。在控制台中，您只能选择 V2 类型。有关更多信息，请参阅[管道类型](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipeline-types-planning.html?icmpid=docs_acp_help_panel)。有关定价的信息 CodePipeline，请参阅[定价](https://aws.amazon.com/codepipeline/pricing/)。

1. 在**服务角色**中，选择**新建服务角色** CodePipeline 以允许在 IAM 中创建服务角色。
**注意**  
如果您使用的是现有的服务角色，要使用 Commands 操作，需要为服务角色添加以下权限。在服务角色策略声明中使用基于资源的权限，将权限范围缩小到管道资源级别。有关更多信息，请参阅[服务角色策略权限](action-reference-Commands.md#action-reference-Commands-policy)中的策略示例。  
日志：CreateLogGroup
日志：CreateLogStream
日志：PutLogEvents

1. 将**高级设置**中的各项设置保留为默认值，然后选择**下一步**。

1. 在**步骤 3：添加源阶段**页面上，添加源阶段：

   1. 在**来源提供商**中，选择 **GitHub （通过 GitHub 应用程序）**。

   1. 在**连接**下，选择一个现有连接或创建一个新连接。要创建或管理 GitHub源操作的连接，请参阅[GitHub 连接](connections-github.md)。

   1. 在**存储库名称**中，选择您的 GitHub .com存储库的名称。

   1. 在**默认分支**中，选择在管道手动启动或使用非 Git 标签的源事件时要指定的分支。如果更改的来源不是触发器，或者管道执行是手动启动的，则使用的更改将是来自默认分支的 HEAD 提交。您还可以选择性地指定附带筛选功能的 Webhook（触发器）。有关更多信息，请参阅 [使用触发器和筛选功能自动启动管道](pipelines-triggers.md)。

   选择**下一步**。

1. 在**步骤 4：添加构建阶段**中，选择 **Commands**。
**注意**  
运行 Commands 操作将在 AWS CodeBuild中产生单独的费用。

   输入以下命令：

   ```
   ls
   echo hello world
   cat README.txt
   echo pipeline Execution Id is #{codepipeline.PipelineExecutionId}
   ```

   选择**下一步**。  
![\[使用 Commands 操作的新管道的步骤 4：添加构建阶段页面\]](http://docs.aws.amazon.com/zh_cn/codepipeline/latest/userguide/images/commands-wizard-screen.png)

1. 在**步骤 5：添加测试阶段**中，选择**跳过测试阶段**，并通过再次选择**跳过**接受警告消息。

   选择**下一步**。

1. 在**步骤 6：添加部署阶段**页面上，选择**跳过部署阶段**，并通过再次选择**跳过**接受警告消息。

   选择**下一步**。

1. 在**步骤 7：查看**中，查看信息，然后选择**创建管道**。

1. 创建操作的最后一步是在操作中添加一个环境变量，该变量将产生操作的输出变量。在 Commands 操作上，选择**编辑**。在**编辑**屏幕上，通过在**变量命名空间**字段中输入 `compute`，为您的操作指定变量命名空间。

   添加 CodeBuild 输出变量`AWS_Default_Region`，然后选择**添加变量**。  
![\[Commands 操作的“编辑”页面\]](http://docs.aws.amazon.com/zh_cn/codepipeline/latest/userguide/images/commands-output-edit-var.png)

## 步骤 3：运行管道并验证构建命令
<a name="tutorials-commands-update"></a>

发布更改以运行管道。通过查看执行历史记录、构建日志和输出变量，验证构建命令是否运行。

**查看操作日志和输出变量**

1. 管道成功运行后，您可以查看该操作的日志和输出。

1. 要查看操作的输出变量，请选择**历史记录**，然后选择**时间线**。

   查看添加到操作中的输出变量。Commands 操作的输出显示解析为操作区域的输出变量。  
![\[显示解析为操作区域的输出变量的 Commands 操作输出。\]](http://docs.aws.amazon.com/zh_cn/codepipeline/latest/userguide/images/commands-output-variable.png)

1. 要查看操作的日志，请选择成功 Commands 操作上的**查看详细信息**。查看 Commands 操作的日志。  
![\[Commands 操作的日志示例\]](http://docs.aws.amazon.com/zh_cn/codepipeline/latest/userguide/images/commands-output-logs.png)