* More simple and streamlined base image build file
* Use a builder image to decrease the size and security footprint of running containers
* Make demos more prod-like
* Add l10n for prod builds via docker commit
* Specifically include only those files required for the running site
* Tests in circleci now use the same docker build and test scripts
* Add lock for docker image building per git hash
* Add environment variable support to jenkins.yml
* Add headless and firefox integration tests to prod deploys
* Run integration smoke tests before deployment
This commit is contained in:
Paul McLanahan 2017-02-08 00:55:30 -05:00
Родитель fe1e4c5450
Коммит a2cc3e9b2d
30 изменённых файлов: 315 добавлений и 249 удалений

Просмотреть файл

@ -1,3 +1,2 @@
locale/.git
.git
.env

Просмотреть файл

@ -28,6 +28,9 @@ indent_size = 4
[*.scss]
indent_size = 4
[*.sh]
indent_size = 4
[*.html]
indent_size = 2
@ -37,6 +40,9 @@ indent_size = 2
[Jenkinsfile]
indent_size = 4
[*.groovy]
indent_size = 4
[package.json]
indent_size = 2

2
.gitignore поставляемый
Просмотреть файл

@ -22,6 +22,7 @@ tmp/*
*.less.css
db.sql
/locale
/results
Thumbs.db
Desktop.ini
venv
@ -41,3 +42,4 @@ tests/functional/results.html
tests/functional/assets/style.css
.eslintcache
.docker-build*
Dockerfile-*

102
Jenkinsfile поставляемый
Просмотреть файл

@ -1,6 +1,6 @@
#!groovy
@Library('github.com/mozmar/jenkins-pipeline@20170126.1')
@Library('github.com/mozmar/jenkins-pipeline@20170214.1')
def config
def utils
@ -10,12 +10,15 @@ stage ('Checkout') {
checkout scm
sh 'git submodule sync'
sh 'git submodule update --init --recursive'
// defined in the Library loaded above
setGitEnvironmentVariables()
// clean up
sh 'make clean'
// load the config
config = readYaml file: 'jenkins.yml'
// load the utility functions used below
utils = load 'docker/jenkins/utils.groovy'
// defined in the Library loaded above
setGitEnvironmentVariables()
setConfigEnvironmentVariables(config)
// save the files for later
stash name: 'scripts', includes: 'bin/,docker/'
stash name: 'tests', includes: 'tests/,requirements/'
@ -39,62 +42,47 @@ if ( config.branches.containsKey(env.BRANCH_NAME) ) {
}
}
utils.ircNotification(config, [stage: 'Test & Deploy', status: 'starting'])
try {
utils.buildDockerImage(dockerfile: 'bedrock_base', update: true)
utils.buildDockerImage(dockerfile: 'bedrock_code', fromDockerfile: 'bedrock_base')
} catch(err) {
utils.ircNotification(config, [stage: 'Docker Build', status: 'failure'])
throw err
lock ("bedrock-docker-${env.GIT_COMMIT}") {
try {
sh 'docker/jenkins/build_images.sh --prod --test'
} catch(err) {
utils.ircNotification(config, [stage: 'Docker Build', status: 'failure'])
throw err
}
}
}
}
milestone()
stage ('Test Images') {
node {
unstash 'scripts'
try {
withEnv(['DOCKER_REPOSITORY=mozorg/bedrock_code']) {
sh 'docker/jenkins/run_tests.sh'
parallel([
integration_tests: utils.integrationTestJob('local'),
unit_tests: {
node {
unstash 'scripts'
try {
sh 'docker/jenkins/run_tests.sh'
} catch(err) {
utils.ircNotification(config, [stage: 'Unit Test', status: 'failure'])
throw err
}
}
} catch(err) {
utils.ircNotification(config, [stage: 'Unit Test', status: 'failure'])
throw err
}
utils.ircNotification(config, [stage: 'Docker Builds & Tests', status: 'complete'])
}
},
])
}
milestone()
stage ('Push Public Images') {
parallel([
dockerhub: {
node {
unstash 'scripts'
try {
utils.buildDockerImage(dockerfile: 'bedrock_l10n', fromDockerfile: 'bedrock_code', script: 'include_l10n.sh')
} catch(err) {
utils.ircNotification(config, [stage: 'L10n Build', status: 'failure'])
throw err
}
try {
utils.pushDockerhub('mozorg/bedrock_base')
utils.pushDockerhub('mozorg/bedrock_code')
utils.pushDockerhub('mozorg/bedrock_l10n', 'mozorg/bedrock')
} catch(err) {
utils.ircNotification(config, [stage: 'Dockerhub Push Failed', status: 'warning'])
}
}
},
integration_tests: {
node {
unstash 'scripts'
unstash 'tests'
// prep for next stage
sh 'docker/jenkins/build_integration_test_image.sh'
}
},
])
node {
unstash 'scripts'
try {
utils.pushDockerhub('mozorg/bedrock_base')
utils.pushDockerhub('mozorg/bedrock_code')
utils.pushDockerhub('mozorg/bedrock_l10n', 'mozorg/bedrock')
} catch(err) {
utils.ircNotification(config, [stage: 'Dockerhub Push Failed', status: 'warning'])
}
}
}
/**
@ -179,16 +167,14 @@ else if ( env.BRANCH_NAME ==~ /^demo__[\w-]+$/ ) {
node {
utils.ircNotification(config, [stage: 'Demo Deploy', status: 'starting'])
stage ('build') {
milestone()
try {
sh 'make clean'
sh 'make sync-all'
sh 'echo "ENV GIT_SHA ${GIT_COMMIT}" >> docker/dockerfiles/bedrock_dev_final'
sh 'echo "RUN echo ${GIT_COMMIT} > static/revision.txt" >> docker/dockerfiles/bedrock_dev_final'
sh 'make build-final'
} catch(err) {
utils.ircNotification(config, [stage: 'Demo Build', status: 'failure'])
throw err
lock ("bedrock-docker-${env.GIT_COMMIT}") {
milestone()
try {
sh 'docker/jenkins/build_images.sh --demo'
} catch(err) {
utils.ircNotification(config, [stage: 'Demo Build', status: 'failure'])
throw err
}
}
}

Просмотреть файл

@ -56,6 +56,10 @@ clean:
# test related things
-rm -f .coverage
-rm -rf results
# static files
git clean -fdx static
# docs files
-rm -rf docs/_build/

Просмотреть файл

@ -2,18 +2,7 @@ machine:
services:
- docker
node:
version: 4.2.6
environment:
# Deis
DEIS_CONTROLLER: https://deis.us-west.moz.works
DEIS_USERNAME: circleci
# Docker
QUAY_EMAIL: mozmar@example.com
QUAY_USERNAME: mozmar+circleci
DOCKER_REPOSITORY: quay.io/mozmar/bedrock
DOCKER_IMAGE_TAG: "$DOCKER_REPOSITORY:$CIRCLE_BRANCH"
BASE_DOCKER_REPOSITORY: quay.io/mozmar/bedrock_base
BASE_DOCKER_IMAGE_TAG: "$BASE_DOCKER_REPOSITORY:$CIRCLE_BRANCH"
version: 6.1.0
checkout:
post:
@ -25,9 +14,9 @@ dependencies:
- node_modules
- "~/docker"
override:
- docker/jenkins/build_images.sh --test
- npm install -g gulp-cli
- npm install
- bin/circleci-docker-build.sh
test:
pre:
@ -36,4 +25,4 @@ test:
- gulp css:lint
- gulp js:lint
- gulp js:test
- make test-image
- docker/jenkins/run_tests.sh

Просмотреть файл

@ -1,25 +1,24 @@
FROM quay.io/mozmar/base
FROM quay.io/mozmar/base:latest
# Set Python-related environment variables to reduce annoying-ness
ENV PYTHONUNBUFFERED=1
ENV PYTHONDONTWRITEBYTECODE=1
ENV PIP_DISABLE_PIP_VERSION_CHECK=1
ENV LANG=C.UTF-8
RUN update-alternatives --install /bin/sh sh /bin/bash 10
RUN adduser --uid 1000 --disabled-password --gecos '' --no-create-home webdev
WORKDIR /app
EXPOSE 8000
CMD ["./docker/run.sh"]
RUN adduser --uid 1000 --disabled-password --gecos '' --no-create-home webdev
RUN apt-get update && \
apt-get install -y --no-install-recommends \
gettext build-essential python python-dev python-pip python-setuptools \
libxml2-dev libxslt1.1 libxslt1-dev \
nodejs-legacy npm git libpq-dev
gettext build-essential python-{dev,pip,setuptools} \
libxml2-dev libxslt1.1 libxslt1-dev git libpq-dev
COPY ./requirements /app/requirements
# Install app
RUN pip install --no-cache-dir -r requirements/dev.txt
# Install Python deps
RUN pip install --no-cache-dir -r requirements/prod.txt
RUN pip install --no-cache-dir -r requirements/docker.txt
RUN pip install --no-cache-dir -r requirements/test.txt

Просмотреть файл

@ -0,0 +1,14 @@
FROM mozorg/bedrock_base:${GIT_COMMIT}
ENV PATH=/node_modules/.bin:$PATH
ENV PIPELINE_LESS_BINARY=lessc
ENV PIPELINE_SASS_BINARY=node-sass
ENV PIPELINE_YUGLIFY_BINARY=yuglify
RUN apt-get install -y --no-install-recommends nodejs-legacy npm
COPY ./node_modules /
COPY ./package.json /
COPY ./lockdown.json /
# --unsafe-perm required for lockdown to function
RUN cd / && npm install --production --unsafe-perm

Просмотреть файл

@ -1,20 +1,25 @@
FROM ${FROM_DOCKER_REPOSITORY}:${GIT_COMMIT}
FROM mozorg/bedrock_base:${GIT_COMMIT}
COPY . /app
# changes infrequently
COPY ./bin ./bin
COPY ./etc ./etc
COPY ./lib ./lib
COPY ./root_files ./root_files
COPY ./scripts ./scripts
COPY ./wsgi ./wsgi
COPY ./manage.py ./
COPY ./LICENSE ./
COPY ./newrelic.ini ./
COPY ./contribute.json ./
RUN echo "${GIT_COMMIT}" > static/revision.txt
# --unsafe-perm required for lockdown to function
RUN npm install --production --unsafe-perm
RUN ./manage.py collectstatic -l --noinput
# Cleanup
RUN rm -rf node_modules
RUN ./docker/bin/softlinkstatic.py
RUN apt-get purge -y nodejs npm python-dev build-essential libxml2-dev libxslt1-dev
RUN apt-get autoremove -y
RUN rm -rf /var/lib/{apt,dpkg,cache,log} /usr/share/doc /usr/share/man /tmp/* /var/cache/*
# changes more frequently
COPY ./docker ./docker
COPY ./vendor-local ./vendor-local
COPY ./bedrock ./bedrock
COPY ./media ./media
COPY ./static ./static
ENV GIT_SHA ${GIT_COMMIT}
# Change User
RUN chown webdev.webdev -R .
USER webdev

Просмотреть файл

@ -0,0 +1,9 @@
FROM mozorg/bedrock_code:${GIT_COMMIT}
COPY ./locale ./locale
COPY ./bedrock.db ./
# Change User
USER root
RUN chown webdev.webdev -R .
USER webdev

Просмотреть файл

@ -1,26 +0,0 @@
FROM quay.io/mozmar/base
WORKDIR /app
# Run the tests
CMD ["/app/bin/run-integration-tests.sh"]
RUN apt-get update && \
apt-get install -y --no-install-recommends \
build-essential python python-dev python-pip python-setuptools \
libxml2-dev libxslt1.1 libxslt1-dev zlib1g-dev
# Defaults
ENV PYTEST_PROCESSES 5
ENV PRIVACY "public restricted"
ENV TESTS_PATH /app/tests
ENV RESULTS_PATH /app/results
ENV PYTHONDONTWRITEBYTECODE=1
ENV PIP_DISABLE_PIP_VERSION_CHECK=1
COPY ./requirements /app/requirements
# Install requirements
RUN pip install --no-cache-dir -r requirements/test.txt
COPY . /app

Просмотреть файл

@ -1,5 +1,8 @@
FROM ${FROM_DOCKER_REPOSITORY}:${GIT_COMMIT}
COPY . /app/locale
FROM mozorg/bedrock_code:${GIT_COMMIT}
COPY . ./locale/
# Change User
USER root
RUN chown -R webdev.webdev /app/locale
RUN chown webdev.webdev -R locale
USER webdev

Просмотреть файл

@ -1,4 +1,4 @@
FROM quay.io/mozmar/base
FROM quay.io/mozmar/base:latest
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential python python-dev python-pip python-setuptools

Просмотреть файл

@ -0,0 +1,11 @@
FROM mozorg/bedrock_code:${GIT_COMMIT}
CMD ["./docker/run-tests.sh"]
USER root
RUN pip install --no-cache-dir -r requirements/test.txt
COPY ./setup.cfg ./
COPY ./tests ./tests
RUN chown webdev.webdev -R .
USER webdev

Просмотреть файл

@ -1,40 +0,0 @@
#!/bin/bash
#
set -ex
DOCKER_IMAGE_TAG=${DOCKER_REPOSITORY}:${GIT_COMMIT}
TMP_DOCKER_TAG=${BUILD_TAG}
# If docker image exists and no force rebuild do nothing
FORCE_REBUILD=`echo "$FORCE_REBUILD" | tr '[:upper:]' '[:lower:]'`
if [[ $FORCE_REBUILD != "true" ]];
then
if docker history -q $DOCKER_IMAGE_TAG > /dev/null;
then
echo "Docker image already exists, do nothing"
exit 0;
fi
fi
cat docker/dockerfiles/${DOCKERFILE} | envsubst > Dockerfile
if [[ $FORCE_REBUILD == "true" ]];
then
NO_CACHE="true"
fi;
docker build -t ${TMP_DOCKER_TAG} --pull=${UPDATE_DOCKER_IMAGES:-true} --no-cache=${NO_CACHE:-false} . | tee docker-build.log
TAG=`tail -n 1 docker-build.log | awk '{ print $(NF) }'`
if [[ $FORCE_REBUILD != "true" ]];
then
if [[ $(tail -n 3 docker-build.log | grep "Using cache") && $(docker images | grep "${TAG}-squashed") ]];
then
echo "Docker image already squashed, skip squashing";
docker tag ${TAG}-squashed $DOCKER_IMAGE_TAG
exit 0;
fi
fi
docker-squash -t ${TAG}-squashed ${TMP_DOCKER_TAG}
docker tag ${TAG}-squashed ${DOCKER_IMAGE_TAG}

83
docker/jenkins/build_images.sh Executable file
Просмотреть файл

@ -0,0 +1,83 @@
#!/bin/bash
set -exo pipefail
if [[ -z "$GIT_COMMIT" ]]; then
GIT_COMMIT=$(git rev-parse HEAD)
fi
BUILD_IMAGE_TAG="mozorg/bedrock_build:${GIT_COMMIT}"
CODE_IMAGE_TAG="mozorg/bedrock_code:${GIT_COMMIT}"
DOCKER_REBUILD=false
# demo mode will build the demo image containing a db file full of data
DEMO_MODE=false
# prod mode will build the l10n image containing the locale dir
PROD_MODE=false
# test mode will build the unit testing image containing the testing requirements
TEST_MODE=false
# parse cli args
while [[ $# -gt 0 ]]; do
key="$1"
case $key in
-r|--rebuild)
DOCKER_REBUILD=true
;;
-d|--demo)
DEMO_MODE=true
;;
-p|--prod)
PROD_MODE=true
;;
-t|--test)
TEST_MODE=true
;;
esac
shift # past argument or value
done
function imageExists() {
if $DOCKER_REBUILD; then
return 1
fi
docker history -q "mozorg/bedrock_${1}:${GIT_COMMIT}" > /dev/null 2>&1
return $?
}
function dockerRun() {
env_file="$1"
image_tag="mozorg/bedrock_${2}:${GIT_COMMIT}"
cmd="$3"
docker run --user $(id -u) -v "$PWD:/app" --env-file "docker/${env_file}.env" "$image_tag" bash -c "$cmd"
}
if ! imageExists "base"; then
docker/jenkins/docker_build.sh --pull "base"
fi
# build the static files using the builder image
# and include those and the app in a code image
if ! imageExists "code"; then
# build a staticfiles builder image
if ! imageExists "build"; then
docker/jenkins/docker_build.sh "build"
fi
dockerRun prod build docker/jenkins/build_staticfiles.sh
echo "${GIT_COMMIT}" > static/revision.txt
docker/jenkins/docker_build.sh "code"
fi
# build a tester image for non-demo deploys
if $TEST_MODE && ! imageExists "test"; then
docker/jenkins/docker_build.sh "test"
fi
# include the data that the deployments need
if $DEMO_MODE && ! imageExists "demo"; then
dockerRun demo code bin/sync_all
docker/jenkins/docker_build.sh "demo"
fi
if $PROD_MODE && ! imageExists "l10n"; then
dockerRun prod code "python manage.py l10n_update"
docker/jenkins/docker_build.sh -c "locale" "l10n"
fi

Просмотреть файл

@ -1,2 +0,0 @@
#!/bin/bash -xe
docker build -t bedrock_integration_tests:${GIT_COMMIT} -f docker/dockerfiles/bedrock_integration_tests --pull=true .

Просмотреть файл

@ -0,0 +1,6 @@
#!/bin/bash
set -euxo pipefail
python manage.py collectstatic --link --noinput -v 0
python docker/bin/softlinkstatic.py

Просмотреть файл

@ -1,15 +1,18 @@
#!/bin/bash
#!/bin/bash -x
if [ "${DRIVER}" = "Remote" ]; then
docker stop bedrock-code-${BUILD_NUMBER}
docker rm bedrock-code-${BUILD_NUMBER}
BUILD_NUMBER="${BUILD_NUMBER:-0}"
for NODE_NUMBER in `seq ${NUMBER_OF_NODES:-5}`;
do
docker stop bedrock-selenium-node-${NODE_NUMBER}-${BUILD_NUMBER}
docker rm bedrock-selenium-node-${NODE_NUMBER}-${BUILD_NUMBER}
done;
docker stop bedrock-code-${BUILD_NUMBER}
docker rm bedrock-code-${BUILD_NUMBER}
docker stop bedrock-selenium-hub-${BUILD_NUMBER}
docker rm bedrock-selenium-hub-${BUILD_NUMBER}
fi
for NODE_NUMBER in `seq ${NUMBER_OF_NODES:-5}`;
do
docker stop bedrock-selenium-node-${NODE_NUMBER}-${BUILD_NUMBER}
docker rm bedrock-selenium-node-${NODE_NUMBER}-${BUILD_NUMBER}
done;
docker stop bedrock-selenium-hub-${BUILD_NUMBER}
docker rm bedrock-selenium-hub-${BUILD_NUMBER}
# always report success
exit 0

Просмотреть файл

@ -6,7 +6,7 @@ DOCKER_IMAGE_TAG="${DEIS_APP_NAME}:${GIT_COMMIT}"
# used for pushing to registry
PRIVATE_IMAGE_TAG="${PRIVATE_REGISTRY}/${DOCKER_IMAGE_TAG}"
docker tag "bedrock_dev_final:${GIT_COMMIT}" "$PRIVATE_IMAGE_TAG"
docker tag "mozorg/bedrock_demo:${GIT_COMMIT}" "$PRIVATE_IMAGE_TAG"
docker push "$PRIVATE_IMAGE_TAG"
echo "Creating the demo app $DEIS_APP_NAME"

42
docker/jenkins/docker_build.sh Executable file
Просмотреть файл

@ -0,0 +1,42 @@
#!/bin/bash
set -exo pipefail
if [[ -z "$GIT_COMMIT" ]]; then
export GIT_COMMIT=$(git rev-parse HEAD)
fi
DOCKER_REPO="${DOCKER_REPO:-mozorg}"
DOCKER_NO_CACHE=false
DOCKER_PULL=false
DOCKER_CTX='.'
DOCKERFILE='base'
# parse cli args
while [[ $# -gt 1 ]]; do
key="$1"
case $key in
-c|--context)
DOCKER_CTX="$2"
shift
;;
-n|--no-cache)
DOCKER_NO_CACHE=true
;;
-p|--pull)
DOCKER_PULL=true
;;
esac
shift # past argument or value
done
DOCKERFILE="$1"
FINAL_DOCKERFILE="${DOCKER_CTX}/Dockerfile-$DOCKERFILE"
DOCKER_IMAGE_TAG="${DOCKER_REPO}/bedrock_${DOCKERFILE}:${GIT_COMMIT}"
# generate the dockerfile
rm -f "$FINAL_DOCKERFILE"
cat "docker/dockerfiles/bedrock_$DOCKERFILE" | envsubst '$GIT_COMMIT' > "$FINAL_DOCKERFILE"
# build the docker image
docker build -t "$DOCKER_IMAGE_TAG" --pull="$DOCKER_PULL" --no-cache="$DOCKER_NO_CACHE" -f "$FINAL_DOCKERFILE" "$DOCKER_CTX"

Просмотреть файл

@ -1,31 +0,0 @@
#!/bin/bash
# Needs DOCKER_REPOSITORY and FROM_DOCKER_REPOSITORY
#
# To set them go to Job -> Configure -> Build Environment -> Inject
# passwords and Inject env variables
#
set -xe
if [[ $BUILD_CAUSE == "REMOTECAUSE" ]]
then
LATEST_TAG=$(git describe --abbrev=0 --tags)
# parent (~0) of latest tag is the commit that was tagged
GIT_COMMIT=$(git rev-parse ${LATEST_TAG}~0)
fi
DOCKER_IMAGE_TAG=${DOCKER_REPOSITORY}:${GIT_COMMIT}
if [[ ! -d locale/.git ]];
then
rm -rf locale
git clone --depth 1 https://github.com/mozilla-l10n/bedrock-l10n locale
fi;
pushd locale
git fetch origin
git checkout -f origin/master
popd
cat docker/dockerfiles/bedrock_l10n | envsubst > ./locale/Dockerfile
docker build -f locale/Dockerfile -t $DOCKER_IMAGE_TAG locale

0
docker/jenkins/periodic_db_update.sh Normal file → Executable file
Просмотреть файл

Просмотреть файл

@ -0,0 +1,2 @@
export DRIVER=Remote
export MARK_EXPRESSION=smoke

Просмотреть файл

@ -1,7 +1,13 @@
#!/bin/bash -xe
# $1 should be the properties file for this run
source "$1"
source "docker/jenkins/properties/integration_tests/${1}.properties"
if [[ -z "$GIT_COMMIT" ]]; then
GIT_COMMIT=$(git rev-parse HEAD)
fi
BUILD_NUMBER="${BUILD_NUMBER:-0}"
if [ -z "${BASE_URL}" ]; then
# start bedrock
@ -51,9 +57,10 @@ fi
# make sure results dir exists or docker will create it
# and it will be owned by root
RESULTS_DIR="$PWD/results"
DOCKER_RESULTS_DIR="/app/results"
rm -rf "$RESULTS_DIR"
mkdir -p "$RESULTS_DIR"
docker run -v "${RESULTS_DIR}:/app/results" -u $(stat -c "%u:%g" "$RESULTS_DIR") \
docker run -v "${RESULTS_DIR}:${DOCKER_RESULTS_DIR}" -u $(stat -c "%u:%g" "$RESULTS_DIR") \
${DOCKER_LINKS[@]} \
-e BASE_URL=${BASE_URL} \
-e DRIVER=${DRIVER} \
@ -69,4 +76,7 @@ docker run -v "${RESULTS_DIR}:/app/results" -u $(stat -c "%u:%g" "$RESULTS_DIR")
-e SCREEN_RESOLUTION=${SCREEN_RESOLUTION} \
-e MARK_EXPRESSION="${MARK_EXPRESSION}" \
-e TESTS_PATH="${TESTS_PATH}" \
bedrock_integration_tests:${GIT_COMMIT}
-e RESULTS_PATH="${DOCKER_RESULTS_DIR}" \
-e PYTEST_PROCESSES=5 \
-e PRIVACY="public restricted" \
mozorg/bedrock_test:${GIT_COMMIT} bin/run-integration-tests.sh

Просмотреть файл

@ -2,14 +2,11 @@
#
# Runs unit_tests
#
set -ex
set -exo pipefail
ENV_FILE=`mktemp`
cat << EOF > $ENV_FILE
DEBUG=True
ALLOWED_HOSTS=localhost,127.0.0.1,
SECRET_KEY=39114b6a-2858-4caf-8878-482a24ee9542
ADMINS=["thedude@example.com"]
EOF
if [[ -z "$GIT_COMMIT" ]]; then
GIT_COMMIT=$(git rev-parse HEAD)
fi
docker run --env-file $ENV_FILE ${DOCKER_REPOSITORY}:${GIT_COMMIT:-$(git rev-parse HEAD)} py.test lib bedrock
TEST_IMAGE_TAG="mozorg/bedrock_test:${GIT_COMMIT}"
docker run --env-file docker/test.env "$TEST_IMAGE_TAG"

Просмотреть файл

@ -28,21 +28,6 @@ def ircNotification(config, Map args) {
sh command
}
def buildDockerImage(Map kwargs) {
def update = kwargs.update ? 'true' : 'false'
def repo = kwargs.dockerRepo ?: 'mozorg'
def script = kwargs.script ?: 'build_image.sh'
def environs = ["UPDATE_DOCKER_IMAGES=${update}",
"DOCKERFILE=${kwargs.dockerfile}",
"DOCKER_REPOSITORY=${repo}/${kwargs.dockerfile}"]
if (kwargs.fromDockerfile) {
environs << "FROM_DOCKER_REPOSITORY=${repo}/${kwargs.fromDockerfile}"
}
withEnv(environs) {
sh "docker/jenkins/${script}"
}
}
def pushDockerhub(from_repo, to_repo='') {
to_repo = to_repo ?: from_repo
withCredentials([[$class: 'StringBinding',
@ -68,26 +53,25 @@ def pushPrivateReg(port, apps) {
}
}
def integrationTestJob(propFileName, appURL) {
def testsBaseDir = 'docker/jenkins/properties/integration_tests'
def testsFileExt = '.properties'
def integrationTestJob(propFileName, appURL='') {
return {
node {
unstash 'scripts'
unstash 'tests'
def fullFilename = "${testsBaseDir}/${propFileName}${testsFileExt}"
def testScript = "docker/jenkins/run_integration_tests.sh ${fullFilename}".toString()
def testScript = "docker/jenkins/run_integration_tests.sh ${propFileName}".toString()
withCredentials([[$class: 'UsernamePasswordMultiBinding',
credentialsId: 'SAUCELABS_CREDENTIALS',
usernameVariable: 'SAUCELABS_USERNAME',
passwordVariable: 'SAUCELABS_API_KEY']]) {
withEnv(["BASE_URL=${appURL}",
"SELENIUM_VERSION=2.52.0"]) {
withEnv(["BASE_URL=${appURL}"]) {
try {
sh testScript
}
finally {
junit 'results/*.xml'
if ( propFileName == 'local' ) {
sh 'docker/jenkins/cleanup_after_functional_tests.sh'
}
}
}
}

5
docker/prod.env Normal file
Просмотреть файл

@ -0,0 +1,5 @@
DATABASE_URL=sqlite:///bedrock.db
DEBUG=False
DEV=False
ALLOWED_HOSTS=*
SECRET_KEY=59114b6a-2858-4caf-8878-482a24ee9542

Просмотреть файл

@ -1,4 +1,5 @@
DATABASE_URL=sqlite:///bedrock.db
DEBUG=False
ALLOWED_HOSTS=localhost,127.0.0.1,
SECRET_KEY=59114b6a-2858-4caf-8878-482a24ee9542
DEV=False
ALLOWED_HOSTS=*
SECRET_KEY=39114b6a-2858-4caf-8878-482a24ee9542
ADMINS=["thedude@example.com"]

Просмотреть файл

@ -1,3 +1,6 @@
environment:
SELENIUM_VERSION: 2.52.0
branches:
master:
regions:
@ -18,6 +21,8 @@ branches:
- bedrock-stage
- bedrock-prod
integration_tests:
- headless
- firefox
- chrome
- ie
- ie6