This removes all the installation steps for docker-py from the
Dockerfile, and instead builds the upstream Dockerfile, and runs
docker-py tests in a container.
To test;
```
make test-docker-py
...
Removing bundles/
---> Making bundle: dynbinary (in bundles/dynbinary)
Building: bundles/dynbinary-daemon/dockerd-dev
Created binary: bundles/dynbinary-daemon/dockerd-dev
---> Making bundle: test-docker-py (in bundles/test-docker-py)
---> Making bundle: .integration-daemon-start (in bundles/test-docker-py)
Using test binary docker
Starting dockerd
INFO: Waiting for daemon to start...
.
INFO: Building docker-sdk-python3:3.7.0...
sha256:686428ae28479e9b5c8fdad1cadc9b7a39b462e66bd13a7e35bd79c6a152a402
INFO: Starting docker-py tests...
============================= test session starts ==============================
platform linux -- Python 3.6.8, pytest-4.1.0, py-1.8.0, pluggy-0.9.0
rootdir: /src, inifile: pytest.ini
plugins: timeout-1.3.3, cov-2.6.1
collected 359 items
tests/integration/api_build_test.py .......s....
....
```
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
(cherry picked from commit 7bfe48cc00318f9d4cf388237855012aafac56b0)
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
| ... | ... |
@@ -73,17 +73,6 @@ RUN set -x \ |
| 73 | 73 |
esac \ |
| 74 | 74 |
&& rm -rf "$GOPATH" |
| 75 | 75 |
|
| 76 |
- |
|
| 77 |
- |
|
| 78 |
-FROM base AS docker-py |
|
| 79 |
-# Get the "docker-py" source so we can run their integration tests |
|
| 80 |
-ENV DOCKER_PY_COMMIT ac922192959870774ad8428344d9faa0555f7ba6 |
|
| 81 |
-RUN git clone https://github.com/docker/docker-py.git /build \ |
|
| 82 |
- && cd /build \ |
|
| 83 |
- && git checkout -q $DOCKER_PY_COMMIT |
|
| 84 |
- |
|
| 85 |
- |
|
| 86 |
- |
|
| 87 | 76 |
FROM base AS swagger |
| 88 | 77 |
# Install go-swagger for validating swagger.yaml |
| 89 | 78 |
ENV GO_SWAGGER_COMMIT c28258affb0b6251755d92489ef685af8d4ff3eb |
| ... | ... |
@@ -94,7 +83,6 @@ RUN set -x \ |
| 94 | 94 |
&& go build -o /build/swagger github.com/go-swagger/go-swagger/cmd/swagger \ |
| 95 | 95 |
&& rm -rf "$GOPATH" |
| 96 | 96 |
|
| 97 |
- |
|
| 98 | 97 |
FROM base AS frozen-images |
| 99 | 98 |
RUN apt-get update && apt-get install -y jq ca-certificates --no-install-recommends |
| 100 | 99 |
# Get useful and necessary Hub images so we can "docker load" locally instead of pulling |
| ... | ... |
@@ -228,25 +216,12 @@ RUN apt-get update && apt-get install -y \ |
| 228 | 228 |
jq \ |
| 229 | 229 |
libcap2-bin \ |
| 230 | 230 |
libdevmapper-dev \ |
| 231 |
-# libffi-dev and libssl-dev appear to be required for compiling paramiko on s390x/ppc64le |
|
| 232 |
- libffi-dev \ |
|
| 233 |
- libssl-dev \ |
|
| 234 | 231 |
libudev-dev \ |
| 235 | 232 |
libsystemd-dev \ |
| 236 | 233 |
binutils-mingw-w64 \ |
| 237 | 234 |
g++-mingw-w64-x86-64 \ |
| 238 | 235 |
net-tools \ |
| 239 | 236 |
pigz \ |
| 240 |
- python-backports.ssl-match-hostname \ |
|
| 241 |
- python-dev \ |
|
| 242 |
-# python-cffi appears to be required for compiling paramiko on s390x/ppc64le |
|
| 243 |
- python-cffi \ |
|
| 244 |
- python-mock \ |
|
| 245 |
- python-pip \ |
|
| 246 |
- python-requests \ |
|
| 247 |
- python-setuptools \ |
|
| 248 |
- python-websocket \ |
|
| 249 |
- python-wheel \ |
|
| 250 | 237 |
thin-provisioning-tools \ |
| 251 | 238 |
vim \ |
| 252 | 239 |
vim-common \ |
| ... | ... |
@@ -270,16 +245,6 @@ COPY --from=proxy /build/ /usr/local/bin/ |
| 270 | 270 |
COPY --from=dockercli /build/ /usr/local/cli |
| 271 | 271 |
COPY --from=registry /build/registry* /usr/local/bin/ |
| 272 | 272 |
COPY --from=criu /build/ /usr/local/ |
| 273 |
-COPY --from=docker-py /build/ /docker-py |
|
| 274 |
-# TODO: This is for the docker-py tests, which shouldn't really be needed for |
|
| 275 |
-# this image, but currently CI is expecting to run this image. This should be |
|
| 276 |
-# split out into a separate image, including all the `python-*` deps installed |
|
| 277 |
-# above. |
|
| 278 |
-RUN cd /docker-py \ |
|
| 279 |
- && pip install docker-pycreds==0.4.0 \ |
|
| 280 |
- && pip install paramiko==2.4.2 \ |
|
| 281 |
- && pip install yamllint==1.5.0 \ |
|
| 282 |
- && pip install -r test-requirements.txt |
|
| 283 | 273 |
COPY --from=rootlesskit /build/ /usr/local/bin/ |
| 284 | 274 |
COPY --from=djs55/vpnkit@sha256:e508a17cfacc8fd39261d5b4e397df2b953690da577e2c987a47630cd0c42f8e /vpnkit /usr/local/bin/vpnkit.x86_64 |
| 285 | 275 |
|
| ... | ... |
@@ -3,18 +3,47 @@ set -e |
| 3 | 3 |
|
| 4 | 4 |
source hack/make/.integration-test-helpers |
| 5 | 5 |
|
| 6 |
-# subshell so that we can export PATH without breaking other things |
|
| 6 |
+# The commit or tag to use for testing |
|
| 7 |
+# TODO docker 17.06 cli client used in CI fails to build using a sha; |
|
| 8 |
+# unable to prepare context: unable to 'git clone' to temporary context directory: error fetching: error: no such remote ref ead0bb9e08c13dd3d1712759491eee06bf5a5602 |
|
| 9 |
+#: exit status 128 |
|
| 10 |
+: ${DOCKER_PY_COMMIT:=4.0.2}
|
|
| 7 | 11 |
( |
| 8 | 12 |
bundle .integration-daemon-start |
| 9 | 13 |
|
| 10 |
- dockerPy='/docker-py' |
|
| 11 |
- [ -d "$dockerPy" ] || {
|
|
| 12 |
- dockerPy="$DEST/docker-py" |
|
| 13 |
- git clone https://github.com/docker/docker-py.git "$dockerPy" |
|
| 14 |
- } |
|
| 14 |
+ docker_host_scheme=`echo "${DOCKER_HOST}" | cut -d: -f1 -`
|
|
| 15 | 15 |
|
| 16 |
- # exporting PYTHONPATH to import "docker" from our local docker-py |
|
| 17 |
- test_env PYTHONPATH="$dockerPy" py.test --junitxml="$DEST/results.xml" "$dockerPy/tests/integration" |
|
| 16 |
+ case "${docker_host_scheme}" in
|
|
| 17 |
+ unix) |
|
| 18 |
+ # trim the tcp:// scheme, and bind-mount the docker socket into the container |
|
| 19 |
+ run_opts="-v ${DOCKER_HOST#unix://}:/var/run/docker.sock"
|
|
| 20 |
+ ;; |
|
| 18 | 21 |
|
| 22 |
+ tcp) |
|
| 23 |
+ # run container in host-mode networking so that it can connect to the |
|
| 24 |
+ # daemon from the current networking namespace (e.g., to connect to localhost) |
|
| 25 |
+ run_opts="--network=host -e DOCKER_HOST=${DOCKER_HOST}"
|
|
| 26 |
+ ;; |
|
| 27 |
+ |
|
| 28 |
+ *) |
|
| 29 |
+ echo "WARN: Skipping test-docker-py: connecting to docker daemon using ${docker_host_scheme} (${DOCKER_HOST}) not supported"
|
|
| 30 |
+ bundle .integration-daemon-stop |
|
| 31 |
+ return 0 |
|
| 32 |
+ esac |
|
| 33 |
+ |
|
| 34 |
+ docker_py_image="docker-sdk-python3:${DOCKER_PY_COMMIT}"
|
|
| 35 |
+ if ! docker image inspect "dockerPyImage" &> /dev/null; then |
|
| 36 |
+ echo INFO: Building ${docker_py_image}...
|
|
| 37 |
+ ( |
|
| 38 |
+ [ -n "${TESTDEBUG}" ] && set -x
|
|
| 39 |
+ exec docker build --quiet -t ${docker_py_image} -f tests/Dockerfile "https://github.com/docker/docker-py.git#${DOCKER_PY_COMMIT}"
|
|
| 40 |
+ ) |
|
| 41 |
+ fi |
|
| 42 |
+ |
|
| 43 |
+ echo INFO: Starting docker-py tests... |
|
| 44 |
+ ( |
|
| 45 |
+ [ -n "${TESTDEBUG}" ] && set -x
|
|
| 46 |
+ exec docker run -t --rm ${run_opts} ${docker_py_image} py.test tests/integration
|
|
| 47 |
+ ) |
|
| 19 | 48 |
bundle .integration-daemon-stop |
| 20 | 49 |
) 2>&1 | tee -a "$DEST/test.log" |