Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add arm64 support for binaries and docker images #2176

Merged
merged 2 commits into from
May 29, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ Changes by Version
#### New Features

#### Bug fixes, Minor Improvements
* Add arm64 support for binaries and make architecture configurable in docker images. ([#2176](https://github.com/jaegertracing/jaeger/pull/2176), [@MrXinWang](https://github.com/MrXinWang))

### UI Changes

Expand Down
64 changes: 17 additions & 47 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ ifeq ($(UNAME), s390x)
else
RACE=-race
endif
GOOS ?= $(shell go env GOOS)
GOARCH ?= $(shell go env GOARCH)
MrXinWang marked this conversation as resolved.
Show resolved Hide resolved
GOBUILD=CGO_ENABLED=0 installsuffix=cgo go build -trimpath
GOTEST=go test -v $(RACE)
GOLINT=golint
Expand Down Expand Up @@ -195,20 +197,16 @@ elasticsearch-mappings:
.PHONY: build-examples
build-examples:
esc -pkg frontend -o examples/hotrod/services/frontend/gen_assets.go -prefix examples/hotrod/services/frontend/web_assets examples/hotrod/services/frontend/web_assets
ifeq ($(GOARCH), s390x)
$(GOBUILD) -o ./examples/hotrod/hotrod-$(GOOS)-$(GOARCH) ./examples/hotrod/main.go
else
$(GOBUILD) -o ./examples/hotrod/hotrod-$(GOOS) ./examples/hotrod/main.go
endif

.PHONY: build-tracegen
build-tracegen:
$(GOBUILD) -o ./cmd/tracegen/tracegen-$(GOOS) ./cmd/tracegen/main.go
$(GOBUILD) -o ./cmd/tracegen/tracegen-$(GOOS)-$(GOARCH) ./cmd/tracegen/main.go

.PHONE: docker-hotrod
docker-hotrod:
GOOS=linux $(MAKE) build-examples
docker build -t $(DOCKER_NAMESPACE)/example-hotrod:${DOCKER_TAG} ./examples/hotrod
docker build -t $(DOCKER_NAMESPACE)/example-hotrod:${DOCKER_TAG} ./examples/hotrod --build-arg ARCH=$(GOARCH)

.PHONY: run-all-in-one
run-all-in-one:
Expand All @@ -226,92 +224,64 @@ build-all-in-one-linux: build-ui

MrXinWang marked this conversation as resolved.
Show resolved Hide resolved
.PHONY: build-all-in-one
build-all-in-one: elasticsearch-mappings
ifeq ($(GOARCH), s390x)
$(GOBUILD) -tags ui -o ./cmd/all-in-one/all-in-one-$(GOOS)-$(GOARCH) $(BUILD_INFO) ./cmd/all-in-one/main.go
else
$(GOBUILD) -tags ui -o ./cmd/all-in-one/all-in-one-$(GOOS) $(BUILD_INFO) ./cmd/all-in-one/main.go
endif

.PHONY: build-agent
build-agent:
ifeq ($(GOARCH), s390x)
$(GOBUILD) -o ./cmd/agent/agent-$(GOOS)-$(GOARCH) $(BUILD_INFO) ./cmd/agent/main.go
else
$(GOBUILD) -o ./cmd/agent/agent-$(GOOS) $(BUILD_INFO) ./cmd/agent/main.go
endif

.PHONY: build-query
build-query:
ifeq ($(GOARCH), s390x)
$(GOBUILD) -tags ui -o ./cmd/query/query-$(GOOS)-$(GOARCH) $(BUILD_INFO) ./cmd/query/main.go
else
$(GOBUILD) -tags ui -o ./cmd/query/query-$(GOOS) $(BUILD_INFO) ./cmd/query/main.go
endif

.PHONY: build-collector
build-collector: elasticsearch-mappings
ifeq ($(GOARCH), s390x)
$(GOBUILD) -o ./cmd/collector/collector-$(GOOS)-$(GOARCH) $(BUILD_INFO) ./cmd/collector/main.go
else
$(GOBUILD) -o ./cmd/collector/collector-$(GOOS) $(BUILD_INFO) ./cmd/collector/main.go
endif

.PHONY: build-otel-collector
build-otel-collector: elasticsearch-mappings
ifeq ($(GOARCH), s390x)
cd ${OTEL_COLLECTOR_DIR}/cmd/collector && $(GOBUILD) -o ./opentelemetry-collector-$(GOOS)-$(GOARCH) $(BUILD_INFO) main.go
else
cd ${OTEL_COLLECTOR_DIR}/cmd/collector && $(GOBUILD) -o ./opentelemetry-collector-$(GOOS) $(BUILD_INFO) main.go
endif

.PHONY: build-otel-agent
build-otel-agent:
ifeq ($(GOARCH), s390x)
cd ${OTEL_COLLECTOR_DIR}/cmd/agent && $(GOBUILD) -o ./opentelemetry-agent-$(GOOS)-$(GOARCH) $(BUILD_INFO) main.go
else
cd ${OTEL_COLLECTOR_DIR}/cmd/agent && $(GOBUILD) -o ./opentelemetry-agent-$(GOOS) $(BUILD_INFO) main.go
endif

.PHONY: build-otel-ingester
build-otel-ingester:
ifeq ($(GOARCH), s390x)
cd ${OTEL_COLLECTOR_DIR}/cmd/ingester && $(GOBUILD) -o ./opentelemetry-ingester-$(GOOS)-$(GOARCH) $(BUILD_INFO) main.go
else
cd ${OTEL_COLLECTOR_DIR}/cmd/ingester && $(GOBUILD) -o ./opentelemetry-ingester-$(GOOS) $(BUILD_INFO) main.go
endif

.PHONY: build-ingester
build-ingester:
ifeq ($(GOARCH), s390x)
$(GOBUILD) -o ./cmd/ingester/ingester-$(GOOS)-$(GOARCH) $(BUILD_INFO) ./cmd/ingester/main.go
else
$(GOBUILD) -o ./cmd/ingester/ingester-$(GOOS) $(BUILD_INFO) ./cmd/ingester/main.go
endif

.PHONY: docker
docker: build-ui build-binaries-linux docker-images-only

.PHONY: build-binaries-linux
build-binaries-linux:
GOOS=linux $(MAKE) build-platform-binaries
GOOS=linux GOARCH=amd64 $(MAKE) build-platform-binaries

MrXinWang marked this conversation as resolved.
Show resolved Hide resolved
.PHONY: build-binaries-windows
build-binaries-windows:
GOOS=windows $(MAKE) build-platform-binaries
GOOS=windows GOARCH=amd64 $(MAKE) build-platform-binaries

.PHONY: build-binaries-darwin
build-binaries-darwin:
GOOS=darwin $(MAKE) build-platform-binaries
GOOS=darwin GOARCH=amd64 $(MAKE) build-platform-binaries

.PHONY: build-binaries-s390x
build-binaries-s390x:
GOOS=linux GOARCH=s390x $(MAKE) build-platform-binaries

.PHONY: build-binaries-arm64
build-binaries-arm64:
GOOS=linux GOARCH=arm64 $(MAKE) build-platform-binaries

.PHONY: build-platform-binaries
build-platform-binaries: build-agent build-collector build-query build-ingester build-all-in-one build-examples build-tracegen build-otel-collector build-otel-agent build-otel-ingester

.PHONY: build-all-platforms
build-all-platforms: build-binaries-linux build-binaries-windows build-binaries-darwin build-binaries-s390x
build-all-platforms: build-binaries-linux build-binaries-windows build-binaries-darwin build-binaries-s390x build-binaries-arm64

.PHONY: docker-images-cassandra
docker-images-cassandra:
Expand All @@ -327,16 +297,16 @@ docker-images-elastic:
.PHONY: docker-images-jaeger-backend
docker-images-jaeger-backend:
for component in agent collector query ingester ; do \
docker build -t $(DOCKER_NAMESPACE)/jaeger-$$component:${DOCKER_TAG} cmd/$$component ; \
docker build -t $(DOCKER_NAMESPACE)/jaeger-$$component:${DOCKER_TAG} cmd/$$component --build-arg ARCH=$(GOARCH) ; \
echo "Finished building $$component ==============" ; \
done
docker build -t $(DOCKER_NAMESPACE)/jaeger-opentelemetry-collector:${DOCKER_TAG} -f ${OTEL_COLLECTOR_DIR}/cmd/collector/Dockerfile cmd/opentelemetry-collector/cmd/collector
docker build -t $(DOCKER_NAMESPACE)/jaeger-opentelemetry-agent:${DOCKER_TAG} -f ${OTEL_COLLECTOR_DIR}/cmd/agent/Dockerfile cmd/opentelemetry-collector/cmd/agent
docker build -t $(DOCKER_NAMESPACE)/jaeger-opentelemetry-ingester:${DOCKER_TAG} -f ${OTEL_COLLECTOR_DIR}/cmd/ingester/Dockerfile cmd/opentelemetry-collector/cmd/ingester
docker build -t $(DOCKER_NAMESPACE)/jaeger-opentelemetry-collector:${DOCKER_TAG} -f ${OTEL_COLLECTOR_DIR}/cmd/collector/Dockerfile cmd/opentelemetry-collector/cmd/collector --build-arg ARCH=$(GOARCH)
docker build -t $(DOCKER_NAMESPACE)/jaeger-opentelemetry-agent:${DOCKER_TAG} -f ${OTEL_COLLECTOR_DIR}/cmd/agent/Dockerfile cmd/opentelemetry-collector/cmd/agent --build-arg ARCH=$(GOARCH)
docker build -t $(DOCKER_NAMESPACE)/jaeger-opentelemetry-ingester:${DOCKER_TAG} -f ${OTEL_COLLECTOR_DIR}/cmd/ingester/Dockerfile cmd/opentelemetry-collector/cmd/ingester --build-arg ARCH=$(GOARCH)

.PHONY: docker-images-tracegen
docker-images-tracegen:
docker build -t $(DOCKER_NAMESPACE)/jaeger-tracegen:${DOCKER_TAG} cmd/tracegen/
docker build -t $(DOCKER_NAMESPACE)/jaeger-tracegen:${DOCKER_TAG} cmd/tracegen/ --build-arg ARCH=$(GOARCH)
@echo "Finished building jaeger-tracegen =============="

.PHONY: docker-images-only
Expand Down
4 changes: 2 additions & 2 deletions cmd/agent/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ FROM alpine:latest as certs
RUN apk add --update --no-cache ca-certificates

FROM scratch

ARG ARCH=amd64
COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt

EXPOSE 5775/udp 6831/udp 6832/udp 5778
COPY agent-linux /go/bin/
COPY agent-linux-$ARCH /go/bin/agent-linux
ENTRYPOINT ["/go/bin/agent-linux"]
3 changes: 2 additions & 1 deletion cmd/all-in-one/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ FROM alpine:latest as certs
RUN apk add --update --no-cache ca-certificates

FROM scratch
ARG ARCH=amd64

COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt

Expand All @@ -26,7 +27,7 @@ EXPOSE 14250
# Web HTTP
EXPOSE 16686

COPY all-in-one-linux /go/bin/
COPY all-in-one-linux-$ARCH /go/bin/all-in-one-linux
COPY sampling_strategies.json /etc/jaeger/

VOLUME ["/tmp"]
Expand Down
4 changes: 2 additions & 2 deletions cmd/collector/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ FROM alpine:latest as certs
RUN apk add --update --no-cache ca-certificates

FROM scratch

ARG ARCH=amd64
COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt

EXPOSE 14250
COPY collector-linux /go/bin/
COPY collector-linux-$ARCH /go/bin/collector-linux
ENTRYPOINT ["/go/bin/collector-linux"]
4 changes: 2 additions & 2 deletions cmd/ingester/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ FROM alpine:latest as certs
RUN apk add --update --no-cache ca-certificates

FROM scratch

ARG ARCH=amd64
COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt

EXPOSE 14270
EXPOSE 14271
COPY ingester-linux /go/bin/
COPY ingester-linux-$ARCH /go/bin/ingester-linux
ENTRYPOINT ["/go/bin/ingester-linux"]
4 changes: 3 additions & 1 deletion cmd/opentelemetry-collector/cmd/agent/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@ FROM alpine:latest as certs
RUN apk add --update --no-cache ca-certificates

FROM scratch
ARG ARCH=amd64

COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt

COPY opentelemetry-agent-linux /go/bin/
COPY opentelemetry-agent-linux-$ARCH /go/bin/opentelemetry-agent-linux
ENTRYPOINT ["/go/bin/opentelemetry-agent-linux"]
3 changes: 2 additions & 1 deletion cmd/opentelemetry-collector/cmd/collector/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@ FROM alpine:latest as certs
RUN apk add --update --no-cache ca-certificates

FROM scratch
ARG ARCH=amd64
COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt

COPY opentelemetry-collector-linux /go/bin/
COPY opentelemetry-collector-linux-$ARCH /go/bin/opentelemetry-collector-linux
ENTRYPOINT ["/go/bin/opentelemetry-collector-linux"]
4 changes: 3 additions & 1 deletion cmd/opentelemetry-collector/cmd/ingester/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@ FROM alpine:latest as certs
RUN apk add --update --no-cache ca-certificates

FROM scratch
ARG ARCH=amd64

COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt

COPY opentelemetry-ingester-linux /go/bin/
COPY opentelemetry-ingester-linux-$ARCH /go/bin/opentelemetry-ingester-linux
ENTRYPOINT ["/go/bin/opentelemetry-ingester-linux"]
3 changes: 2 additions & 1 deletion cmd/query/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ FROM alpine:latest as certs
RUN apk add --update --no-cache ca-certificates

FROM scratch
ARG ARCH=amd64

COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt

EXPOSE 16686
COPY query-linux /go/bin/
COPY query-linux-$ARCH /go/bin/query-linux

ENTRYPOINT ["/go/bin/query-linux"]
3 changes: 2 additions & 1 deletion cmd/tracegen/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
FROM scratch
ARG ARCH=amd64

COPY tracegen-linux /go/bin/
COPY tracegen-linux-$ARCH /go/bin/tracegen-linux
ENTRYPOINT ["/go/bin/tracegen-linux"]
3 changes: 2 additions & 1 deletion examples/hotrod/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
FROM scratch
ARG ARCH=amd64
EXPOSE 8080 8081 8082 8083
COPY hotrod-linux /go/bin/
COPY hotrod-linux-$ARCH /go/bin/hotrod-linux
ENTRYPOINT ["/go/bin/hotrod-linux"]
CMD ["all"]
8 changes: 6 additions & 2 deletions scripts/travis/build-all-in-one-image.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,21 @@
set -e

BRANCH=${BRANCH:?'missing BRANCH env var'}
# Set default GOARCH variable to the host GOARCH, the target architecture can
# be overrided by passing architecture value to the script:
# `GOARCH=<target arch> ./scripts/travis/build-all-in-one-image.sh`.
GOARCH=${GOARCH:-$(go env GOARCH)}

source ~/.nvm/nvm.sh
nvm use 10
make build-ui

set -x

make build-all-in-one GOOS=linux
make build-all-in-one GOOS=linux GOARCH=$GOARCH

export REPO=jaegertracing/all-in-one
docker build -f cmd/all-in-one/Dockerfile -t $REPO:latest cmd/all-in-one
docker build -f cmd/all-in-one/Dockerfile -t $REPO:latest cmd/all-in-one --build-arg ARCH=$GOARCH
export CID=$(docker run -d -p 16686:16686 -p 5778:5778 $REPO:latest)

set +e
Expand Down
4 changes: 3 additions & 1 deletion scripts/travis/es-integration-test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

set -e

GOARCH=$(go env GOARCH)

run_integration_test() {
ES_VERSION=$1
docker pull docker.elastic.co/elasticsearch/elasticsearch:${ES_VERSION}
Expand All @@ -22,7 +24,7 @@ make build-crossdock-ui-placeholder
GOOS=linux make build-query

make test-compile-es-scripts
SPAN_STORAGE_TYPE=elasticsearch ./cmd/query/query-linux --es.server-urls=http://127.0.0.1:9200 --es.tls=false --es.version=7 --query.bearer-token-propagation=true &
SPAN_STORAGE_TYPE=elasticsearch ./cmd/query/query-linux-$GOARCH --es.server-urls=http://127.0.0.1:9200 --es.tls=false --es.version=7 --query.bearer-token-propagation=true &
PID=$(echo $!)
make token-propagation-integration-test
kill -9 ${PID}
13 changes: 5 additions & 8 deletions scripts/travis/package-deploy.sh
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,7 @@ function package {
local PLATFORM=$1
local FILE_EXTENSION=$2
# script start
if [ "$PLATFORM" == "linux-s390x" ]; then
local PACKAGE_STAGING_DIR=jaeger-$VERSION-$PLATFORM
else
local PACKAGE_STAGING_DIR=jaeger-$VERSION-$PLATFORM-amd64
fi
local PACKAGE_STAGING_DIR=jaeger-$VERSION-$PLATFORM

mkdir $PACKAGE_STAGING_DIR

Expand Down Expand Up @@ -67,7 +63,8 @@ rm -rf deploy $DEPLOY_STAGING_DIR
mkdir deploy
mkdir $DEPLOY_STAGING_DIR

package linux
package darwin
package windows .exe
package linux-amd64
package darwin-amd64
package windows-amd64 .exe
package linux-s390x
package linux-arm64