/codebuild-local

Run buildspec.yaml files locally in docker

Primary LanguagePython

Codebuild Local

codebuild-local is a simple script for running AWS CodeBuild projects locally by using its buildspec.yaml file format.

How it works

Basically, codebuild-local takes a given buildspec.yaml and converts the definition into a dockerfile. Afterwards, a docker container is built and the build specification is executed within the container.

Getting Started

To install the script

git clone https://github.com/teekaay/codebuild-local.git
cd codebuild-local
pip install -e .

To run a code build specificiation (using the demo codebuild.yaml from the project)

codebuild-local --rm

For all available options, run codebuild-local --help.

Usage

usage: codebuild-local [-h] [--docker-image DOCKER_IMAGE]
                    [--dockerfile DOCKERFILE] [--buildspec BUILDSPEC]
                    [--context-dir CONTEXT_DIR] [--project PROJECT] [--rm]
                    [--verbose]

Run buildspec yaml files locally in docker

optional arguments:
-h, --help            show this help message and exit
--docker-image DOCKER_IMAGE
                        Name of the docker image to use. Defaults to debian
--dockerfile DOCKERFILE
                        Path to the generated Dockerfile. If not specified,
                        the Dockerfile will be printed to stdout
--buildspec BUILDSPEC
                        Path to buildspec file. Defaults to buildspec.yaml
--context-dir CONTEXT_DIR
                        Docker context directory. Defaults to current working
                        directory
--project PROJECT     Name of the project. If not provided a random UUID
                        will be generated
--rm                  If set, intermediate files will be cleaned up
--verbose             Enable verbose logging

Further Notes

Using AWS SSM

If you want to use AWS for retrieving parameters from the parameter store, you can do this by using the env propery

env:
    variables: {}
    parameter-store: 
        key1: "value1"
        key2: "value2"

Here, the two SSM parameters value1 and value2 will be retrieved from SSM and be set as

ENV key1=<value-of-ssm-param-value2>
ENV key2=<value-of-ssm-param-value2>

Note that you need to have a valid AWS session token.