| ... | ... |
@@ -17,15 +17,12 @@ PORT_GITHUB = 8011 # Buildbot github hook port |
| 17 | 17 |
PORT_MASTER = 9989 # Port where buildbot master listen buildworkers |
| 18 | 18 |
TEST_USER = 'buildbot' # Credential to authenticate build triggers |
| 19 | 19 |
TEST_PWD = 'docker' # Credential to authenticate build triggers |
| 20 |
-BUILDER_NAME = 'docker' |
|
| 21 | 20 |
GITHUB_DOCKER = 'github.com/dotcloud/docker' |
| 22 | 21 |
BUILDBOT_PATH = '/data/buildbot' |
| 23 | 22 |
DOCKER_PATH = '/go/src/github.com/dotcloud/docker' |
| 24 | 23 |
DOCKER_CI_PATH = '/docker-ci' |
| 25 |
-BUILDER_PATH = '/data/buildbot/slave/{0}/build'.format(BUILDER_NAME)
|
|
| 26 |
-PULL_REQUEST_PATH = '/data/buildbot/slave/pullrequest/build' |
|
| 27 | 24 |
|
| 28 |
-# Credentials set by setup.sh and Vagrantfile |
|
| 25 |
+# Credentials set by setup.sh from deployment.py |
|
| 29 | 26 |
BUILDBOT_PWD = '' |
| 30 | 27 |
IRC_PWD = '' |
| 31 | 28 |
IRC_CHANNEL = '' |
| ... | ... |
@@ -45,34 +42,35 @@ c['slavePortnum'] = PORT_MASTER |
| 45 | 45 |
|
| 46 | 46 |
|
| 47 | 47 |
# Schedulers |
| 48 |
-c['schedulers'] = [ForceScheduler(name='trigger', builderNames=[BUILDER_NAME, |
|
| 48 |
+c['schedulers'] = [ForceScheduler(name='trigger', builderNames=['docker', |
|
| 49 | 49 |
'index','registry','coverage','nightlyrelease'])] |
| 50 |
-c['schedulers'] += [SingleBranchScheduler(name="all", |
|
| 51 |
- change_filter=filter.ChangeFilter(branch='master'), treeStableTimer=None, |
|
| 52 |
- builderNames=[BUILDER_NAME])] |
|
| 50 |
+c['schedulers'] += [SingleBranchScheduler(name="all", treeStableTimer=None, |
|
| 51 |
+ change_filter=filter.ChangeFilter(branch='master', |
|
| 52 |
+ repository='https://github.com/dotcloud/docker'), builderNames=['docker'])] |
|
| 53 | 53 |
c['schedulers'] += [SingleBranchScheduler(name='pullrequest', |
| 54 | 54 |
change_filter=filter.ChangeFilter(category='github_pullrequest'), treeStableTimer=None, |
| 55 | 55 |
builderNames=['pullrequest'])] |
| 56 |
-c['schedulers'] += [Nightly(name='daily', branch=None, builderNames=['nightlyrelease'], |
|
| 57 |
- hour=7, minute=00)] |
|
| 56 |
+c['schedulers'] += [Nightly(name='daily', branch=None, builderNames=['nightlyrelease', |
|
| 57 |
+ 'coverage'], hour=7, minute=00)] |
|
| 58 | 58 |
c['schedulers'] += [Nightly(name='every4hrs', branch=None, builderNames=['registry','index'], |
| 59 | 59 |
hour=range(0,24,4), minute=15)] |
| 60 | 60 |
|
| 61 | 61 |
# Builders |
| 62 | 62 |
# Docker commit test |
| 63 |
+test_cmd = ('docker run -privileged mzdaniel/test_docker hack/dind'
|
|
| 64 |
+ ' test_docker.sh %(src::revision)s') |
|
| 63 | 65 |
factory = BuildFactory() |
| 64 | 66 |
factory.addStep(ShellCommand(description='Docker', logEnviron=False, |
| 65 |
- usePTY=True, command=['sh', '-c', Interpolate( |
|
| 66 |
- '{0}/docker-test/test_docker.sh %(src::revision)s'.format(DOCKER_CI_PATH))]))
|
|
| 67 |
+ usePTY=True, command=["sh", "-c", Interpolate(test_cmd)])) |
|
| 67 | 68 |
c['builders'] = [BuilderConfig(name='docker',slavenames=['buildworker'], |
| 68 | 69 |
factory=factory)] |
| 69 | 70 |
|
| 70 | 71 |
# Docker pull request test |
| 72 |
+test_cmd = ('docker run -privileged mzdaniel/test_docker hack/dind'
|
|
| 73 |
+ ' test_docker.sh %(src::revision)s %(src::repository)s %(src::branch)s') |
|
| 71 | 74 |
factory = BuildFactory() |
| 72 | 75 |
factory.addStep(ShellCommand(description='pull_request', logEnviron=False, |
| 73 |
- usePTY=True, command=['sh', '-c', Interpolate( |
|
| 74 |
- '{0}/docker-test/test_docker.sh %(src::revision)s %(src::repository)s'
|
|
| 75 |
- ' %(src::branch)s'.format(DOCKER_CI_PATH))])) |
|
| 76 |
+ usePTY=True, command=["sh", "-c", Interpolate(test_cmd)])) |
|
| 76 | 77 |
c['builders'] += [BuilderConfig(name='pullrequest',slavenames=['buildworker'], |
| 77 | 78 |
factory=factory)] |
| 78 | 79 |
|
| ... | ... |
@@ -97,17 +95,16 @@ c['builders'] += [BuilderConfig(name='registry',slavenames=['buildworker'], |
| 97 | 97 |
factory = BuildFactory() |
| 98 | 98 |
factory.addStep(ShellCommand(description='index', logEnviron=False, |
| 99 | 99 |
command='. {0}/master/credentials.cfg; '
|
| 100 |
- '{1}/testing/functionaltests/test_index.py'.format(BUILDBOT_PATH,
|
|
| 101 |
- DOCKER_PATH), usePTY=True)) |
|
| 100 |
+ '/docker-ci/functionaltests/test_index.py'.format(BUILDBOT_PATH), |
|
| 101 |
+ usePTY=True)) |
|
| 102 | 102 |
c['builders'] += [BuilderConfig(name='index',slavenames=['buildworker'], |
| 103 | 103 |
factory=factory)] |
| 104 | 104 |
|
| 105 | 105 |
# Docker nightly release |
| 106 |
-nightlyrelease_cmd = ('docker run -i -t -privileged -lxc-conf=lxc.aa_profile=unconfined'
|
|
| 107 |
- ' -e AWS_S3_BUCKET=test.docker.io dockerbuilder') |
|
| 108 | 106 |
factory = BuildFactory() |
| 109 |
-factory.addStep(ShellCommand(description='NightlyRelease',logEnviron=False,usePTY=True, |
|
| 110 |
- command=nightlyrelease_cmd)) |
|
| 107 |
+factory.addStep(ShellCommand(description='NightlyRelease', logEnviron=False, |
|
| 108 |
+ usePTY=True, command='docker run -privileged' |
|
| 109 |
+ ' -e AWS_S3_BUCKET=test.docker.io dockerbuilder')) |
|
| 111 | 110 |
c['builders'] += [BuilderConfig(name='nightlyrelease',slavenames=['buildworker'], |
| 112 | 111 |
factory=factory)] |
| 113 | 112 |
|
| ... | ... |
@@ -140,11 +140,17 @@ sudo('stop docker')
|
| 140 | 140 |
sudo('wget -q -O /usr/bin/docker http://test.docker.io/test/docker')
|
| 141 | 141 |
sudo('start docker')
|
| 142 | 142 |
|
| 143 |
+# Preventively reboot docker-ci daily |
|
| 144 |
+sudo('ln -s /sbin/reboot /etc/cron.daily')
|
|
| 145 |
+ |
|
| 143 | 146 |
# Build docker-ci containers |
| 144 | 147 |
sudo('cd {}; docker build -t docker .'.format(DOCKER_PATH))
|
| 145 | 148 |
sudo('cd {}/nightlyrelease; docker build -t dockerbuilder .'.format(
|
| 146 | 149 |
DOCKER_CI_PATH)) |
| 147 | 150 |
|
| 151 |
+# Download docker-ci testing container |
|
| 152 |
+sudo('docker pull mzdaniel/test_docker')
|
|
| 153 |
+ |
|
| 148 | 154 |
# Setup buildbot |
| 149 | 155 |
sudo('mkdir /data')
|
| 150 | 156 |
sudo('{0}/setup.sh root {0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10}'
|
| 151 | 157 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,30 @@ |
| 0 |
+# VERSION: 0.3 |
|
| 1 |
+# DOCKER-VERSION 0.6.3 |
|
| 2 |
+# AUTHOR: Daniel Mizyrycki <daniel@dotcloud.com> |
|
| 3 |
+# DESCRIPTION: Testing docker PRs and commits on top of master using |
|
| 4 |
+# REFERENCES: This code reuses the excellent implementation of |
|
| 5 |
+# Docker in Docker made by Jerome Petazzoni. |
|
| 6 |
+# https://github.com/jpetazzo/dind |
|
| 7 |
+# COMMENTS: |
|
| 8 |
+# This Dockerfile adapts /Dockerfile to enable docker PRs and commits testing |
|
| 9 |
+# Optional arguments: |
|
| 10 |
+# [commit] (default: 'HEAD') |
|
| 11 |
+# [repo] (default: 'http://github.com/dotcloud/docker') |
|
| 12 |
+# [branch] (default: 'master') |
|
| 13 |
+# TO_BUILD: docker build -t test_docker . |
|
| 14 |
+# TO_RUN: docker run -privileged test_docker hack/dind test_docker.sh [commit] [repo] [branch] |
|
| 15 |
+ |
|
| 16 |
+from docker |
|
| 17 |
+maintainer Daniel Mizyrycki <daniel@dotcloud.com> |
|
| 18 |
+ |
|
| 19 |
+# Setup go environment. Extracted from /Dockerfile |
|
| 20 |
+env CGO_ENABLED 0 |
|
| 21 |
+env GOROOT /goroot |
|
| 22 |
+env PATH $PATH:/goroot/bin |
|
| 23 |
+env GOPATH /go:/go/src/github.com/dotcloud/docker/vendor |
|
| 24 |
+volume /var/lib/docker |
|
| 25 |
+workdir /go/src/github.com/dotcloud/docker |
|
| 26 |
+ |
|
| 27 |
+# Add test_docker.sh |
|
| 28 |
+add test_docker.sh /usr/bin/test_docker.sh |
|
| 29 |
+run chmod +x /usr/bin/test_docker.sh |
| ... | ... |
@@ -5,17 +5,11 @@ COMMIT=${1-HEAD}
|
| 5 | 5 |
REPO=${2-http://github.com/dotcloud/docker}
|
| 6 | 6 |
BRANCH=${3-master}
|
| 7 | 7 |
|
| 8 |
-# Generate a random string of $1 characters |
|
| 9 |
-function random {
|
|
| 10 |
- cat /dev/urandom | tr -cd 'a-f0-9' | head -c $1 |
|
| 11 |
-} |
|
| 12 |
- |
|
| 13 | 8 |
# Compute test paths |
| 14 |
-BASE_PATH=`pwd`/test_docker_$(random 12) |
|
| 15 |
-DOCKER_PATH=$BASE_PATH/go/src/github.com/dotcloud/docker |
|
| 16 |
-export GOPATH=$BASE_PATH/go:$DOCKER_PATH/vendor |
|
| 9 |
+DOCKER_PATH=/go/src/github.com/dotcloud/docker |
|
| 17 | 10 |
|
| 18 | 11 |
# Fetch latest master |
| 12 |
+rm -rf /go |
|
| 19 | 13 |
mkdir -p $DOCKER_PATH |
| 20 | 14 |
cd $DOCKER_PATH |
| 21 | 15 |
git init . |
| ... | ... |
@@ -23,12 +17,21 @@ git fetch -q http://github.com/dotcloud/docker master |
| 23 | 23 |
git reset --hard FETCH_HEAD |
| 24 | 24 |
|
| 25 | 25 |
# Merge commit |
| 26 |
+#echo FIXME. Temporarily skip TestPrivilegedCanMount until DinD works reliable on AWS |
|
| 27 |
+git pull -q https://github.com/mzdaniel/docker.git dind-aws || exit 1 |
|
| 28 |
+ |
|
| 29 |
+# Merge commit in top of master |
|
| 26 | 30 |
git fetch -q "$REPO" "$BRANCH" |
| 27 | 31 |
git merge --no-edit $COMMIT || exit 1 |
| 28 | 32 |
|
| 29 | 33 |
# Test commit |
| 30 | 34 |
go test -v; exit_status=$? |
| 31 | 35 |
|
| 36 |
+# Display load if test fails |
|
| 37 |
+if [ $exit_status -eq 1 ] ; then |
|
| 38 |
+ uptime; echo; free |
|
| 39 |
+fi |
|
| 40 |
+ |
|
| 32 | 41 |
# Cleanup testing directory |
| 33 | 42 |
rm -rf $BASE_PATH |
| 34 | 43 |
|
| ... | ... |
@@ -13,9 +13,8 @@ cd / |
| 13 | 13 |
git clone -q http://github.com/dotcloud/docker /go/src/github.com/dotcloud/docker |
| 14 | 14 |
cd /go/src/github.com/dotcloud/docker |
| 15 | 15 |
|
| 16 |
-echo FIXME. Temporarily add Jerome changeset with proper apparmor handling |
|
| 17 |
-git fetch http://github.com/jpetazzo/docker escape-apparmor-confinement:escape-apparmor-confinement |
|
| 18 |
-git rebase --onto master master escape-apparmor-confinement |
|
| 16 |
+echo FIXME. Temporarily skip TestPrivilegedCanMount until DinD works reliable on AWS |
|
| 17 |
+git pull -q https://github.com/mzdaniel/docker.git dind-aws || exit 1 |
|
| 19 | 18 |
|
| 20 | 19 |
# Launch docker daemon using dind inside the container |
| 21 | 20 |
./hack/dind /usr/bin/docker -d & |
| ... | ... |
@@ -28,7 +27,17 @@ date > timestamp |
| 28 | 28 |
docker build -t docker . |
| 29 | 29 |
|
| 30 | 30 |
# Run Docker unittests binary and Ubuntu package |
| 31 |
-docker run -privileged -lxc-conf=lxc.aa_profile=unconfined docker hack/make.sh || exit 1 |
|
| 31 |
+docker run -privileged -lxc-conf=lxc.aa_profile=unconfined docker hack/make.sh |
|
| 32 |
+exit_status=$? |
|
| 33 |
+ |
|
| 34 |
+# Display load if test fails |
|
| 35 |
+if [ $exit_status -eq 1 ] ; then |
|
| 36 |
+ uptime; echo; free |
|
| 37 |
+ exit 1 |
|
| 38 |
+fi |
|
| 39 |
+ |
|
| 40 |
+# Commit binary and ubuntu bundles for release |
|
| 41 |
+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
|
|
| 32 | 42 |
|
| 33 | 43 |
# Turn debug off to load credentials from the environment |
| 34 | 44 |
set +x |
| ... | ... |
@@ -36,7 +45,6 @@ eval $(cat /root/release_credentials.json | python -c ' |
| 36 | 36 |
import sys,json,base64; |
| 37 | 37 |
d=json.loads(base64.b64decode(sys.stdin.read())); |
| 38 | 38 |
exec("""for k in d: print "export {0}=\\"{1}\\"".format(k,d[k])""")')
|
| 39 |
-echo '{"https://index.docker.io/v1/":{"auth":"'$INDEX_AUTH'","email":"engineering@dotcloud.com"}}' > /.dockercfg
|
|
| 40 | 39 |
set -x |
| 41 | 40 |
|
| 42 | 41 |
# Push docker nightly |