Skip to content

Instantly share code, notes, and snippets.

@jl91
Forked from jeff1evesque/codebuild.yaml
Created May 25, 2022 01:17
Show Gist options
  • Select an option

  • Save jl91/2daa4c2efaedee2e6da405c618e62f0e to your computer and use it in GitHub Desktop.

Select an option

Save jl91/2daa4c2efaedee2e6da405c618e62f0e to your computer and use it in GitHub Desktop.

Revisions

  1. @jeff1evesque jeff1evesque created this gist Apr 4, 2022.
    255 changes: 255 additions & 0 deletions codebuild.yaml
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,255 @@
    AWSTemplateFormatVersion: 2010-09-09
    Description: >
    complete example of artifacts being shared between AWS CodeBuild projects
    and AWS CodePipeline stages.
    Resources:
    CodePipelineRole:
    Type: AWS::IAM::Role
    Properties:
    AssumeRolePolicyDocument:
    Version: "2012-10-17"
    Statement:
    Effect: Allow
    Principal:
    Service: codepipeline.amazonaws.com
    Action: sts:AssumeRole
    Path: /
    ManagedPolicyArns:
    - arn:aws:iam::aws:policy/AdministratorAccess

    CodeBuildRole:
    Type: AWS::IAM::Role
    Properties:
    AssumeRolePolicyDocument:
    Version: "2012-10-17"
    Statement:
    Effect: Allow
    Principal:
    Service: codebuild.amazonaws.com
    Action: sts:AssumeRole
    ManagedPolicyArns:
    - arn:aws:iam::aws:policy/AdministratorAccess

    ArtifactStoreBucket:
    Type: AWS::S3::Bucket
    Properties:
    VersioningConfiguration:
    Status: Enabled
    AccessControl: BucketOwnerFullControl

    CodeCommitRepo1:
    Type: AWS::CodeCommit::Repository
    Properties:
    RepositoryName: !Sub '${AWS::StackName}-repo-one'
    RepositoryDescription: CodeCommit Repository

    CodeCommitRepo2:
    Type: AWS::CodeCommit::Repository
    Properties:
    RepositoryName: !Sub '${AWS::StackName}-repo-two'
    RepositoryDescription: CodeCommit Repository

    CodeBuildProjectOne:
    Type: AWS::CodeBuild::Project
    DependsOn: CodeBuildRole
    Properties:
    Artifacts:
    Type: CODEPIPELINE
    Environment:
    ComputeType: BUILD_GENERAL1_SMALL
    Image: aws/codebuild/amazonlinux2-x86_64-standard:3.0
    Type: LINUX_CONTAINER
    Name: !Sub ${AWS::StackName}CodeBuildProjectOne
    ServiceRole: !Ref CodeBuildRole
    Source:
    Type: CODEPIPELINE
    BuildSpec: !Sub |
    version: 0.2
    phases:
    build:
    commands:
    - env | grep CODEBUILD
    - ls -laR
    post_build:
    commands:
    # transformations here
    - mkdir /many-to-one
    - cd $CODEBUILD_SRC_DIR
    - cp -R ./* /many-to-one
    - cd $CODEBUILD_SRC_DIR_Source2Artifact
    - cp -R ./* /many-to-one
    artifacts:
    files:
    - '**/*'
    base-directory: '/many-to-one'
    CodeBuildProjectTwo:
    Type: AWS::CodeBuild::Project
    DependsOn: CodeBuildRole
    Properties:
    Artifacts:
    Type: CODEPIPELINE
    Environment:
    ComputeType: BUILD_GENERAL1_SMALL
    Image: aws/codebuild/amazonlinux2-x86_64-standard:3.0
    Type: LINUX_CONTAINER
    Name: !Sub ${AWS::StackName}CodeBuildProjectTwo
    ServiceRole: !Ref CodeBuildRole
    Source:
    Type: CODEPIPELINE
    BuildSpec: !Sub |
    version: 0.2
    phases:
    build:
    commands:
    - env | grep CODEBUILD
    - ls -laR
    - touch baz
    artifacts:
    files:
    - '**/*'
    secondary-artifacts:
    BuildTwoFoo:
    files:
    - './foo'
    BuildTwoBar:
    files:
    - './bar'
    BuildTwoBaz:
    files:
    - './baz'
    CodeBuildProjectThree:
    Type: AWS::CodeBuild::Project
    DependsOn: CodeBuildRole
    Properties:
    Artifacts:
    Type: CODEPIPELINE
    Environment:
    ComputeType: BUILD_GENERAL1_SMALL
    Image: aws/codebuild/amazonlinux2-x86_64-standard:3.0
    Type: LINUX_CONTAINER
    Name: !Sub ${AWS::StackName}CodeBuildProjectThree
    ServiceRole: !Ref CodeBuildRole
    Source:
    Type: CODEPIPELINE
    BuildSpec: !Sub |
    version: 0.2
    phases:
    build:
    commands:
    - env | grep CODEBUILD
    - ls -laR
    post_build:
    commands:
    # transformations here
    - mkdir -p /many-to-many/first
    - mkdir -p /many-to-many/second
    - cd $CODEBUILD_SRC_DIR
    - cp foo /many-to-many/first
    - cd $CODEBUILD_SRC_DIR_BuildTwoBar
    - cp bar /many-to-many/first
    - cp bar /many-to-many/second
    - cd $CODEBUILD_SRC_DIR_BuildTwoBaz
    - cp baz /many-to-many/second
    artifacts:
    files:
    - '**/*'
    secondary-artifacts:
    BuildThreeFirst:
    files:
    - '**/*'
    base-directory: '/many-to-many/first'
    BuildThreeSecond:
    files:
    - '**/*'
    base-directory: '/many-to-many/second'
    CodePipeline:
    Type: AWS::CodePipeline::Pipeline
    Properties:
    RoleArn: !GetAtt CodePipelineRole.Arn
    ArtifactStore:
    Location:
    Ref:
    ArtifactStoreBucket
    Type: S3
    Stages:
    - Name: Source
    Actions:
    - InputArtifacts: []
    Name: Source1
    ActionTypeId:
    Category: Source
    Owner: AWS
    Version: 1
    Provider: CodeCommit
    OutputArtifacts:
    - Name: Source1Artifact
    Configuration:
    BranchName: main
    RepositoryName: !Sub '${AWS::StackName}-repo-one'
    RunOrder: 1
    - InputArtifacts: []
    Name: Source2
    ActionTypeId:
    Category: Source
    Owner: AWS
    Version: 1
    Provider: CodeCommit
    OutputArtifacts:
    - Name: Source2Artifact
    Configuration:
    BranchName: main
    RepositoryName: !Sub '${AWS::StackName}-repo-two'
    RunOrder: 1
    - Name: Build
    Actions:
    - Name: BuildOne
    ActionTypeId:
    Category: Build
    Owner: AWS
    Version: 1
    Provider: CodeBuild
    OutputArtifacts:
    - Name: BuildOne
    InputArtifacts:
    - Name: Source1Artifact
    - Name: Source2Artifact
    Configuration:
    ProjectName: !Ref CodeBuildProjectOne
    PrimarySource: Source1Artifact
    RunOrder: 1
    - Name: BuildTwo
    ActionTypeId:
    Category: Build
    Owner: AWS
    Version: 1
    Provider: CodeBuild
    OutputArtifacts:
    - Name: BuildTwoFoo
    - Name: BuildTwoBar
    - Name: BuildTwoBaz
    InputArtifacts:
    - Name: BuildOne
    Configuration:
    ProjectName: !Ref CodeBuildProjectTwo
    RunOrder: 2
    - Name: BuildThree
    ActionTypeId:
    Category: Build
    Owner: AWS
    Version: 1
    Provider: CodeBuild
    OutputArtifacts:
    - Name: BuildThreeFirst
    - Name: BuildThreeSecond
    InputArtifacts:
    - Name: BuildTwoFoo
    - Name: BuildTwoBar
    - Name: BuildTwoBaz
    Configuration:
    ProjectName: !Ref CodeBuildProjectThree
    PrimarySource: BuildTwoFoo
    RunOrder: 3