>

CloudFormation으로 GitHub 웹 후크 설정을 시도하는 데 많은 시간을 낭비했습니다. 이 프로세스에 대한 문서는 쓸모가 없습니다. 예 : https://docs.aws.amazon.com/codebuild/latest/userguide/sample-access-tokens.html

$ aws codebuild import-source-credentials --generate-cli-skeleton
usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
To see help text, you can run:
  aws help
  aws <command> help
  aws <command> <subcommand> help
aws: error: argument operation: Invalid choice, valid choices are:
batch-delete-builds                      | batch-get-builds
batch-get-projects                       | create-project
create-webhook                           | delete-project
delete-webhook                           | invalidate-project-cache
list-builds                              | list-builds-for-project
list-curated-environment-images          | list-projects
start-build                              | stop-build
update-project                           | help

제 문제는 CloudFormation으로 CodeBuild에 대한 GitHub 액세스 토큰을 지정하는 방법을 찾을 수 없다는 것입니다. 풀 요청을 만들거나 업데이트 할 때 간단한 테스트 스위트를 실행하기 위해 github 리포지토리에 웹 후크를 설정하려고합니다. 앞에서 언급했듯이 https://docs.aws.amazon.com/codebuild/latest /userguide/sample-github-pull-request.html 에서는 github을 사용하여 웹 후크를 설정하는 방법을 간략하게 설명하지만이 가이드를 따르려고하면 CloudFormation에서 GitHub 토큰 오류가 발생하지 않습니다. 다른 문서에 따르면 UI 또는 CLI에서 액세스 토큰을 설정해야한다고 말하지만 CLI가 명확하게 손상되어 클라우드 형성을 설정하려고 할 때 관리 콘솔에서 CodeBuild 리소스를 작성하는 이유는 무엇입니까? CloudFormation 템플릿 예제에서 GitHub의 개인 액세스 토큰을 포함하는 곳이 없으며 Source>Auth 요소에 대한 문서가 자체적으로 정의되어 있습니다. "지정된 권한 부여 유형에 적용되는 자원 값"은이 "자원"이 무엇인지 전혀 알려주지 않습니다. 지난 8 시간 동안 문서에서 찾은 GitHub 개인 액세스 토큰입니까? 나도 몰라 해당 필드에 개인 액세스 토큰을 고정하려고 시도했지만 동일한 결과를 얻습니다. "액세스 토큰이 없습니다. AWS CodeBuild 콘솔을 방문하여 GitHub에 연결하십시오"

다음은 CloudFormation 템플릿입니다.

{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Description": "AWS CodeBuild Template",
    "Parameters": {
    },
    "Resources": {
        "CodeBuildProject": {
            "Type": "AWS::CodeBuild::Project",
            "Properties": {
                "Name": "TestingCodeBuild",
                "Description": "A description about my project",
                "ServiceRole": { "Fn::GetAtt": [ "CodeBuildServiceRole", "Arn" ] },
                "Artifacts": {
                    "Type": "no_artifacts"
                },
                "Environment": {
                    "Type": "LINUX_CONTAINER",
                    "ComputeType": "BUILD_GENERAL1_SMALL",
                    "Image": "ubuntu:bionic",
                    "EnvironmentVariables": [
                      {
                        "Name": "varName",
                        "Value": "varValue"
                      }
                    ]
                },
                "Source": {
                    "Auth" : {
                        "Resource": "WTF IS THIS VALUE, Docs say a resource is a resource for use with the type."
                        "Type" : "OAUTH"
                    },
                    "BuildSpec" : "buildspec.yml",
                    "GitCloneDepth" : 1,
                    "ReportBuildStatus" : true,
                    "Location" : "https://github.com/user/repo.git",
                    "Type" : "GITHUB"
                },
                "Triggers": {
                    "FilterGroups": [
                        [
                            {
                                "Pattern" : "PULL_REQUEST_CREATED, PULL_REQUEST_UPDATED, PULL_REQUEST_REOPENED",
                                "Type" : "EVENT"
                            }
                        ]
                    ],
                    "Webhook" : true
                },
                "TimeoutInMinutes": 10,
                "Tags": [
                    {
                      "Key": "Key1",
                      "Value": "Value1"
                    },
                    {
                      "Key": "Key2",
                      "Value": "Value2"
                    }
                ]
            }
        },
        "CodeBuildServiceRole": {
            "Type": "AWS::IAM::Role",
            "Properties": {
                "AssumeRolePolicyDocument": {
                    "Version": "2012-10-17",
                    "Statement": [
                        {
                            "Effect": "Allow",
                            "Principal": {
                                "Service": [
                                    "codebuild.amazonaws.com"
                                ]
                            },
                            "Action": "sts:AssumeRole"
                        }
                    ]
                },
                "Path": "/",
                "Policies": [
                    {
                        "PolicyName": "CodeBuildAccessPolicies",
                        "PolicyDocument": {
                            "Version": "2012-10-17",
                            "Statement": [
                                {
                                    "Effect": "Allow",
                                    "Action": [
                                        "codecommit:CancelUploadArchive",
                                        "codecommit:GetBranch",
                                        "codecommit:GetCommit",
                                        "codecommit:GetUploadArchiveStatus",
                                        "codecommit:UploadArchive"
                                    ],
                                    "Resource": "*"
                                },
                                {
                                    "Effect": "Allow",
                                    "Action": [
                                        "codedeploy:CreateDeployment",
                                        "codedeploy:GetApplicationRevision",
                                        "codedeploy:GetDeployment",
                                        "codedeploy:GetDeploymentConfig",
                                        "codedeploy:RegisterApplicationRevision"
                                    ],
                                    "Resource": "*"
                                },
                                {
                                    "Effect": "Allow",
                                    "Action": [
                                        "codebuild:BatchGetBuilds",
                                        "codebuild:StartBuild"
                                    ],
                                    "Resource": "*"
                                },
                                {
                                    "Effect": "Allow",
                                    "Action": [
                                        "devicefarm:ListProjects",
                                        "devicefarm:ListDevicePools",
                                        "devicefarm:GetRun",
                                        "devicefarm:GetUpload",
                                        "devicefarm:CreateUpload",
                                        "devicefarm:ScheduleRun"
                                    ],
                                    "Resource": "*"
                                },
                                {
                                    "Effect": "Allow",
                                    "Action": [
                                        "iam:PassRole"
                                    ],
                                    "Resource": "*"
                                },
                                {
                                    "Effect": "Allow",
                                    "Action": [
                                        "elasticbeanstalk:*",
                                        "ec2:*",
                                        "elasticloadbalancing:*",
                                        "autoscaling:*",
                                        "cloudwatch:*",
                                        "s3:*",
                                        "sns:*",
                                        "cloudformation:*",
                                        "rds:*",
                                        "sqs:*",
                                        "ecs:*"
                                    ],
                                    "Resource": "*"
                                }
                            ]
                        }
                    }
                ]
            }
        }
    }
}

업데이트 그래서 "TempProj"라는 관련이없는 CodeDeploy 프로젝트를 수동으로 만들고 GitHub에 연결하여 GitHub에 연결할 수있었습니다. 이제 Cloud Formation에서 스택을 만들 때 GitHub에 자동으로 연결할 수 있습니다. 인스턴스를 삭제할 수도 있으며 계속 작동합니다.

  • 답변 # 1

    AWS Secrets Manager를 사용하여 GitHub OAuth 토큰을 안전하게 저장 한 다음 CloudFormation 템플릿에서 동적 참조를 사용하여 저장된 값으로 확인할 수 있습니다.

    문서에 대한 링크는 다음과 같습니다. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html#dynamic-references-secretsmanager

    Secrets Manager로 비밀을 만들 때 하나의 비밀에 3 가지 부분이 있습니다 :

    비밀 이름 (이 비밀에 대한 레이블 (예 : GitHubToken))

    비밀 키 (예 : OAuthToken

    비밀 값 (실제로 저장하려는 것)

    위의 예제는 CloudFormation 템플릿에서 다음과 같이 참조됩니다 :

    '{{resolve:secretsmanager:GitHubToken:SecretString:OAuthToken}}'
    
    

    리포지토리의 지정된 브랜치에 대한 모든 깃 푸시 후 파이프 라인이 실행되도록하는 CodePipeline에 대한 CloudFormation 템플릿의 전체 스 니펫은 다음과 같습니다.

    ...
    MyPipeline:
      Type: AWS::CodePipeline::Pipeline
      Properties:
        Stages:
          -
            Name: GetSource
            Actions:
              -
                Name: GetMyGithubRepoSourceOnPush
                ActionTypeId:
                  Category: Source
                  Owner: ThirdParty
                  Version: 1
                  Provider: GitHub
                OutputArtifacts:
                  - Name: NameOfArtifactForNextStages
                Configuration:
                  Owner: MyGithubUsername
                  Repo: MyGithubRepoName
                  Branch: MyRepoBranchName
                  OAuthToken: '{{resolve:secretsmanager:NameOfSecret:SecretString:KeyOfSecret}}'
    
    

    도움이 되었으면 좋겠습니다.

관련 자료

  • 이전 objective c - iPhone에서 벨소리가 울리는 동안 비디오가 재생되면 오디오가 없습니다 YouTube-Player-iOS-Helper 사용
  • 다음 leiningen - 사전 조건을 포함하여 Clojure 어설 션을 비활성화하는 방법은 무엇입니까?