

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

# 如何使用自定义入门管道 AWS SAM
<a name="serverless-customizing-starter-pipelines"></a>

作为 CI/CD 管理员，您可能需要自定义入门工作流模板和相关的指导性提示，组织中的开发人员可以使用这些模板来创建工作流配置。

在创建入门模板时 AWS SAM CLI 使用 Cookiecutter 模板。有关 cookiecutter 模板的详细信息，请访问 [Cookiecutter](https://cookiecutter.readthedocs.io/en/latest/README.html)。

您还可以自定义使用 `sam pipeline init` 命令创建管道配置时 AWS SAM CLI 向用户显示的提示。要自定义用户提示，请执行以下操作：

1. **创建 `questions.json` 文件** – 该 `questions.json` 文件必须位于项目存储库的根目录中。这是与 `cookiecutter.json` 文件相同的目录。要查看 `questions.json` 文件的架构，请参阅 [questions.json.schema](https://github.com/aws/aws-sam-cli/blob/2b831b29f76ac9c4e0cbcbd68b37f8f664e136d8/samcli/lib/pipeline/init/questions.json.schema)。要查看示例 `questions.json` 文件，请参阅 [questions.json](https://github.com/aws/aws-sam-cli-pipeline-init-templates/blob/main/Jenkins/two-stage-pipeline-template/questions.json)。

1. **使用 cookiecutter 名称映射问题键** – `questions.json` 文件中的每个对象都需要一个与 cookiecutter 模板中的名称相匹配的键。这种键匹配即 AWS SAM CLI 如何将用户提示响应映射到 cookiecutter 模板。要查看此键匹配示例，请参阅本主题后面的 [示例文件](#serverless-customizing-starter-pipelines-example-files) 部分。

1. **创建 `metadata.json` 文件** – 在 `metadata.json` 文件中声明管道将包含的阶段数。阶段数指示 `sam pipeline init` 命令提示多少阶段的信息，或者如果是 `--bootstrap` 选项，则为多少阶段创建基础架构资源。要查看声明具有两个阶段的管道的示例 `metadata.json` 文件，请参阅 [metadata.json](https://github.com/aws/aws-sam-cli-pipeline-init-templates/blob/main/Jenkins/two-stage-pipeline-template/metadata.json)。

## 示例项目
<a name="serverless-customizing-starter-pipelines-example-projects"></a>

以下是示例项目，每个项目都包含一个 Cookiecutter 模板、一个 `questions.json` 文件和一个 `metadata.json` 文件：
+ Jenkins 示例：[两阶段 Jenkins 管道模板](https://github.com/aws/aws-sam-cli-pipeline-init-templates/tree/main/Jenkins/two-stage-pipeline-template)
+ CodePipeline 示例：[两阶段 CodePipeline 管道模板](https://github.com/aws/aws-sam-cli-pipeline-init-templates/tree/main/AWS-CodePipeline/two-stage-pipeline-template)

## 示例文件
<a name="serverless-customizing-starter-pipelines-example-files"></a>

以下一组文件显示了 `questions.json` 文件中的问题如何与 Cookiecutter 模板文件中的条目相关联。请注意，这些示例是文件片段，并非完整文件。要查看完整文件的示例，请参阅本主题前面的 [示例项目](#serverless-customizing-starter-pipelines-example-projects) 部分。

示例 **`questions.json`**：

```
{
  "questions": [{
    "key": "intro",
    "question": "\nThis template configures a pipeline that deploys a serverless application to a testing and a production stage.\n",
    "kind": "info"
  }, {
    "key": "pipeline_user_jenkins_credential_id",
    "question": "What is the Jenkins credential ID (via Jenkins plugin \"aws-credentials\") for pipeline user access key?",
    "isRequired": true
  }, {
    "key": "sam_template",
    "question": "What is the template file path?",
    "default": "template.yaml"
  }, {
    ...
```

示例 **`cookiecutter.json`**：

```
{
  "outputDir": "aws-sam-pipeline",
  "pipeline_user_jenkins_credential_id": "",
  "sam_template": "",
    ...
```

示例 **`Jenkinsfile`**：

```
pipeline {
  agent any
  environment {
    PIPELINE_USER_CREDENTIAL_ID = '{{cookiecutter.pipeline_user_jenkins_credential_id}}'
    SAM_TEMPLATE = '{{cookiecutter.sam_template}}'
    ...
```