1
1
#! groovy
2
2
3
- def imageNameBase = " dockerbuildbot/docker-py"
4
- def imageNamePy2
3
+ def imageNameBase = " dockerpinata/docker-py"
5
4
def imageNamePy3
5
+ def imageDindSSH
6
6
def images = [:]
7
7
8
8
def buildImage = { name , buildargs , pyTag ->
@@ -13,26 +13,27 @@ def buildImage = { name, buildargs, pyTag ->
13
13
img = docker. build(name, buildargs)
14
14
img. push()
15
15
}
16
- images[pyTag] = img. id
16
+ if (pyTag ?. trim()) images[pyTag] = img. id
17
17
}
18
18
19
19
def buildImages = { ->
20
- wrappedNode(label : " amd64 && ubuntu-1804 && overlay2" , cleanWorkspace : true ) {
20
+ wrappedNode(label : " amd64 && ubuntu-2004 && overlay2" , cleanWorkspace : true ) {
21
21
stage(" build image" ) {
22
22
checkout(scm)
23
23
24
- imageNamePy2 = " ${ imageNameBase} :py2-${ gitCommit()} "
25
24
imageNamePy3 = " ${ imageNameBase} :py3-${ gitCommit()} "
26
-
27
- buildImage(imageNamePy2, " -f tests/Dockerfile --build-arg PYTHON_VERSION=2.7 ." , " py2.7" )
28
- buildImage(imageNamePy3, " -f tests/Dockerfile --build-arg PYTHON_VERSION=3.7 ." , " py3.7" )
25
+ imageDindSSH = " ${ imageNameBase} :sshdind-${ gitCommit()} "
26
+ withDockerRegistry(credentialsId :' dockerbuildbot-index.docker.io' ) {
27
+ buildImage(imageDindSSH, " -f tests/Dockerfile-ssh-dind ." , " " )
28
+ buildImage(imageNamePy3, " -f tests/Dockerfile --build-arg PYTHON_VERSION=3.10 ." , " py3.10" )
29
+ }
29
30
}
30
31
}
31
32
}
32
33
33
34
def getDockerVersions = { ->
34
- def dockerVersions = [" 19.03.5 " ]
35
- wrappedNode(label : " amd64 && ubuntu-1804 && overlay2" ) {
35
+ def dockerVersions = [" 19.03.12 " ]
36
+ wrappedNode(label : " amd64 && ubuntu-2004 && overlay2" ) {
36
37
def result = sh(script : """ docker run --rm \\
37
38
--entrypoint=python \\
38
39
${ imageNamePy3} \\
@@ -66,39 +67,64 @@ def runTests = { Map settings ->
66
67
throw new Exception (" Need test image object, e.g.: `runTests(testImage: img)`" )
67
68
}
68
69
if (! dockerVersion) {
69
- throw new Exception (" Need Docker version to test, e.g.: `runTests(dockerVersion: '1.12.3 ')`" )
70
+ throw new Exception (" Need Docker version to test, e.g.: `runTests(dockerVersion: '19.03.12 ')`" )
70
71
}
71
72
if (! pythonVersion) {
72
- throw new Exception (" Need Python version being tested, e.g.: `runTests(pythonVersion: 'py2.7 ')`" )
73
+ throw new Exception (" Need Python version being tested, e.g.: `runTests(pythonVersion: 'py3.x ')`" )
73
74
}
74
75
75
76
{ ->
76
- wrappedNode(label : " amd64 && ubuntu-1804 && overlay2" , cleanWorkspace : true ) {
77
+ wrappedNode(label : " amd64 && ubuntu-2004 && overlay2" , cleanWorkspace : true ) {
77
78
stage(" test python=${ pythonVersion} / docker=${ dockerVersion} " ) {
78
79
checkout(scm)
79
80
def dindContainerName = " dpy-dind-\$ BUILD_NUMBER-\$ EXECUTOR_NUMBER-${ pythonVersion} -${ dockerVersion} "
80
81
def testContainerName = " dpy-tests-\$ BUILD_NUMBER-\$ EXECUTOR_NUMBER-${ pythonVersion} -${ dockerVersion} "
81
82
def testNetwork = " dpy-testnet-\$ BUILD_NUMBER-\$ EXECUTOR_NUMBER-${ pythonVersion} -${ dockerVersion} "
82
- try {
83
- sh """ docker network create ${ testNetwork} """
84
- sh """ docker run -d --name ${ dindContainerName} -v /tmp --privileged --network ${ testNetwork} \\
85
- docker:${ dockerVersion} -dind dockerd -H tcp://0.0.0.0:2375
86
- """
87
- sh """ docker run \\
88
- --name ${ testContainerName} \\
89
- -e "DOCKER_HOST=tcp://${ dindContainerName} :2375" \\
90
- -e 'DOCKER_TEST_API_VERSION=${ apiVersion} ' \\
91
- --network ${ testNetwork} \\
92
- --volumes-from ${ dindContainerName} \\
93
- ${ testImage} \\
94
- py.test -v -rxs --cov=docker tests/
95
- """
96
- } finally {
97
- sh """
98
- docker stop ${ dindContainerName} ${ testContainerName}
99
- docker rm -vf ${ dindContainerName} ${ testContainerName}
100
- docker network rm ${ testNetwork}
101
- """
83
+ withDockerRegistry(credentialsId :' dockerbuildbot-index.docker.io' ) {
84
+ try {
85
+ // unit tests
86
+ sh """ docker run --rm \\
87
+ -e 'DOCKER_TEST_API_VERSION=${ apiVersion} ' \\
88
+ ${ testImage} \\
89
+ py.test -v -rxs --cov=docker tests/unit
90
+ """
91
+ // integration tests
92
+ sh """ docker network create ${ testNetwork} """
93
+ sh """ docker run --rm -d --name ${ dindContainerName} -v /tmp --privileged --network ${ testNetwork} \\
94
+ ${ imageDindSSH} dockerd -H tcp://0.0.0.0:2375
95
+ """
96
+ sh """ docker run --rm \\
97
+ --name ${ testContainerName} \\
98
+ -e "DOCKER_HOST=tcp://${ dindContainerName} :2375" \\
99
+ -e 'DOCKER_TEST_API_VERSION=${ apiVersion} ' \\
100
+ --network ${ testNetwork} \\
101
+ --volumes-from ${ dindContainerName} \\
102
+ -v $DOCKER_CONFIG /config.json:/root/.docker/config.json \\
103
+ ${ testImage} \\
104
+ py.test -v -rxs --cov=docker tests/integration
105
+ """
106
+ sh """ docker stop ${ dindContainerName} """
107
+ // start DIND container with SSH
108
+ sh """ docker run --rm -d --name ${ dindContainerName} -v /tmp --privileged --network ${ testNetwork} \\
109
+ ${ imageDindSSH} dockerd --experimental"""
110
+ sh """ docker exec ${ dindContainerName} sh -c /usr/sbin/sshd """
111
+ // run SSH tests only
112
+ sh """ docker run --rm \\
113
+ --name ${ testContainerName} \\
114
+ -e "DOCKER_HOST=ssh://${ dindContainerName} :22" \\
115
+ -e 'DOCKER_TEST_API_VERSION=${ apiVersion} ' \\
116
+ --network ${ testNetwork} \\
117
+ --volumes-from ${ dindContainerName} \\
118
+ -v $DOCKER_CONFIG /config.json:/root/.docker/config.json \\
119
+ ${ testImage} \\
120
+ py.test -v -rxs --cov=docker tests/ssh
121
+ """
122
+ } finally {
123
+ sh """
124
+ docker stop ${ dindContainerName}
125
+ docker network rm ${ testNetwork}
126
+ """
127
+ }
102
128
}
103
129
}
104
130
}
0 commit comments