Skip to content

Instantly share code, notes, and snippets.

@mweagle
Created May 25, 2016 14:11
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mweagle/24581524a2fac2df25e71fecc1cd3c5d to your computer and use it in GitHub Desktop.
Save mweagle/24581524a2fac2df25e71fecc1cd3c5d to your computer and use it in GitHub Desktop.
Concourse CI pipeline for http://gosparta.io application build
################################################################################
# REFERENCES
# ConcourseCI Docs: https://concourse.ci
# Concourse tutorial: https://github.com/starkandwayne/concourse-tutorial
#
# NOTES
# This file is a self-contained description of a Concourse CI pipeline
# to deploy a http://gosparta.io application. There's a couple of things to
# note:
# - The YAML uses node references so that scripts can be defined in the
# CONSTANTS key and referenced in the jobs section
# - This requires an additional YML file that defines AWS credentials and the
# S3 bucket that should be used for storage. Required keys:
# s3-bucket: XXXXXX
# s3-access-key-id: XXXXXXXXXXXXXXXXXX
# s3-secret-access-key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#
################################################################################
# RESOURCES
################################################################################
resources:
- name: SpartaHelloWorld
type: git
source:
uri: https://github.com/mweagle/SpartaHelloWorld
branch: master
- name: Version
type: semver
source:
bucket: {{s3-bucket}}
region_name: us-west-2
key: SpartaHelloWorldSemVer
access_key_id: {{s3-access-key-id}}
secret_access_key: {{s3-secret-access-key}}
- name: SourceArchive
type: s3
source:
bucket: {{s3-bucket}}
regexp: SpartaHelloWorld-(.*).tgz
region_name: us-west-2
access_key_id: {{s3-access-key-id}}
secret_access_key: {{s3-secret-access-key}}
################################################################################
# JOBS
################################################################################
jobs:
- name: Package
serial_groups: [Version]
plan:
- get: SpartaHelloWorld
trigger: true
- get: Version
params: {pre: rc}
- task: package
config:
<< : *CONFIG
inputs:
- name: SpartaHelloWorld
- name: Version
run:
path: sh
args:
- -exc
- *PACKAGE_SCRIPT
outputs:
- name: build
- put: SourceArchive
params: {file: build/SpartaHelloWorld-*.tgz*}
- put: Version
params: {file: Version/number}
- name: UnitTest
plan:
- get: SourceArchive
passed: [Package]
trigger: true
- task: unit-test
config:
<< : *CONFIG
inputs:
- name: SourceArchive
run:
path: sh
args:
- -exc
- *UNIT_TEST_SCRIPT
- name: Build
plan:
- get: SourceArchive
passed: [UnitTest]
trigger: true
- task: build
config:
<< : *CONFIG
inputs:
- name: SourceArchive
run:
path: sh
args:
- -exc
- *BUILD_SCRIPT
outputs:
- name: build
- name: Provision
plan:
- get: SourceArchive
passed: [Build]
trigger: true
- task: deploy
config:
<< : *CONFIG
inputs:
- name: SourceArchive
params:
AWS_REGION: us-west-2
AWS_ACCESS_KEY_ID: {{s3-access-key-id}}
AWS_SECRET_ACCESS_KEY: {{s3-secret-access-key}}
run:
path: sh
args:
- -exc
- *PROVISION_SCRIPT
################################################################################
# CONSTANTS
################################################################################
CONSTANTS:
- CONFIG: &CONFIG
platform: linux
image_resource:
type: docker-image
source:
repository: golang
tag: '1.6'
- PACKAGE_SCRIPT: &PACKAGE_SCRIPT |
cd Version
SEM_NUMBER=`cat number`
SEM_VERSION=`cat version`
echo "SEM_NUMBER=$SEM_NUMBER, SEM_VERSION=$SEM_VERSION"
cd ..
cd SpartaHelloWorld
if [ ! -d ./vendor ]
then
echo "./vendor does not exist - fetching packages"
go get -d -v ./...
ls -la $GOPATH/src
# Move the $GOPATH/src contents into /.vendor
mv $GOPATH/src ./vendor
fi
cd ..
mkdir -pv build
# TAR everything up...
OUTPUT_FILE="./build/SpartaHelloWorld-$SEM_NUMBER.tgz"
tar -zcf $OUTPUT_FILE --exclude=".git" ./SpartaHelloWorld
- UNIT_TEST_SCRIPT: &UNIT_TEST_SCRIPT |
tar -xf ./SourceArchive/*.tgz
mv ./SpartaHelloWorld $GOPATH/src
cd $GOPATH/src/SpartaHelloWorld
go test -v .
- BUILD_SCRIPT: &BUILD_SCRIPT |
tar -xf ./SourceArchive/*.tgz
mv ./SpartaHelloWorld $GOPATH/src
cd $GOPATH/src/SpartaHelloWorld
go build .
- PROVISION_SCRIPT: &PROVISION_SCRIPT |
tar -xf ./SourceArchive/*.tgz
mv ./SpartaHelloWorld $GOPATH/src
cd $GOPATH/src/SpartaHelloWorld
go build -o SpartaProvision .
./SpartaProvision --level info provision --s3Bucket {{s3-bucket}}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment