| ... | ... |
@@ -33,8 +33,10 @@ |
| 33 | 33 |
|
| 34 | 34 |
from ubuntu:12.04 |
| 35 | 35 |
|
| 36 |
-run echo 'deb http://archive.ubuntu.com/ubuntu precise main universe' > /etc/apt/sources.list |
|
| 37 |
-run apt-get update; apt-get install -y python2.7 python-dev python-pip ssh rsync less vim |
|
| 36 |
+run echo 'deb http://archive.ubuntu.com/ubuntu precise main universe' \ |
|
| 37 |
+ > /etc/apt/sources.list |
|
| 38 |
+run apt-get update; apt-get install -y git python2.7 python-dev libevent-dev \ |
|
| 39 |
+ python-pip ssh rsync less vim |
|
| 38 | 40 |
run pip install boto fabric |
| 39 | 41 |
|
| 40 | 42 |
# Add deployment code and set default container command |
| ... | ... |
@@ -43,7 +43,7 @@ c['slavePortnum'] = PORT_MASTER |
| 43 | 43 |
|
| 44 | 44 |
# Schedulers |
| 45 | 45 |
c['schedulers'] = [ForceScheduler(name='trigger', builderNames=['docker', |
| 46 |
- 'index','registry','coverage','nightlyrelease'])] |
|
| 46 |
+ 'index','registry','docker-coverage','registry-coverage','nightlyrelease'])] |
|
| 47 | 47 |
c['schedulers'] += [SingleBranchScheduler(name="all", treeStableTimer=None, |
| 48 | 48 |
change_filter=filter.ChangeFilter(branch='master', |
| 49 | 49 |
repository='https://github.com/dotcloud/docker'), builderNames=['docker'])] |
| ... | ... |
@@ -51,7 +51,7 @@ c['schedulers'] += [SingleBranchScheduler(name='pullrequest', |
| 51 | 51 |
change_filter=filter.ChangeFilter(category='github_pullrequest'), treeStableTimer=None, |
| 52 | 52 |
builderNames=['pullrequest'])] |
| 53 | 53 |
c['schedulers'] += [Nightly(name='daily', branch=None, builderNames=['nightlyrelease', |
| 54 |
- 'coverage'], hour=7, minute=00)] |
|
| 54 |
+ 'docker-coverage','registry-coverage'], hour=7, minute=00)] |
|
| 55 | 55 |
c['schedulers'] += [Nightly(name='every4hrs', branch=None, builderNames=['registry','index'], |
| 56 | 56 |
hour=range(0,24,4), minute=15)] |
| 57 | 57 |
|
| ... | ... |
@@ -76,17 +76,25 @@ c['builders'] += [BuilderConfig(name='pullrequest',slavenames=['buildworker'], |
| 76 | 76 |
|
| 77 | 77 |
# Docker coverage test |
| 78 | 78 |
factory = BuildFactory() |
| 79 |
-factory.addStep(ShellCommand(description='Coverage', logEnviron=False, |
|
| 79 |
+factory.addStep(ShellCommand(description='docker-coverage', logEnviron=False, |
|
| 80 | 80 |
usePTY=True, command='{0}/docker-coverage/coverage-docker.sh'.format(
|
| 81 | 81 |
DOCKER_CI_PATH))) |
| 82 |
-c['builders'] += [BuilderConfig(name='coverage',slavenames=['buildworker'], |
|
| 82 |
+c['builders'] += [BuilderConfig(name='docker-coverage',slavenames=['buildworker'], |
|
| 83 |
+ factory=factory)] |
|
| 84 |
+ |
|
| 85 |
+# Docker registry coverage test |
|
| 86 |
+factory = BuildFactory() |
|
| 87 |
+factory.addStep(ShellCommand(description='registry-coverage', logEnviron=False, |
|
| 88 |
+ usePTY=True, command='docker run registry_coverage'.format( |
|
| 89 |
+ DOCKER_CI_PATH))) |
|
| 90 |
+c['builders'] += [BuilderConfig(name='registry-coverage',slavenames=['buildworker'], |
|
| 83 | 91 |
factory=factory)] |
| 84 | 92 |
|
| 85 | 93 |
# Registry functional test |
| 86 | 94 |
factory = BuildFactory() |
| 87 | 95 |
factory.addStep(ShellCommand(description='registry', logEnviron=False, |
| 88 | 96 |
command='. {0}/master/credentials.cfg; '
|
| 89 |
- '/docker-ci/functionaltests/test_registry.sh'.format(BUILDBOT_PATH), |
|
| 97 |
+ '{1}/functionaltests/test_registry.sh'.format(BUILDBOT_PATH, DOCKER_CI_PATH),
|
|
| 90 | 98 |
usePTY=True)) |
| 91 | 99 |
c['builders'] += [BuilderConfig(name='registry',slavenames=['buildworker'], |
| 92 | 100 |
factory=factory)] |
| ... | ... |
@@ -95,16 +103,17 @@ c['builders'] += [BuilderConfig(name='registry',slavenames=['buildworker'], |
| 95 | 95 |
factory = BuildFactory() |
| 96 | 96 |
factory.addStep(ShellCommand(description='index', logEnviron=False, |
| 97 | 97 |
command='. {0}/master/credentials.cfg; '
|
| 98 |
- '/docker-ci/functionaltests/test_index.py'.format(BUILDBOT_PATH), |
|
| 98 |
+ '{1}/functionaltests/test_index.py'.format(BUILDBOT_PATH, DOCKER_CI_PATH),
|
|
| 99 | 99 |
usePTY=True)) |
| 100 | 100 |
c['builders'] += [BuilderConfig(name='index',slavenames=['buildworker'], |
| 101 | 101 |
factory=factory)] |
| 102 | 102 |
|
| 103 | 103 |
# Docker nightly release |
| 104 |
+nightlyrelease_cmd = ('docker version; docker run -i -t -privileged -e AWS_S3_BUCKET='
|
|
| 105 |
+ 'test.docker.io dockerbuilder hack/dind dockerbuild.sh') |
|
| 104 | 106 |
factory = BuildFactory() |
| 105 |
-factory.addStep(ShellCommand(description='NightlyRelease', logEnviron=False, |
|
| 106 |
- usePTY=True, command='docker run -privileged' |
|
| 107 |
- ' -e AWS_S3_BUCKET=test.docker.io dockerbuilder')) |
|
| 107 |
+factory.addStep(ShellCommand(description='NightlyRelease',logEnviron=False, |
|
| 108 |
+ usePTY=True, command=nightlyrelease_cmd)) |
|
| 108 | 109 |
c['builders'] += [BuilderConfig(name='nightlyrelease',slavenames=['buildworker'], |
| 109 | 110 |
factory=factory)] |
| 110 | 111 |
|
| ... | ... |
@@ -100,8 +100,7 @@ sudo("echo '{}' >> /root/.ssh/authorized_keys".format(env['DOCKER_CI_PUB']))
|
| 100 | 100 |
credentials = {
|
| 101 | 101 |
'AWS_ACCESS_KEY': env['PKG_ACCESS_KEY'], |
| 102 | 102 |
'AWS_SECRET_KEY': env['PKG_SECRET_KEY'], |
| 103 |
- 'GPG_PASSPHRASE': env['PKG_GPG_PASSPHRASE'], |
|
| 104 |
- 'INDEX_AUTH': env['INDEX_AUTH']} |
|
| 103 |
+ 'GPG_PASSPHRASE': env['PKG_GPG_PASSPHRASE']} |
|
| 105 | 104 |
open(DOCKER_CI_PATH + '/nightlyrelease/release_credentials.json', 'w').write( |
| 106 | 105 |
base64.b64encode(json.dumps(credentials))) |
| 107 | 106 |
|
| ... | ... |
@@ -143,8 +142,11 @@ sudo('ln -s /sbin/reboot /etc/cron.daily')
|
| 143 | 143 |
|
| 144 | 144 |
# Build docker-ci containers |
| 145 | 145 |
sudo('cd {}; docker build -t docker .'.format(DOCKER_PATH))
|
| 146 |
+sudo('cd {}; docker build -t docker-ci .'.format(DOCKER_CI_PATH))
|
|
| 146 | 147 |
sudo('cd {}/nightlyrelease; docker build -t dockerbuilder .'.format(
|
| 147 | 148 |
DOCKER_CI_PATH)) |
| 149 |
+sudo('cd {}/registry-coverage; docker build -t registry_coverage .'.format(
|
|
| 150 |
+ DOCKER_CI_PATH)) |
|
| 148 | 151 |
|
| 149 | 152 |
# Download docker-ci testing container |
| 150 | 153 |
sudo('docker pull mzdaniel/test_docker')
|
| ... | ... |
@@ -9,30 +9,21 @@ BRANCH=${3-master}
|
| 9 | 9 |
DOCKER_PATH=/go/src/github.com/dotcloud/docker |
| 10 | 10 |
|
| 11 | 11 |
# Fetch latest master |
| 12 |
+cd / |
|
| 12 | 13 |
rm -rf /go |
| 13 |
-mkdir -p $DOCKER_PATH |
|
| 14 |
+git clone -q -b master http://github.com/dotcloud/docker $DOCKER_PATH |
|
| 14 | 15 |
cd $DOCKER_PATH |
| 15 |
-git init . |
|
| 16 |
-git fetch -q http://github.com/dotcloud/docker master |
|
| 17 |
-git reset --hard FETCH_HEAD |
|
| 18 | 16 |
|
| 19 | 17 |
# Merge commit |
| 20 |
-#echo FIXME. Temporarily skip TestPrivilegedCanMount until DinD works reliable on AWS |
|
| 21 |
-git pull -q https://github.com/mzdaniel/docker.git dind-aws || exit 1 |
|
| 22 |
- |
|
| 23 |
-# Merge commit in top of master |
|
| 24 | 18 |
git fetch -q "$REPO" "$BRANCH" |
| 25 | 19 |
git merge --no-edit $COMMIT || exit 1 |
| 26 | 20 |
|
| 27 | 21 |
# Test commit |
| 28 |
-go test -v; exit_status=$? |
|
| 22 |
+./hack/make.sh test; exit_status=$? |
|
| 29 | 23 |
|
| 30 | 24 |
# Display load if test fails |
| 31 | 25 |
if [ $exit_status -eq 1 ] ; then |
| 32 | 26 |
uptime; echo; free |
| 33 | 27 |
fi |
| 34 | 28 |
|
| 35 |
-# Cleanup testing directory |
|
| 36 |
-rm -rf $BASE_PATH |
|
| 37 |
- |
|
| 38 | 29 |
exit $exit_status |
| ... | ... |
@@ -12,6 +12,7 @@ export DOCKER_REGISTRY_CONFIG=config_test.yml |
| 12 | 12 |
# Get latest docker registry |
| 13 | 13 |
git clone -q https://github.com/dotcloud/docker-registry.git |
| 14 | 14 |
cd docker-registry |
| 15 |
+sed -Ei "s#(boto_bucket: ).+#\1_env:S3_BUCKET#" config_test.yml |
|
| 15 | 16 |
|
| 16 | 17 |
# Get dependencies |
| 17 | 18 |
pip install -q -r requirements.txt |
| ... | ... |
@@ -1,5 +1,5 @@ |
| 1 |
-# VERSION: 1.2 |
|
| 2 |
-# DOCKER-VERSION 0.6.3 |
|
| 1 |
+# VERSION: 1.5 |
|
| 2 |
+# DOCKER-VERSION 0.6.4 |
|
| 3 | 3 |
# AUTHOR: Daniel Mizyrycki <daniel@dotcloud.com> |
| 4 | 4 |
# DESCRIPTION: Build docker nightly release using Docker in Docker. |
| 5 | 5 |
# REFERENCES: This code reuses the excellent implementation of docker in docker |
| ... | ... |
@@ -7,11 +7,10 @@ |
| 7 | 7 |
# COMMENTS: |
| 8 | 8 |
# release_credentials.json is a base64 json encoded file containing: |
| 9 | 9 |
# { "AWS_ACCESS_KEY": "Test_docker_AWS_S3_bucket_id",
|
| 10 |
-# "AWS_SECRET_KEY='Test_docker_AWS_S3_bucket_key' |
|
| 11 |
-# "GPG_PASSPHRASE='Test_docker_GPG_passphrase_signature' |
|
| 12 |
-# "INDEX_AUTH='Encripted_index_authentication' } |
|
| 10 |
+# "AWS_SECRET_KEY": "Test_docker_AWS_S3_bucket_key", |
|
| 11 |
+# "GPG_PASSPHRASE": "Test_docker_GPG_passphrase_signature" } |
|
| 13 | 12 |
# TO_BUILD: docker build -t dockerbuilder . |
| 14 |
-# TO_RELEASE: docker run -i -t -privileged -e AWS_S3_BUCKET="test.docker.io" dockerbuilder |
|
| 13 |
+# TO_RELEASE: docker run -i -t -privileged -e AWS_S3_BUCKET="test.docker.io" dockerbuilder hack/dind dockerbuild.sh |
|
| 15 | 14 |
|
| 16 | 15 |
from docker |
| 17 | 16 |
maintainer Daniel Mizyrycki <daniel@dotcloud.com> |
| ... | ... |
@@ -24,11 +23,8 @@ run apt-get update; apt-get install -y -q wget python2.7 |
| 24 | 24 |
run wget -q -O /usr/bin/docker http://get.docker.io/builds/Linux/x86_64/docker-latest; chmod +x /usr/bin/docker |
| 25 | 25 |
|
| 26 | 26 |
# Add proto docker builder |
| 27 |
-add ./dockerbuild /usr/bin/dockerbuild |
|
| 28 |
-run chmod +x /usr/bin/dockerbuild |
|
| 27 |
+add ./dockerbuild.sh /usr/bin/dockerbuild.sh |
|
| 28 |
+run chmod +x /usr/bin/dockerbuild.sh |
|
| 29 | 29 |
|
| 30 | 30 |
# Add release credentials |
| 31 | 31 |
add ./release_credentials.json /root/release_credentials.json |
| 32 |
- |
|
| 33 |
-# Launch build process in a container |
|
| 34 |
-cmd dockerbuild |
| 35 | 32 |
deleted file mode 100644 |
| ... | ... |
@@ -1,50 +0,0 @@ |
| 1 |
-#!/bin/bash |
|
| 2 |
- |
|
| 3 |
-# Variables AWS_ACCESS_KEY, AWS_SECRET_KEY, PG_PASSPHRASE and INDEX_AUTH |
|
| 4 |
-# are decoded from /root/release_credentials.json |
|
| 5 |
-# Variable AWS_S3_BUCKET is passed to the environment from docker run -e |
|
| 6 |
- |
|
| 7 |
-# Enable debugging |
|
| 8 |
-set -x |
|
| 9 |
- |
|
| 10 |
-# Fetch docker master branch |
|
| 11 |
-rm -rf /go/src/github.com/dotcloud/docker |
|
| 12 |
-cd / |
|
| 13 |
-git clone -q http://github.com/dotcloud/docker /go/src/github.com/dotcloud/docker |
|
| 14 |
-cd /go/src/github.com/dotcloud/docker |
|
| 15 |
- |
|
| 16 |
-# Launch docker daemon using dind inside the container |
|
| 17 |
-./hack/dind /usr/bin/docker -d & |
|
| 18 |
-sleep 5 |
|
| 19 |
- |
|
| 20 |
-# Add an uncommitted change to generate a timestamped release |
|
| 21 |
-date > timestamp |
|
| 22 |
- |
|
| 23 |
-# Build the docker package using /Dockerfile |
|
| 24 |
-docker build -t docker . |
|
| 25 |
- |
|
| 26 |
-# Run Docker unittests binary and Ubuntu package |
|
| 27 |
-docker run -privileged docker hack/make.sh |
|
| 28 |
-exit_status=$? |
|
| 29 |
- |
|
| 30 |
-# Display load if test fails |
|
| 31 |
-if [ $exit_status -eq 1 ] ; then |
|
| 32 |
- uptime; echo; free |
|
| 33 |
- exit 1 |
|
| 34 |
-fi |
|
| 35 |
- |
|
| 36 |
-# Commit binary and ubuntu bundles for release |
|
| 37 |
-docker commit -run '{"Env": ["PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin"], "WorkingDir": "/go/src/github.com/dotcloud/docker"}' $(docker ps -l -q) release
|
|
| 38 |
- |
|
| 39 |
-# Turn debug off to load credentials from the environment |
|
| 40 |
-set +x |
|
| 41 |
-eval $(cat /root/release_credentials.json | python -c ' |
|
| 42 |
-import sys,json,base64; |
|
| 43 |
-d=json.loads(base64.b64decode(sys.stdin.read())); |
|
| 44 |
-exec("""for k in d: print "export {0}=\\"{1}\\"".format(k,d[k])""")')
|
|
| 45 |
-set -x |
|
| 46 |
- |
|
| 47 |
-# Push docker nightly |
|
| 48 |
-echo docker run -i -t -privileged -e AWS_S3_BUCKET=$AWS_S3_BUCKET -e AWS_ACCESS_KEY=XXXXX -e AWS_SECRET_KEY=XXXXX -e GPG_PASSPHRASE=XXXXX release hack/release.sh |
|
| 49 |
-set +x |
|
| 50 |
-docker run -i -t -privileged -e AWS_S3_BUCKET=$AWS_S3_BUCKET -e AWS_ACCESS_KEY=$AWS_ACCESS_KEY -e AWS_SECRET_KEY=$AWS_SECRET_KEY -e GPG_PASSPHRASE=$GPG_PASSPHRASE release hack/release.sh |
| 51 | 1 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,40 @@ |
| 0 |
+#!/bin/bash |
|
| 1 |
+ |
|
| 2 |
+# Variables AWS_ACCESS_KEY, AWS_SECRET_KEY and PG_PASSPHRASE are decoded |
|
| 3 |
+# from /root/release_credentials.json |
|
| 4 |
+# Variable AWS_S3_BUCKET is passed to the environment from docker run -e |
|
| 5 |
+ |
|
| 6 |
+# Turn debug off to load credentials from the environment |
|
| 7 |
+set +x |
|
| 8 |
+eval $(cat /root/release_credentials.json | python -c ' |
|
| 9 |
+import sys,json,base64; |
|
| 10 |
+d=json.loads(base64.b64decode(sys.stdin.read())); |
|
| 11 |
+exec("""for k in d: print "export {0}=\\"{1}\\"".format(k,d[k])""")')
|
|
| 12 |
+ |
|
| 13 |
+# Fetch docker master branch |
|
| 14 |
+set -x |
|
| 15 |
+cd / |
|
| 16 |
+rm -rf /go |
|
| 17 |
+git clone -q -b master http://github.com/dotcloud/docker /go/src/github.com/dotcloud/docker |
|
| 18 |
+cd /go/src/github.com/dotcloud/docker |
|
| 19 |
+ |
|
| 20 |
+# Launch docker daemon using dind inside the container |
|
| 21 |
+/usr/bin/docker version |
|
| 22 |
+/usr/bin/docker -d & |
|
| 23 |
+sleep 5 |
|
| 24 |
+ |
|
| 25 |
+# Build Docker release container |
|
| 26 |
+docker build -t docker . |
|
| 27 |
+ |
|
| 28 |
+# Test docker and if everything works well, release |
|
| 29 |
+echo docker run -i -t -privileged -e AWS_S3_BUCKET=$AWS_S3_BUCKET -e AWS_ACCESS_KEY=XXXXX -e AWS_SECRET_KEY=XXXXX -e GPG_PASSPHRASE=XXXXX docker hack/release.sh |
|
| 30 |
+set +x |
|
| 31 |
+docker run -privileged -i -t -e AWS_S3_BUCKET=$AWS_S3_BUCKET -e AWS_ACCESS_KEY=$AWS_ACCESS_KEY -e AWS_SECRET_KEY=$AWS_SECRET_KEY -e GPG_PASSPHRASE=$GPG_PASSPHRASE docker hack/release.sh |
|
| 32 |
+exit_status=$? |
|
| 33 |
+ |
|
| 34 |
+# Display load if test fails |
|
| 35 |
+set -x |
|
| 36 |
+if [ $exit_status -eq 1 ] ; then |
|
| 37 |
+ uptime; echo; free |
|
| 38 |
+ exit 1 |
|
| 39 |
+fi |
| 2 | 1 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,18 @@ |
| 0 |
+# VERSION: 0.1 |
|
| 1 |
+# DOCKER-VERSION 0.6.4 |
|
| 2 |
+# AUTHOR: Daniel Mizyrycki <daniel@dotcloud.com> |
|
| 3 |
+# DESCRIPTION: Docker registry coverage |
|
| 4 |
+# COMMENTS: Add registry coverage into the docker-ci image |
|
| 5 |
+# TO_BUILD: docker build -t registry_coverage . |
|
| 6 |
+# TO_RUN: docker run registry_coverage |
|
| 7 |
+ |
|
| 8 |
+from docker-ci |
|
| 9 |
+maintainer Daniel Mizyrycki <daniel@dotcloud.com> |
|
| 10 |
+ |
|
| 11 |
+# Add registry_coverager.sh and dependencies |
|
| 12 |
+run pip install coverage flask pyyaml requests simplejson python-glanceclient \ |
|
| 13 |
+ blinker redis gevent |
|
| 14 |
+add registry_coverage.sh /usr/bin/registry_coverage.sh |
|
| 15 |
+run chmod +x /usr/bin/registry_coverage.sh |
|
| 16 |
+ |
|
| 17 |
+cmd "/usr/bin/registry_coverage.sh" |
| 0 | 18 |
new file mode 100755 |
| ... | ... |
@@ -0,0 +1,18 @@ |
| 0 |
+#!/bin/bash |
|
| 1 |
+ |
|
| 2 |
+set -x |
|
| 3 |
+ |
|
| 4 |
+# Compute test paths |
|
| 5 |
+REGISTRY_PATH=/data/docker-registry |
|
| 6 |
+ |
|
| 7 |
+# Fetch latest docker-registry master |
|
| 8 |
+rm -rf $REGISTRY_PATH |
|
| 9 |
+git clone https://github.com/dotcloud/docker-registry -b master $REGISTRY_PATH |
|
| 10 |
+cd $REGISTRY_PATH |
|
| 11 |
+ |
|
| 12 |
+# Generate coverage |
|
| 13 |
+export SETTINGS_FLAVOR=test |
|
| 14 |
+export DOCKER_REGISTRY_CONFIG=config_test.yml |
|
| 15 |
+ |
|
| 16 |
+coverage run -m unittest discover test || exit 1 |
|
| 17 |
+coverage report --include='./*' --omit='./test/*' |