Browse code

docker-ci 0.35. Push docker coverage and testing into docker-ci production. Update docker nightlyrelease

Daniel Mizyrycki authored on 2013/10/28 04:13:03
Showing 11 changed files
... ...
@@ -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
0 40
deleted file mode 100644
... ...
@@ -1 +0,0 @@
1
-eyAiQVdTX0FDQ0VTU19LRVkiOiAiIiwKICAiQVdTX1NFQ1JFVF9LRVkiOiAiIiwKICAiR1BHX1BBU1NQSFJBU0UiOiAiIiwKICAiSU5ERVhfQVVUSCI6ICIiIH0=
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/*'