aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Würbach <johannes.wuerbach@googlemail.com>2019-04-15 17:36:25 +0200
committerBen Kochie <superq@gmail.com>2019-04-15 17:36:25 +0200
commit4e5c4d464fa67e9cdfd9858d2151bc99603b2bff (patch)
tree2036049ad82104e2e1f45ff791a15e77a0e7ad8a
parente71e9f5a2fea95f19f7740c8c97861bb6ef94337 (diff)
downloadprometheus_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.yml27
-rw-r--r--.dockerignore3
-rw-r--r--Dockerfile8
-rw-r--r--Dockerfile.ppc64le7
-rw-r--r--Makefile14
-rw-r--r--Makefile.common39
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
118workflows: 129workflows:
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
diff --git a/Dockerfile b/Dockerfile
index 383e6ef..57844bd 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,7 +1,11 @@
1FROM quay.io/prometheus/busybox:glibc 1ARG ARCH="amd64"
2ARG OS="linux"
3FROM quay.io/prometheus/busybox-${OS}-${ARCH}:glibc
2LABEL maintainer="The Prometheus Authors <prometheus-developers@googlegroups.com>" 4LABEL maintainer="The Prometheus Authors <prometheus-developers@googlegroups.com>"
3 5
4COPY node_exporter /bin/node_exporter 6ARG ARCH="amd64"
7ARG OS="linux"
8COPY .build/${OS}-${ARCH}/node_exporter /bin/node_exporter
5 9
6EXPOSE 9100 10EXPOSE 9100
7USER nobody 11USER 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 @@
1FROM ppc64le/busybox:glibc
2
3COPY node_exporter /bin/node_exporter
4
5EXPOSE 9100
6USER nobody
7ENTRYPOINT [ "/bin/node_exporter" ]
diff --git a/Makefile b/Makefile
index 908cb9a..31eae06 100644
--- a/Makefile
+++ b/Makefile
@@ -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.
15all:: 15all::
16 16
17# Needs to be defined before including Makefile.common to auto-generate targets
18DOCKER_ARCHS ?= amd64 armv7 arm64 ppc64le
19
17include Makefile.common 20include Makefile.common
18 21
19PROMTOOL_VERSION ?= 2.5.0 22PROMTOOL_VERSION ?= 2.5.0
@@ -22,7 +25,6 @@ PROMTOOL ?= $(FIRST_GOPATH)/bin/promtool
22 25
23DOCKER_IMAGE_NAME ?= node-exporter 26DOCKER_IMAGE_NAME ?= node-exporter
24MACH ?= $(shell uname -m) 27MACH ?= $(shell uname -m)
25DOCKERFILE ?= Dockerfile
26 28
27STATICCHECK_IGNORE = 29STATICCHECK_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
118docker:
119ifeq ($(MACH), ppc64le)
120 $(eval DOCKERFILE=Dockerfile.ppc64le)
121endif
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
126test-docker: 120test-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
131promtool: $(PROMTOOL) 125promtool: $(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)
88DOCKER_IMAGE_TAG ?= $(subst /,-,$(shell git rev-parse --abbrev-ref HEAD)) 88DOCKER_IMAGE_TAG ?= $(subst /,-,$(shell git rev-parse --abbrev-ref HEAD))
89DOCKER_REPO ?= prom 89DOCKER_REPO ?= prom
90 90
91DOCKER_ARCHS ?= amd64
92
93BUILD_DOCKER_ARCHS = $(addprefix common-docker-,$(DOCKER_ARCHS))
94PUBLISH_DOCKER_ARCHS = $(addprefix common-docker-publish-,$(DOCKER_ARCHS))
95TAG_DOCKER_ARCHS = $(addprefix common-docker-tag-latest-,$(DOCKER_ARCHS))
96
91ifeq ($(GOHOSTARCH),amd64) 97ifeq ($(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)
201common-docker: 207common-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="$*" \
205common-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)
209common-docker-tag-latest: 215common-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)
220common-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
225common-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
213promu: $(PROMU) 230promu: $(PROMU)