Kyle Rockman
Lead Infrastructure Engineer OpsLevel.com
http://slides.com/rocktavious/uacf-ci/live/
Kyle Rockman
Docker Containers facilitate local development:
docker-compose.yml
base:
build: .
dockerfile: parlour.dockerfile
# SERVICES
parlour:
extends:
file: docker-compose.yml
service: base
ports:
- "8000:8000"
environment:
- "CONSUL_URL=https://consul.uacf.io"
volumes:
- $PWD:/uacf
# TESTS
unittest:
extends:
file: docker-compose.yml
service: base
command: py.test ...
volumes:
- $PWD:/uacf
# CI TESTS
ci-unittest:
image: docker.uacf.io/parlour/parlour:CIVERSION
command: py.test ...
env.GIT_PROJECT = "infra/parlour"
def images = [
parlour: [
DOCKER_IMAGE_NAME: "parlour/parlour",
DOCKER_CONTEXT_PATH: ".",
DOCKER_FILE: "./parlour.dockerfile",
],
]
def tests = [
pep8: [
TEST_YAML: "./docker-compose.yml",
TEST_TARGET: "ci-pep8",
],
unittest: [
TEST_YAML: "./docker-compose.yml",
TEST_TARGET: "ci-unittest",
HAS_JUNIT_REPORT: true,
HAS_PYTHON_HTML_REPORT: true,
]
]
stage 'Init'
lib = node('swarm') {
git 'git@scm-main-01.dc.myfitnesspal.com:infra/CI.git'
load 'docker_v2/lib.groovy'
}
lib.start()
if (env.BRANCH_NAME in ["master"]){
lib.publish(images, true)
} else {
lib.build(images, true)
lib.test(tests, true)
}
lib.finish()
stage 'Init'
lib = node('swarm') {
git 'git@scm-main-01.dc.myfitnesspal.com:infra/CI.git'
load 'docker_v2/lib.groovy'
}
lib.start()
if (env.BRANCH_NAME in ["master"]){
lib.publish(images, true)
} else {
lib.build(images, true)
lib.test(tests, true)
}
lib.finish()
env.GIT_PROJECT = "infra/parlour"
def images = [
parlour: [
DOCKER_IMAGE_NAME: "parlour/parlour",
DOCKER_CONTEXT_PATH: ".",
DOCKER_FILE: "./parlour.dockerfile",
],
]
def tests = [
pep8: [
TEST_YAML: "./docker-compose.yml",
TEST_TARGET: "ci-pep8",
],
unittest: [
TEST_YAML: "./docker-compose.yml",
TEST_TARGET: "ci-unittest",
HAS_JUNIT_REPORT: true,
HAS_PYTHON_HTML_REPORT: true,
]
]
def images = [
uacf_amzn: [
DOCKER_IMAGE_NAME: "uacf_amzn/uacf_base",
DOCKER_CONTEXT_PATH: ".",
DOCKER_FILE: "./Dockerfile",
DOCKER_IMAGE_VERSION: "2015.09_2",
],
java8: [
DOCKER_IMAGE_NAME: "uacf_amzn/java8",
DOCKER_CONTEXT_PATH: "./java8/",
DOCKER_FILE: "./java8/Dockerfile",
DOCKER_IMAGE_VERSION: "8u66b17_2",
NEEDS_INTERIM_PARENT: true,
],
java8_gradle: [
DOCKER_IMAGE_NAME: "uacf_amzn/java8_gradle",
DOCKER_CONTEXT_PATH: "./java8/gradle/",
DOCKER_FILE: "./java8/gradle/Dockerfile",
DOCKER_IMAGE_VERSION: "2.9_2",
NEEDS_INTERIM_PARENT: true,
]
]
lib.start()
if (env.BRANCH_NAME in ["master"]){
lib.publish(images, true)
} else {
lib.build(images, false)
}
lib.finish()
def images = [
productcatalog: [
DOCKER_IMAGE_NAME: "lsr/product-catalog",
DOCKER_CONTEXT_PATH: ".",
DOCKER_FILE: "./Dockerfile",
],
paymentsdb: [
DOCKER_IMAGE_NAME: "lsr/paymentsdb",
DOCKER_CONTEXT_PATH: "./docker/paymentsdb",
DOCKER_FILE: "./docker/paymentsdb/Dockerfile",
]
]
def tests = [
unittest: [
TEST_YAML: "docker-compose.yml",
TEST_TARGET: "ci-unittest",
HAS_JUNIT_REPORT: true,
JUNIT_REPORT_REGEX: "mfp.platform.*.xml"
],
]
lib.gitlab_pipeline_v1(images, tests, 'jenkins', 'master')
def gitlab_pipeline_v1(images, tests,
develop='develop',
master='master',
has_release=false) {
echo "Master Branch: $master"
echo "Develop branch: $develop"
echo "Checking if we should build $env.BRANCH_NAME ..."
isDevelop = env.BRANCH_NAME.startsWith(develop)
isMaster = env.BRANCH_NAME.startsWith(master)
if (isDevelop || isMaster) {
start()
try {
build(images, true)
test(tests, true)
if (isMaster) {
publish(images, true)
if (has_release) {
release(images, true)
}
}
} catch (e) {
currentBuild.result = 'UNSTABLE'
printStackTrace()
} finally {
finish()
}
}
}
Any UI help is warmly welcomed!
Questions ?
By Kyle Rockman