Allow building aarch64 images 31/44931/2
authorCédric Ollivier <cedric.ollivier@orange.com>
Wed, 11 Oct 2017 03:29:11 +0000 (05:29 +0200)
committerCédric Ollivier <cedric.ollivier@orange.com>
Thu, 12 Oct 2017 14:34:50 +0000 (16:34 +0200)
It must be noted that Docker automated build cannot create these
images as the prerequisites are unmet to cross-compile [1].

It also publishes a travis config file [2].

[1] https://www.kernel.org/doc/html/v4.11/admin-guide/binfmt-misc.html
[2] https://travis-ci.org/collivier/functest/builds/286932633

Conflicts:
    build.sh

Change-Id: I11fdef410cc40989132205a098410175f789fdef
Signed-off-by: Cédric Ollivier <cedric.ollivier@orange.com>
(cherry picked from commit ed777b643b05fbb71851df0b883483e0bcaa4ac1)

.travis.yml [new file with mode: 0644]
build.sh

diff --git a/.travis.yml b/.travis.yml
new file mode 100644 (file)
index 0000000..4472885
--- /dev/null
@@ -0,0 +1,133 @@
+sudo: required
+language: bash
+services: docker
+language: generic
+
+before_script:
+  - sudo apt-get -y install qemu-user-static
+  - sudo -E docker login -u="${DOCKER_USERNAME}" -p="${DOCKER_PASSWORD}"
+  - (cd .. && git clone https://github.com/estesp/manifest-tool)
+  - (cd ../manifest-tool && sudo -E make && sudo -E make install)
+
+jobs:
+  include:
+    - stage: build functest-core images
+      script: sudo -E bash build.sh
+      env:
+        - repo="${DOCKER_USERNAME}"
+        - x86_64_dirs=""
+        - aarch64_dirs="docker/core"
+    - script: sudo -E bash build.sh
+      env:
+        - repo="${DOCKER_USERNAME}"
+        - x86_64_dirs="docker/core"
+        - aarch64_dirs=""
+    - stage: publish functest-core manifests
+      script: >
+        sudo manifest-tool push from-args \
+          --platforms linux/amd64,linux/arm64 \
+          --template ${DOCKER_USERNAME}/functest-core:x86_64-euphrates \
+          --template ${DOCKER_USERNAME}/functest-core:aarch64-euphrates \
+          --target ${DOCKER_USERNAME}/functest-core:euphrates
+    - stage: build all functest images
+      script: sudo -E bash build.sh
+      env:
+        - repo="${DOCKER_USERNAME}"
+        - x86_64_dirs=""
+        - aarch64_dirs="docker/healthcheck"
+    - script: sudo -E bash build.sh
+      env:
+        - repo="${DOCKER_USERNAME}"
+        - x86_64_dirs=""
+        - aarch64_dirs="docker/smoke"
+    - script: sudo -E bash build.sh
+      env:
+        - repo="${DOCKER_USERNAME}"
+        - x86_64_dirs=""
+        - aarch64_dirs="docker/features"
+    - script: sudo -E bash build.sh
+      env:
+        - repo="${DOCKER_USERNAME}"
+        - x86_64_dirs=""
+        - aarch64_dirs="docker/components"
+    - script: sudo -E bash build.sh
+      env:
+        - repo="${DOCKER_USERNAME}"
+        - x86_64_dirs="docker/healthcheck"
+        - aarch64_dirs=""
+    - script: sudo -E bash build.sh
+      env:
+        - repo="${DOCKER_USERNAME}"
+        - x86_64_dirs="docker/smoke"
+        - aarch64_dirs=""
+    - script: sudo -E bash build.sh
+      env:
+        - repo="${DOCKER_USERNAME}"
+        - x86_64_dirs="docker/features"
+        - aarch64_dirs=""
+    - script: sudo -E bash build.sh
+      env:
+        - repo="${DOCKER_USERNAME}"
+        - x86_64_dirs="docker/components"
+        - aarch64_dirs=""
+    - script: sudo -E bash build.sh
+      env:
+        - repo="${DOCKER_USERNAME}"
+        - x86_64_dirs="docker/vnf"
+        - aarch64_dirs=""
+    - script: sudo -E bash build.sh
+      env:
+        - repo="${DOCKER_USERNAME}"
+        - x86_64_dirs="docker/restapi"
+        - aarch64_dirs=""
+    - script: sudo -E bash build.sh
+      env:
+        - repo="${DOCKER_USERNAME}"
+        - x86_64_dirs="docker/parser"
+        - aarch64_dirs=""
+    - stage: publish all manifests
+      script: >
+        sudo manifest-tool push from-args \
+          --platforms linux/amd64,linux/arm64 \
+          --template ${DOCKER_USERNAME}/functest-healthcheck:x86_64-euphrates \
+          --template ${DOCKER_USERNAME}/functest-healthcheck:aarch64-euphrates \
+          --target ${DOCKER_USERNAME}/functest-healthcheck:euphrates
+    - script: >
+        sudo manifest-tool push from-args \
+          --platforms linux/amd64,linux/arm64 \
+          --template ${DOCKER_USERNAME}/functest-healthcheck:x86_64-euphrates \
+          --template ${DOCKER_USERNAME}/functest-healthcheck:aarch64-euphrates \
+          --target ${DOCKER_USERNAME}/functest-healthcheck:euphrates
+    - script: >
+        sudo manifest-tool push from-args \
+          --platforms linux/amd64,linux/arm64 \
+          --template ${DOCKER_USERNAME}/functest-smoke:x86_64-euphrates \
+          --template ${DOCKER_USERNAME}/functest-smoke:aarch64-euphrates \
+          --target ${DOCKER_USERNAME}/functest-smoke:euphrates
+    - script: >
+        sudo manifest-tool push from-args \
+          --platforms linux/amd64,linux/arm64 \
+          --template ${DOCKER_USERNAME}/functest-features:x86_64-euphrates \
+          --template ${DOCKER_USERNAME}/functest-features:aarch64-euphrates \
+          --target ${DOCKER_USERNAME}/functest-features:euphrates
+    - script: >
+        sudo manifest-tool push from-args \
+          --platforms linux/amd64,linux/arm64 \
+          --template ${DOCKER_USERNAME}/functest-components:x86_64-euphrates \
+          --template ${DOCKER_USERNAME}/functest-components:aarch64-euphrates \
+          --target ${DOCKER_USERNAME}/functest-components:euphrates
+    - script: >
+        sudo manifest-tool push from-args \
+          --platforms linux/amd64 \
+          --template ${DOCKER_USERNAME}/functest-vnf:x86_64-euphrates \
+          --target ${DOCKER_USERNAME}/functest-vnf:euphrates
+    - script: >
+        sudo manifest-tool push from-args \
+          --platforms linux/amd64 \
+          --template ${DOCKER_USERNAME}/functest-restapi:x86_64-euphrates \
+          --target ${DOCKER_USERNAME}/functest-restapi:euphrates
+    - script: >
+        sudo manifest-tool push from-args \
+          --platforms linux/amd64 \
+          --template ${DOCKER_USERNAME}/functest-parser:x86_64-euphrates \
+          --target ${DOCKER_USERNAME}/functest-parser:euphrates
index e4d9b6a..f16fa29 100644 (file)
--- a/build.sh
+++ b/build.sh
@@ -3,7 +3,7 @@
 set -e
 
 repo=${repo:-opnfv}
-dirs="\
+x86_64_dirs=${x86_64_dirs-"\
 docker/core \
 docker/healthcheck \
 docker/smoke \
@@ -11,14 +11,23 @@ docker/features \
 docker/components \
 docker/vnf \
 docker/parser \
-docker/restapi"
+docker/restapi"}
+aarch64_dirs=${aarch64_dirs-$(echo "${x86_64_dirs}" | sed -e "s|docker/vnf||" \
+    -e "s|docker/restapi||")}
 
-(cd docker && docker build -t "${repo}/functest" .)
-docker push "${repo}/functest:euphrates"
+find . -name Dockerfile -exec sed -i -e "s|opnfv/functest-core|${repo}/functest-core:x86_64-euphrates|g" {} +
+for dir in ${x86_64_dirs}; do
+    (cd "${dir}" && docker build -t "${repo}/functest-${dir##**/}:x86_64-euphrates" .)
+    docker push "${repo}/functest-${dir##**/}:x86_64-euphrates"
+done
+find . -name Dockerfile -exec git checkout {} +
 
-for dir in ${dirs}; do
-    (cd ${dir} && docker build -t "${repo}/functest-${dir##**/}:euphrates" .)
-    docker push "${repo}/functest-${dir##**/}:euphrates"
+find . -name Dockerfile -exec sed -i -e "s|alpine:3.6|multiarch/alpine:aarch64-v3.6|g" {} +
+find . -name Dockerfile -exec sed -i -e "s|opnfv/functest-core|${repo}/functest-core:aarch64-euphrates|g" {} +
+for dir in ${aarch64_dirs}; do
+    (cd "${dir}" && docker build -t "${repo}/functest-${dir##**/}:aarch64-euphrates" .)
+    docker push "${repo}/functest-${dir##**/}:aarch64-euphrates"
 done
+find . -name Dockerfile -exec git checkout {} +
 
 exit $?