Fix various issues with the "make buildx" target
| ... | ... |
@@ -1,14 +1,27 @@ |
| 1 | 1 |
ARG GO_VERSION=1.12.10 |
| 2 |
-FROM golang:${GO_VERSION}-stretch
|
|
| 2 |
+ARG BUILDX_COMMIT=v0.3.1 |
|
| 3 | 3 |
ARG BUILDX_REPO=https://github.com/docker/buildx.git |
| 4 |
+ |
|
| 5 |
+FROM golang:${GO_VERSION}-stretch AS build
|
|
| 6 |
+ARG BUILDX_REPO |
|
| 4 | 7 |
RUN git clone "${BUILDX_REPO}" /buildx
|
| 5 | 8 |
WORKDIR /buildx |
| 6 |
-ARG BUILDX_COMMIT=master |
|
| 9 |
+ARG BUILDX_COMMIT |
|
| 7 | 10 |
RUN git fetch origin "${BUILDX_COMMIT}":build && git checkout build
|
| 8 | 11 |
RUN go mod download |
| 9 | 12 |
ARG GOOS |
| 10 | 13 |
ARG GOARCH |
| 11 | 14 |
# Keep these essentially no-op var settings for debug purposes. |
| 12 | 15 |
# It allows us to see what the GOOS/GOARCH that's being built for is. |
| 13 |
-RUN GOOS=${GOOS} GOARCH=${GOARCH} go build -ldflags '-X github.com/docker/buildx/version.Version=${BUILDX_COMMIT} -X github.com/docker/buildx/version.Revision=${BUILDX_COMMIT} -X github.com/docker/buildx/version.Package=github.com/docker/buildx' -o /usr/bin/buildx ./cmd/buildx
|
|
| 14 |
-ENTRYPOINT ["/usr/bin/buildx"] |
|
| 15 | 16 |
\ No newline at end of file |
| 17 |
+RUN GOOS="${GOOS}" GOARCH="${GOARCH}" BUILDX_COMMIT="${BUILDX_COMMIT}"; \
|
|
| 18 |
+ pkg="github.com/docker/buildx"; \ |
|
| 19 |
+ ldflags="\ |
|
| 20 |
+ -X \"${pkg}/version.Version=$(git describe --tags)\" \
|
|
| 21 |
+ -X \"${pkg}/version.Revision=$(git rev-parse --short HEAD)\" \
|
|
| 22 |
+ -X \"${pkg}/version.Package=buildx\" \
|
|
| 23 |
+ "; \ |
|
| 24 |
+ go build -ldflags "${ldflags}" -o /usr/bin/buildx ./cmd/buildx
|
|
| 25 |
+ |
|
| 26 |
+FROM golang:${GO_VERSION}-stretch
|
|
| 27 |
+COPY --from=build /usr/bin/buildx /usr/bin/buildx |
|
| 28 |
+ENTRYPOINT ["/usr/bin/buildx"] |
| ... | ... |
@@ -377,8 +377,12 @@ pipeline {
|
| 377 | 377 |
expression { params.s390x }
|
| 378 | 378 |
} |
| 379 | 379 |
agent { label 's390x-ubuntu-1604' }
|
| 380 |
- // s390x machines run on Docker 18.06, and buildkit has some bugs on that version |
|
| 381 |
- environment { DOCKER_BUILDKIT = '0' }
|
|
| 380 |
+ // s390x machines run on Docker 18.06, and buildkit has some |
|
| 381 |
+ // bugs on that version. Build and use buildx instead. |
|
| 382 |
+ environment {
|
|
| 383 |
+ USE_BUILDX = '1' |
|
| 384 |
+ DOCKER_BUILDKIT = '0' |
|
| 385 |
+ } |
|
| 382 | 386 |
|
| 383 | 387 |
stages {
|
| 384 | 388 |
stage("Print info") {
|
| ... | ... |
@@ -486,8 +490,12 @@ pipeline {
|
| 486 | 486 |
expression { params.s390x }
|
| 487 | 487 |
} |
| 488 | 488 |
agent { label 's390x-ubuntu-1604' }
|
| 489 |
- // s390x machines run on Docker 18.06, and buildkit has some bugs on that version |
|
| 490 |
- environment { DOCKER_BUILDKIT = '0' }
|
|
| 489 |
+ // s390x machines run on Docker 18.06, and buildkit has some |
|
| 490 |
+ // bugs on that version. Build and use buildx instead. |
|
| 491 |
+ environment {
|
|
| 492 |
+ USE_BUILDX = '1' |
|
| 493 |
+ DOCKER_BUILDKIT = '0' |
|
| 494 |
+ } |
|
| 491 | 495 |
|
| 492 | 496 |
stages {
|
| 493 | 497 |
stage("Print info") {
|
| ... | ... |
@@ -571,8 +579,12 @@ pipeline {
|
| 571 | 571 |
expression { params.ppc64le }
|
| 572 | 572 |
} |
| 573 | 573 |
agent { label 'ppc64le-ubuntu-1604' }
|
| 574 |
- // ppc64le machines run on Docker 18.06, and buildkit has some bugs on that version |
|
| 575 |
- environment { DOCKER_BUILDKIT = '0' }
|
|
| 574 |
+ // ppc64le machines run on Docker 18.06, and buildkit has some |
|
| 575 |
+ // bugs on that version. Build and use buildx instead. |
|
| 576 |
+ environment {
|
|
| 577 |
+ USE_BUILDX = '1' |
|
| 578 |
+ DOCKER_BUILDKIT = '0' |
|
| 579 |
+ } |
|
| 576 | 580 |
|
| 577 | 581 |
stages {
|
| 578 | 582 |
stage("Print info") {
|
| ... | ... |
@@ -680,8 +692,12 @@ pipeline {
|
| 680 | 680 |
expression { params.ppc64le }
|
| 681 | 681 |
} |
| 682 | 682 |
agent { label 'ppc64le-ubuntu-1604' }
|
| 683 |
- // ppc64le machines run on Docker 18.06, and buildkit has some bugs on that version |
|
| 684 |
- environment { DOCKER_BUILDKIT = '0' }
|
|
| 683 |
+ // ppc64le machines run on Docker 18.06, and buildkit has some |
|
| 684 |
+ // bugs on that version. Build and use buildx instead. |
|
| 685 |
+ environment {
|
|
| 686 |
+ USE_BUILDX = '1' |
|
| 687 |
+ DOCKER_BUILDKIT = '0' |
|
| 688 |
+ } |
|
| 685 | 689 |
|
| 686 | 690 |
stages {
|
| 687 | 691 |
stage("Print info") {
|
| ... | ... |
@@ -247,21 +247,25 @@ swagger-docs: ## preview the API documentation |
| 247 | 247 |
|
| 248 | 248 |
.PHONY: buildx |
| 249 | 249 |
ifeq ($(BUILDX), bundles/buildx) |
| 250 |
-buildx: bundles/buildx # build buildx cli tool |
|
| 251 |
-else |
|
| 252 |
-buildx: |
|
| 250 |
+buildx: bundles/buildx ## build buildx cli tool |
|
| 253 | 251 |
endif |
| 254 | 252 |
|
| 255 |
-bundles/buildx: BUILDX_DOCKERFILE ?= Dockerfile.buildx |
|
| 256 |
-bundles/buildx: BUILDX_COMMIT ?= v0.3.0 |
|
| 253 |
+# This intentionally is not using the `--output` flag from the docker CLI, which |
|
| 254 |
+# is a buildkit option. The idea here being that if buildx is being used, it's |
|
| 255 |
+# because buildkit is not supported natively |
|
| 257 | 256 |
bundles/buildx: bundles ## build buildx CLI tool |
| 258 |
- # This intetionally is not using the `--output` flag from the docker CLI which is a buildkit option |
|
| 259 |
- # The idea here being that if buildx is being used, it's because buildkit is not supported natively |
|
| 260 |
- docker build -f $(BUILDX_DOCKERFILE) -t "moby-buildx:$(BUILDX_COMMIT)" \ |
|
| 257 |
+ docker build -f $${BUILDX_DOCKERFILE:-Dockerfile.buildx} -t "moby-buildx:$${BUILDX_COMMIT:-latest}" \
|
|
| 261 | 258 |
--build-arg BUILDX_COMMIT \ |
| 262 | 259 |
--build-arg BUILDX_REPO \ |
| 263 | 260 |
--build-arg GOOS=$$(if [ -n "$(GOOS)" ]; then echo $(GOOS); else go env GOHOSTOS || uname | awk '{print tolower($$0)}' || true; fi) \
|
| 264 | 261 |
--build-arg GOARCH=$$(if [ -n "$(GOARCH)" ]; then echo $(GOARCH); else go env GOHOSTARCH || true; fi) \ |
| 265 |
- . && \ |
|
| 266 |
- id=$$(docker create moby-buildx:$(BUILDX_COMMIT)); \ |
|
| 267 |
- if [ -n "$${id}" ]; then docker cp $${id}:/usr/bin/buildx $@ && touch $@; docker rm -f $${id}; fi
|
|
| 262 |
+ . |
|
| 263 |
+ |
|
| 264 |
+ id=$$(docker create moby-buildx:$${BUILDX_COMMIT:-latest}); \
|
|
| 265 |
+ if [ -n "$${id}" ]; then \
|
|
| 266 |
+ docker cp $${id}:/usr/bin/buildx $@ \
|
|
| 267 |
+ && touch $@; \ |
|
| 268 |
+ docker rm -f $${id}; \
|
|
| 269 |
+ fi |
|
| 270 |
+ |
|
| 271 |
+ $@ version |