CodePipeline unable to update pipelineType or triggers using aws-cli

0

Hi there,

I am having some difficulty in upgrading an existing CodePipeline using AWSCLI.

Specifically I want to set the Pipeline Type to V2 and configure git triggers to watch new tags beginning with v*.

I have done this manually through the AWS console, but I want to automate this as part of my devops.

The issue

Despite the documentation for awscli update-pipeline and API UpdatePipeline clearly demonstrating the use of pipelineType and triggers objects, I get the following error when attempting to set these

# $CODEPIPELINE_JSON is modified input of `aws codepipeline get-pipeline` command, see below
aws codepipeline update-pipeline --profile $AWS_PROFILE --cli-input-json "$CODEPIPELINE_JSON" --no-cli-pager
Parameter validation failed:
Unknown parameter in pipeline: "pipelineType", must be one of: name, roleArn, artifactStore, artifactStores, stages, version
Unknown parameter in pipeline: "triggers", must be one of: name, roleArn, artifactStore, artifactStores, stages, version

Can anyone advise where I am going wrong, or any other way to achieve this progmatically?

At the time of writing, CloudFormation doesn't support setting the pipelineType or triggers for AWS::CodePipeline::Pipeline either, and most importantly, whenever I update the cloudformation template, the CodePipeline gets reverted back to V1 and I lose the ability to watch for new tags. Not great in a prod environment.

Below is a redacted copy of $CODEPIPELINE_JSON with the pertinent values included

{
  "pipeline": {
    "name": "my-prod-pipeline-name",
    "roleArn": "arn:aws:iam::XXXXXXXXXXXX:role/my-prod-pipeline-role",
    "artifactStore": {
      "type": "S3",
      "location": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    },
    "stages": [
        { /* snip ...*/ }
    ],
    "version": 19,
    "pipelineType": "V2",
    "triggers": [
      {
        "providerType": "CodeStarSourceConnection",
        "gitConfiguration": {
          "sourceActionName": "GitHubSourceActionForProd",
          "push": [
            {
              "tags": {
                "includes": [
                  "v*"
                ],
                "excludes": []
              }
            }
          ]
        }
      }
    ]
  }
}

and i'm using a shell script akin to this, to perform the update by modifying the JSON structure of the existing pipepline:

#!/usr/bin/env bash

CODEPIPELINE_NAME="my-prod-pipeline-name"
AWS_PROFILE="my-profile"

# Retrieve existing codepipeline
CODEPIPELINE_JSON=$(aws codepipeline get-pipeline --name $CODEPIPELINE_NAME --profile $AWS_PROFILE --no-cli-pager)

# Remove the "metadata" section from $CODEPIPELINE_JSON
CODEPIPELINE_JSON=$(echo "$CODEPIPELINE_JSON" | jq 'del(.metadata)')

# Add the pipelineType and triggers to existing JSON 
NEW_JSON='{
  "pipelineType": "V2",
  "triggers": [
    {
      "providerType": "CodeStarSourceConnection",
      "gitConfiguration": {
        "sourceActionName": "GitHubSourceActionForProd",
        "push": [
          {
            "tags": {
              "includes": ["v*"],
              "excludes": []
            }
          }
        ]
      }
    }
  ]
}'

# Add the new JSON to the pipeline object
CODEPIPELINE_JSON=$(echo "$CODEPIPELINE_JSON" | jq --argjson newJson "$NEW_JSON" '.pipeline += $newJson')

# Output JSON for debugging purposes
echo "$CODEPIPELINE_JSON"

# Perform the update
aws codepipeline update-pipeline --profile $AWS_PROFILE --cli-input-json "$CODEPIPELINE_JSON" --no-cli-pager
Keine Antworten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen