فهرست منبع

Merge pull request #7714 from glevand/for-merge-cross

Add multi arch release support
Xiang Li 8 سال پیش
والد
کامیت
a9087ee659
7فایلهای تغییر یافته به همراه45 افزوده شده و 13 حذف شده
  1. 11 0
      Dockerfile-release.arm64
  2. 2 2
      Dockerfile-release.ppc64le
  3. 2 1
      Documentation/v2/dev/release.md
  4. 10 1
      scripts/build-aci
  5. 1 0
      scripts/build-binary
  6. 8 4
      scripts/build-docker
  7. 11 5
      scripts/release.sh

+ 11 - 0
Dockerfile-release.arm64

@@ -0,0 +1,11 @@
+FROM aarch64/ubuntu:16.04
+
+ADD etcd /usr/local/bin/
+ADD etcdctl /usr/local/bin/
+ADD var/etcd /var/etcd
+ADD var/lib/etcd /var/lib/etcd
+
+EXPOSE 2379 2380
+
+# Define default command.
+CMD ["/usr/local/bin/etcd"]

+ 2 - 2
Dockerfile-release.ppc64le

@@ -2,8 +2,8 @@ FROM ppc64le/ubuntu:16.04
 
 ADD etcd /usr/local/bin/
 ADD etcdctl /usr/local/bin/
-RUN mkdir -p /var/etcd/
-RUN mkdir -p /var/lib/etcd/
+ADD var/etcd /var/etcd
+ADD var/lib/etcd /var/lib/etcd
 
 EXPOSE 2379 2380
 

+ 2 - 1
Documentation/v2/dev/release.md

@@ -70,7 +70,7 @@ cd release
 # personal GPG is okay for now
 for i in etcd-*{.zip,.tar.gz}; do gpg --sign ${i}; done
 # use `CoreOS ACI Builder <release@coreos.com>` secret key
-gpg -u 88182190 -a --output etcd-${VERSION}-linux-amd64.aci.asc --detach-sig etcd-${VERSION}-linux-amd64.aci
+for aci in etcd-${VERSION}.*.aci; do gpg -u 88182190 -a --output ${aci}.asc --detach-sig ${aci}; done
 ```
 
 ## Publish Release Page in GitHub
@@ -88,6 +88,7 @@ gpg -u 88182190 -a --output etcd-${VERSION}-linux-amd64.aci.asc --detach-sig etc
 ```
 docker login quay.io
 docker push quay.io/coreos/etcd:${VERSION}
+docker push quay.io/coreos/etcd:${VERSION}-${arch}
 ```
 
 - Add `latest` tag to the new image on [quay.io](https://quay.io/repository/coreos/etcd?tag=latest&tab=tags) if this is a stable release.

+ 10 - 1
scripts/build-aci

@@ -11,6 +11,13 @@ ACBUILD=${ACBUILD:-acbuild}
 
 VERSION=$1
 
+go2aci() {
+	case "${1}" in
+		"arm64") echo "aarch64";;
+		*) echo "${1}";;
+	esac
+}
+
 if ! command -v $ACBUILD >/dev/null; then
     echo "acbuild ($ACBUILD) is not executable"
     exit 1
@@ -63,6 +70,8 @@ acbuild --debug port add peer tcp 2380
 
 acbuild --debug copy "$TMPHOSTS" /etc/hosts
 
+acbuild --debug label add arch $(go2aci ${GOARCH})
+
 # mkdir default data-dir
 mkdir -p .acbuild/currentaci/rootfs/var/lib/etcd
 
@@ -70,4 +79,4 @@ mkdir -p .acbuild/currentaci/rootfs/var/lib/etcd
 ln -s ./usr/local/bin/etcd .acbuild/currentaci/rootfs/etcd
 ln -s ./usr/local/bin/etcdctl .acbuild/currentaci/rootfs/etcdctl
 
-acbuild --debug write --overwrite $BUILDDIR/etcd-${1}-linux-amd64.aci
+acbuild --debug write --overwrite $BUILDDIR/etcd-${1}-linux-${GOARCH}.aci

+ 1 - 0
scripts/build-binary

@@ -62,6 +62,7 @@ function main {
 		TARGET_ARCHS=("amd64")
 
 		if [ ${GOOS} == "linux" ]; then
+			TARGET_ARCHS+=("arm64")
 			TARGET_ARCHS+=("ppc64le")
 		fi
 

+ 8 - 4
scripts/build-docker

@@ -1,13 +1,16 @@
 #!/usr/bin/env bash
 
+set -e
+
 if [ "$#" -ne 1 ]; then
 	echo "Usage: $0 VERSION" >&2
 	exit 1
 fi
 
+VERSION=${1}
 ARCH=$(go env GOARCH)
 DOCKERFILE="Dockerfile-release"
-TAG="quay.io/coreos/etcd"
+: ${TAG:="quay.io/coreos/etcd"}
 
 if [ -z ${BINARYDIR} ]; then
 	RELEASE="etcd-${1}"-`go env GOOS`-`go env GOARCH`
@@ -24,7 +27,7 @@ fi
 
 if [ ${ARCH} != "amd64" ]; then
 	DOCKERFILE+=".${ARCH}"
-	TAG+="-${ARCH}"
+	VERSION+="-${ARCH}"
 fi
 
 BINARYDIR=${BINARYDIR:-.}
@@ -32,9 +35,10 @@ BUILDDIR=${BUILDDIR:-.}
 
 IMAGEDIR=${BUILDDIR}/image-docker
 
-mkdir -p ${IMAGEDIR}
+mkdir -p ${IMAGEDIR}/var/etcd
+mkdir -p ${IMAGEDIR}/var/lib/etcd
 cp ${BINARYDIR}/etcd ${BINARYDIR}/etcdctl ${IMAGEDIR}
 
 cat ./${DOCKERFILE} > ${IMAGEDIR}/Dockerfile
 
-docker build -t ${TAG}:${1} ${IMAGEDIR}
+docker build -t ${TAG}:${VERSION} ${IMAGEDIR}

+ 11 - 5
scripts/release.sh

@@ -5,7 +5,6 @@
 #
 set -e
 
-ARCH=$(go env GOARCH)
 VERSION=$1
 if [ -z "${VERSION}" ]; then
 	echo "Usage: ${0} VERSION" >> /dev/stderr
@@ -27,8 +26,15 @@ ETCD_ROOT=$(dirname "${BASH_SOURCE}")/..
 pushd ${ETCD_ROOT} >/dev/null
 	echo Building etcd binary...
 	./scripts/build-binary ${VERSION}
-	echo Building aci image...
-	BINARYDIR=release/etcd-${VERSION}-linux-amd64 BUILDDIR=release ./scripts/build-aci ${VERSION}
-	echo Building docker image...
-	BINARYDIR=release/etcd-${VERSION}-linux-${ARCH} BUILDDIR=release ./scripts/build-docker ${VERSION}
+
+	# ppc64le not yet supported by acbuild.
+	for TARGET_ARCH in "amd64" "arm64"; do
+		echo Building ${TARGET_ARCH} aci image...
+		GOARCH=${TARGET_ARCH} BINARYDIR=release/etcd-${VERSION}-linux-${TARGET_ARCH} BUILDDIR=release ./scripts/build-aci ${VERSION}
+	done
+
+	for TARGET_ARCH in "amd64" "arm64" "ppc64le"; do
+		echo Building ${TARGET_ARCH} docker image...
+		GOARCH=${TARGET_ARCH} BINARYDIR=release/etcd-${VERSION}-linux-${TARGET_ARCH} BUILDDIR=release ./scripts/build-docker ${VERSION}
+	done
 popd >/dev/null