diff options
author | Johannes Würbach <johannes.wuerbach@googlemail.com> | 2019-04-15 17:36:25 +0200 |
---|---|---|
committer | Ben Kochie <superq@gmail.com> | 2019-04-15 17:36:25 +0200 |
commit | 4e5c4d464fa67e9cdfd9858d2151bc99603b2bff (patch) | |
tree | 2036049ad82104e2e1f45ff791a15e77a0e7ad8a | |
parent | e71e9f5a2fea95f19f7740c8c97861bb6ef94337 (diff) | |
download | prometheus_node_collector-4e5c4d464fa67e9cdfd9858d2151bc99603b2bff.tar.bz2 prometheus_node_collector-4e5c4d464fa67e9cdfd9858d2151bc99603b2bff.tar.xz prometheus_node_collector-4e5c4d464fa67e9cdfd9858d2151bc99603b2bff.zip |
Docker images for ARM32v7, ARM64v8 and ppc64le (#1207)
Build and publish ARM32v7, ARM64v8 and ppc64le docker images.
Signed-off-by: Johannes Würbach <johannes.wuerbach@googlemail.com>
-rw-r--r-- | .circleci/config.yml | 27 | ||||
-rw-r--r-- | .dockerignore | 3 | ||||
-rw-r--r-- | Dockerfile | 8 | ||||
-rw-r--r-- | Dockerfile.ppc64le | 7 | ||||
-rw-r--r-- | Makefile | 14 | ||||
-rw-r--r-- | Makefile.common | 39 |
6 files changed, 60 insertions, 38 deletions
diff --git a/.circleci/config.yml b/.circleci/config.yml index 1c958d5..9b81ce0 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml | |||
@@ -31,7 +31,8 @@ jobs: | |||
31 | - run: codespell --skip=".git,./vendor,ttar,go.mod,go.sum" -L uint | 31 | - run: codespell --skip=".git,./vendor,ttar,go.mod,go.sum" -L uint |
32 | 32 | ||
33 | build: | 33 | build: |
34 | machine: true | 34 | machine: |
35 | image: ubuntu-1604:201903-01 | ||
35 | 36 | ||
36 | environment: | 37 | environment: |
37 | DOCKER_TEST_IMAGE_NAME: quay.io/prometheus/golang-builder:1.11-base | 38 | DOCKER_TEST_IMAGE_NAME: quay.io/prometheus/golang-builder:1.11-base |
@@ -39,6 +40,7 @@ jobs: | |||
39 | 40 | ||
40 | steps: | 41 | steps: |
41 | - checkout | 42 | - checkout |
43 | - run: docker run --privileged linuxkit/binfmt:v0.6 | ||
42 | - run: make promu | 44 | - run: make promu |
43 | - run: promu crossbuild | 45 | - run: promu crossbuild |
44 | - run: promu --config .promu-cgo.yml crossbuild | 46 | - run: promu --config .promu-cgo.yml crossbuild |
@@ -49,7 +51,6 @@ jobs: | |||
49 | - store_artifacts: | 51 | - store_artifacts: |
50 | path: .build | 52 | path: .build |
51 | destination: /build | 53 | destination: /build |
52 | - run: ln -s .build/linux-amd64/node_exporter node_exporter | ||
53 | - run: | 54 | - run: |
54 | command: | | 55 | command: | |
55 | if [ -n "$CIRCLE_TAG" ]; then | 56 | if [ -n "$CIRCLE_TAG" ]; then |
@@ -72,10 +73,11 @@ jobs: | |||
72 | 73 | ||
73 | steps: | 74 | steps: |
74 | - checkout | 75 | - checkout |
75 | - setup_remote_docker | 76 | - setup_remote_docker: |
77 | version: 18.06.0-ce | ||
78 | - run: docker run --privileged linuxkit/binfmt:v0.6 | ||
76 | - attach_workspace: | 79 | - attach_workspace: |
77 | at: . | 80 | at: . |
78 | - run: ln -s .build/linux-amd64/node_exporter node_exporter | ||
79 | - run: make docker | 81 | - run: make docker |
80 | - run: make docker DOCKER_REPO=quay.io/prometheus | 82 | - run: make docker DOCKER_REPO=quay.io/prometheus |
81 | - run: docker images | 83 | - run: docker images |
@@ -83,13 +85,17 @@ jobs: | |||
83 | - run: docker login -u $QUAY_LOGIN -p $QUAY_PASSWORD quay.io | 85 | - run: docker login -u $QUAY_LOGIN -p $QUAY_PASSWORD quay.io |
84 | - run: make docker-publish | 86 | - run: make docker-publish |
85 | - run: make docker-publish DOCKER_REPO=quay.io/prometheus | 87 | - run: make docker-publish DOCKER_REPO=quay.io/prometheus |
88 | - run: make docker-manifest | ||
89 | - run: make docker-manifest DOCKER_REPO=quay.io/prometheus | ||
86 | 90 | ||
87 | docker_hub_release_tags: | 91 | docker_hub_release_tags: |
88 | executor: golang | 92 | executor: golang |
89 | 93 | ||
90 | steps: | 94 | steps: |
91 | - checkout | 95 | - checkout |
92 | - setup_remote_docker | 96 | - setup_remote_docker: |
97 | version: 18.06.0-ce | ||
98 | - run: docker run --privileged linuxkit/binfmt:v0.6 | ||
93 | - run: mkdir -v -p ${HOME}/bin | 99 | - run: mkdir -v -p ${HOME}/bin |
94 | - run: curl -L 'https://github.com/aktau/github-release/releases/download/v0.7.2/linux-amd64-github-release.tar.bz2' | tar xvjf - --strip-components 3 -C ${HOME}/bin | 100 | - run: curl -L 'https://github.com/aktau/github-release/releases/download/v0.7.2/linux-amd64-github-release.tar.bz2' | tar xvjf - --strip-components 3 -C ${HOME}/bin |
95 | - run: echo 'export PATH=${HOME}/bin:${PATH}' >> ${BASH_ENV} | 101 | - run: echo 'export PATH=${HOME}/bin:${PATH}' >> ${BASH_ENV} |
@@ -102,18 +108,23 @@ jobs: | |||
102 | - store_artifacts: | 108 | - store_artifacts: |
103 | path: .tarballs | 109 | path: .tarballs |
104 | destination: releases | 110 | destination: releases |
105 | - run: ln -s .build/linux-amd64/node_exporter node_exporter | ||
106 | - run: make docker DOCKER_IMAGE_TAG=$CIRCLE_TAG | 111 | - run: make docker DOCKER_IMAGE_TAG=$CIRCLE_TAG |
107 | - run: make docker DOCKER_IMAGE_TAG=$CIRCLE_TAG DOCKER_REPO=quay.io/prometheus | 112 | - run: make docker DOCKER_IMAGE_TAG=$CIRCLE_TAG DOCKER_REPO=quay.io/prometheus |
108 | - run: docker login -u $DOCKER_LOGIN -p $DOCKER_PASSWORD | 113 | - run: docker login -u $DOCKER_LOGIN -p $DOCKER_PASSWORD |
109 | - run: docker login -u $QUAY_LOGIN -p $QUAY_PASSWORD quay.io | 114 | - run: docker login -u $QUAY_LOGIN -p $QUAY_PASSWORD quay.io |
115 | - run: make docker-publish DOCKER_IMAGE_TAG="$CIRCLE_TAG" | ||
116 | - run: make docker-publish DOCKER_IMAGE_TAG="$CIRCLE_TAG" DOCKER_REPO=quay.io/prometheus | ||
117 | - run: make docker-manifest DOCKER_IMAGE_TAG="$CIRCLE_TAG" | ||
118 | - run: make docker-manifest DOCKER_IMAGE_TAG="$CIRCLE_TAG" DOCKER_REPO=quay.io/prometheus | ||
110 | - run: | | 119 | - run: | |
111 | if [[ "$CIRCLE_TAG" =~ ^v[0-9]+(\.[0-9]+){2}$ ]]; then | 120 | if [[ "$CIRCLE_TAG" =~ ^v[0-9]+(\.[0-9]+){2}$ ]]; then |
112 | make docker-tag-latest DOCKER_IMAGE_TAG="$CIRCLE_TAG" | 121 | make docker-tag-latest DOCKER_IMAGE_TAG="$CIRCLE_TAG" |
113 | make docker-tag-latest DOCKER_IMAGE_TAG="$CIRCLE_TAG" DOCKER_REPO=quay.io/prometheus | 122 | make docker-tag-latest DOCKER_IMAGE_TAG="$CIRCLE_TAG" DOCKER_REPO=quay.io/prometheus |
123 | make docker-publish DOCKER_IMAGE_TAG="latest" | ||
124 | make docker-publish DOCKER_IMAGE_TAG="latest" DOCKER_REPO=quay.io/prometheus | ||
125 | make docker-manifest DOCKER_IMAGE_TAG="latest" | ||
126 | make docker-manifest DOCKER_IMAGE_TAG="latest" DOCKER_REPO=quay.io/prometheus | ||
114 | fi | 127 | fi |
115 | - run: make docker-publish | ||
116 | - run: make docker-publish DOCKER_REPO=quay.io/prometheus | ||
117 | 128 | ||
118 | workflows: | 129 | workflows: |
119 | version: 2 | 130 | version: 2 |
diff --git a/.dockerignore b/.dockerignore index 1694cb0..7aff1fd 100644 --- a/.dockerignore +++ b/.dockerignore | |||
@@ -2,3 +2,6 @@ | |||
2 | .tarballs/ | 2 | .tarballs/ |
3 | 3 | ||
4 | !.build/linux-amd64 | 4 | !.build/linux-amd64 |
5 | !.build/linux-armv7 | ||
6 | !.build/linux-arm64 | ||
7 | !.build/linux-ppc64le | ||
@@ -1,7 +1,11 @@ | |||
1 | FROM quay.io/prometheus/busybox:glibc | 1 | ARG ARCH="amd64" |
2 | ARG OS="linux" | ||
3 | FROM quay.io/prometheus/busybox-${OS}-${ARCH}:glibc | ||
2 | LABEL maintainer="The Prometheus Authors <prometheus-developers@googlegroups.com>" | 4 | LABEL maintainer="The Prometheus Authors <prometheus-developers@googlegroups.com>" |
3 | 5 | ||
4 | COPY node_exporter /bin/node_exporter | 6 | ARG ARCH="amd64" |
7 | ARG OS="linux" | ||
8 | COPY .build/${OS}-${ARCH}/node_exporter /bin/node_exporter | ||
5 | 9 | ||
6 | EXPOSE 9100 | 10 | EXPOSE 9100 |
7 | USER nobody | 11 | USER nobody |
diff --git a/Dockerfile.ppc64le b/Dockerfile.ppc64le deleted file mode 100644 index 75c1aaf..0000000 --- a/Dockerfile.ppc64le +++ /dev/null | |||
@@ -1,7 +0,0 @@ | |||
1 | FROM ppc64le/busybox:glibc | ||
2 | |||
3 | COPY node_exporter /bin/node_exporter | ||
4 | |||
5 | EXPOSE 9100 | ||
6 | USER nobody | ||
7 | ENTRYPOINT [ "/bin/node_exporter" ] | ||
@@ -14,6 +14,9 @@ | |||
14 | # Ensure that 'all' is the default target otherwise it will be the first target from Makefile.common. | 14 | # Ensure that 'all' is the default target otherwise it will be the first target from Makefile.common. |
15 | all:: | 15 | all:: |
16 | 16 | ||
17 | # Needs to be defined before including Makefile.common to auto-generate targets | ||
18 | DOCKER_ARCHS ?= amd64 armv7 arm64 ppc64le | ||
19 | |||
17 | include Makefile.common | 20 | include Makefile.common |
18 | 21 | ||
19 | PROMTOOL_VERSION ?= 2.5.0 | 22 | PROMTOOL_VERSION ?= 2.5.0 |
@@ -22,7 +25,6 @@ PROMTOOL ?= $(FIRST_GOPATH)/bin/promtool | |||
22 | 25 | ||
23 | DOCKER_IMAGE_NAME ?= node-exporter | 26 | DOCKER_IMAGE_NAME ?= node-exporter |
24 | MACH ?= $(shell uname -m) | 27 | MACH ?= $(shell uname -m) |
25 | DOCKERFILE ?= Dockerfile | ||
26 | 28 | ||
27 | STATICCHECK_IGNORE = | 29 | STATICCHECK_IGNORE = |
28 | 30 | ||
@@ -114,18 +116,10 @@ checkrules: $(PROMTOOL) | |||
114 | @echo ">> checking rules for correctness" | 116 | @echo ">> checking rules for correctness" |
115 | find . -name "*rules*.yml" | xargs -I {} $(PROMTOOL) check rules {} | 117 | find . -name "*rules*.yml" | xargs -I {} $(PROMTOOL) check rules {} |
116 | 118 | ||
117 | .PHONY: docker | ||
118 | docker: | ||
119 | ifeq ($(MACH), ppc64le) | ||
120 | $(eval DOCKERFILE=Dockerfile.ppc64le) | ||
121 | endif | ||
122 | @echo ">> building docker image from $(DOCKERFILE)" | ||
123 | @docker build --file $(DOCKERFILE) -t "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)" . | ||
124 | |||
125 | .PHONY: test-docker | 119 | .PHONY: test-docker |
126 | test-docker: | 120 | test-docker: |
127 | @echo ">> testing docker image" | 121 | @echo ">> testing docker image" |
128 | ./test_image.sh "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)" 9100 | 122 | ./test_image.sh "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-amd64:$(DOCKER_IMAGE_TAG)" 9100 |
129 | 123 | ||
130 | .PHONY: promtool | 124 | .PHONY: promtool |
131 | promtool: $(PROMTOOL) | 125 | promtool: $(PROMTOOL) |
diff --git a/Makefile.common b/Makefile.common index ed29aa8..873964f 100644 --- a/Makefile.common +++ b/Makefile.common | |||
@@ -88,6 +88,12 @@ BIN_DIR ?= $(shell pwd) | |||
88 | DOCKER_IMAGE_TAG ?= $(subst /,-,$(shell git rev-parse --abbrev-ref HEAD)) | 88 | DOCKER_IMAGE_TAG ?= $(subst /,-,$(shell git rev-parse --abbrev-ref HEAD)) |
89 | DOCKER_REPO ?= prom | 89 | DOCKER_REPO ?= prom |
90 | 90 | ||
91 | DOCKER_ARCHS ?= amd64 | ||
92 | |||
93 | BUILD_DOCKER_ARCHS = $(addprefix common-docker-,$(DOCKER_ARCHS)) | ||
94 | PUBLISH_DOCKER_ARCHS = $(addprefix common-docker-publish-,$(DOCKER_ARCHS)) | ||
95 | TAG_DOCKER_ARCHS = $(addprefix common-docker-tag-latest-,$(DOCKER_ARCHS)) | ||
96 | |||
91 | ifeq ($(GOHOSTARCH),amd64) | 97 | ifeq ($(GOHOSTARCH),amd64) |
92 | ifeq ($(GOHOSTOS),$(filter $(GOHOSTOS),linux freebsd darwin windows)) | 98 | ifeq ($(GOHOSTOS),$(filter $(GOHOSTOS),linux freebsd darwin windows)) |
93 | # Only supported on amd64 | 99 | # Only supported on amd64 |
@@ -197,17 +203,28 @@ common-tarball: promu | |||
197 | @echo ">> building release tarball" | 203 | @echo ">> building release tarball" |
198 | $(PROMU) tarball --prefix $(PREFIX) $(BIN_DIR) | 204 | $(PROMU) tarball --prefix $(PREFIX) $(BIN_DIR) |
199 | 205 | ||
200 | .PHONY: common-docker | 206 | .PHONY: common-docker $(BUILD_DOCKER_ARCHS) |
201 | common-docker: | 207 | common-docker: $(BUILD_DOCKER_ARCHS) |
202 | docker build -t "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)" . | 208 | $(BUILD_DOCKER_ARCHS): common-docker-%: |
203 | 209 | docker build -t "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(DOCKER_IMAGE_TAG)" \ | |
204 | .PHONY: common-docker-publish | 210 | --build-arg ARCH="$*" \ |
205 | common-docker-publish: | 211 | --build-arg OS="linux" \ |
206 | docker push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)" | 212 | . |
207 | 213 | ||
208 | .PHONY: common-docker-tag-latest | 214 | .PHONY: common-docker-publish $(PUBLISH_DOCKER_ARCHS) |
209 | common-docker-tag-latest: | 215 | common-docker-publish: $(PUBLISH_DOCKER_ARCHS) |
210 | docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):latest" | 216 | $(PUBLISH_DOCKER_ARCHS): common-docker-publish-%: |
217 | docker push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(DOCKER_IMAGE_TAG)" | ||
218 | |||
219 | .PHONY: common-docker-tag-latest $(TAG_DOCKER_ARCHS) | ||
220 | common-docker-tag-latest: $(TAG_DOCKER_ARCHS) | ||
221 | $(TAG_DOCKER_ARCHS): common-docker-tag-latest-%: | ||
222 | docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(DOCKER_IMAGE_TAG)" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:latest" | ||
223 | |||
224 | .PHONY: common-docker-manifest | ||
225 | common-docker-manifest: | ||
226 | DOCKER_CLI_EXPERIMENTAL=enabled docker manifest create -a "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)" $(foreach ARCH,$(DOCKER_ARCHS),$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$(ARCH):$(DOCKER_IMAGE_TAG)) | ||
227 | DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)" | ||
211 | 228 | ||
212 | .PHONY: promu | 229 | .PHONY: promu |
213 | promu: $(PROMU) | 230 | promu: $(PROMU) |