From a5e2250b222d819354f78c4835445e5c45c61452 Mon Sep 17 00:00:00 2001 From: Allen Huang Date: Tue, 3 Aug 2021 14:56:30 -0700 Subject: [PATCH 1/3] Add Dockerfile --- Dockerfile | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..16a82ff --- /dev/null +++ b/Dockerfile @@ -0,0 +1,10 @@ +# Only use semver version tags. Don't specify distro! +FROM node:16.2.0-stretch + +RUN curl --silent -o /usr/local/bin/node-prune https://s3.amazonaws.com/ssi-us-east-1-pkg/node-prune/node-prune-0.1 && \ + chmod +x /usr/local/bin/node-prune && \ + rm -rf /tmp/* && \ + groupadd ssi -r && \ + useradd -r -g ssi ssi + +CMD ["echo", "Hello World from node"] From 6c3b7f9a1c6c2388ce9244b75dcc08ecfdd57b32 Mon Sep 17 00:00:00 2001 From: Allen Huang Date: Thu, 5 Aug 2021 10:31:09 -0700 Subject: [PATCH 2/3] Add pipeline.yml --- buildkite.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 buildkite.yml diff --git a/buildkite.yml b/buildkite.yml new file mode 100644 index 0000000..d0f2825 --- /dev/null +++ b/buildkite.yml @@ -0,0 +1,15 @@ +steps: + - command: "pwd && ls" + - wait + - commands: + - "echo 'Hello World'" + - "docker build . -t test-image" + - "docker run test-image" + plugins: + - docker#v3.8.0: + image: "676020893150.dkr.ecr.us-east-1.amazonaws.com/docker" + always-pull: true + volumes: + - "/var/run/docker.sock:/var/run/docker.sock" + label: "test" + From d407874860aac2485f05e37d4d04344de9ca16b6 Mon Sep 17 00:00:00 2001 From: Allen Huang Date: Thu, 5 Aug 2021 23:44:03 -0700 Subject: [PATCH 3/3] Test dynamic pipelines --- buildkite.yml | 4 ++-- generate-pipelines.sh | 15 +++++++++++++++ pipelines.jsonnet | 32 ++++++++++++++++++++++++++++++++ workspaces.json | 3 +++ 4 files changed, 52 insertions(+), 2 deletions(-) create mode 100755 generate-pipelines.sh create mode 100644 pipelines.jsonnet create mode 100644 workspaces.json diff --git a/buildkite.yml b/buildkite.yml index d0f2825..8d0d5b7 100644 --- a/buildkite.yml +++ b/buildkite.yml @@ -1,6 +1,4 @@ steps: - - command: "pwd && ls" - - wait - commands: - "echo 'Hello World'" - "docker build . -t test-image" @@ -12,4 +10,6 @@ steps: volumes: - "/var/run/docker.sock:/var/run/docker.sock" label: "test" + - wait + - command: ./generate-pipelines.sh diff --git a/generate-pipelines.sh b/generate-pipelines.sh new file mode 100755 index 0000000..d65aa88 --- /dev/null +++ b/generate-pipelines.sh @@ -0,0 +1,15 @@ +#!/bin/bash +set -euo pipefail + +envs_file='envs.yml' +workspaces_file='workspaces.json' + +rm -rf "$envs_file" +jsonnet pipelines.jsonnet | yq eval -P - > "$envs_file" + +envs=$(jq -r '.workspaces[]' "$workspaces_file") + +for e in ${envs[@]}; do + yq eval ".$e" "$envs_file" | buildkite-agent pipeline upload +done + diff --git a/pipelines.jsonnet b/pipelines.jsonnet new file mode 100644 index 0000000..def9885 --- /dev/null +++ b/pipelines.jsonnet @@ -0,0 +1,32 @@ +local workspaces = (import 'workspaces.json').workspaces; + +local plan_job(script, ws) = { + command: script + ws, + key: 'plan-' + ws, + label: 'plan-' + ws, +}; + +local apply_job(script, ws) = { + command: [script + ws], + depends_on: ['plan-' + ws], +}; + +local pipeline(ws) = { + [ws]: { + steps: [ + plan_job('echo terraform plan-', ws), + // { block: 'apply-' + ws }, + apply_job('echo terraform apply-', ws), + ], + }, +}; + +local generate_pipelines(pipelines) = + local append(arr, i, res) = + if i >= std.length(arr) then + res + else + append(arr, i + 1, res + arr[i]) tailstrict; + append(pipelines, 0, {}); + +{} + generate_pipelines([pipeline(ws) for ws in workspaces]) diff --git a/workspaces.json b/workspaces.json new file mode 100644 index 0000000..6dd89cf --- /dev/null +++ b/workspaces.json @@ -0,0 +1,3 @@ +{ + "workspaces": ["prod", "dev", "stg"] +}