From 4819691f91e2d4e0df750cfbfdc3afc5c79f0f7c Mon Sep 17 00:00:00 2001
From: Alexander Kulikov <alexander.kulikov@vereign.com>
Date: Fri, 11 Jan 2019 08:47:03 +0000
Subject: [PATCH] multiarch support refactoring

---
 .gitlab-ci.yml | 71 ++++++++++++++++++++++++++++++++------------------
 1 file changed, 45 insertions(+), 26 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index f1cc8ae..e8f5b8e 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,37 +1,56 @@
-image: docker
+image: docker:latest
+services:
+- docker:dind
+
 stages:
 - build
+- manifest
 - deploy
-variables:
-  TEST_IMAGE: registry.vereign.com/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME:$CI_COMMIT_REF_NAME
-  TEST_IMAGE_SHA: registry.vereign.com/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME:$CI_COMMIT_SHA
-  RELEASE_IMAGE: registry.vereign.com/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME:latest
-build:
+before_script:
+  - mkdir ~/.docker
+  - "echo '{ \"experimental\": \"enabled\" }' > ~/.docker/config.json"
+  - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
+ppc64le:
+  variables:
+    IMAGE: $CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/$CI_JOB_NAME:$CI_COMMIT_REF_NAME
+    IMAGE_SHA: $CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/$CI_JOB_NAME:$CI_COMMIT_SHA
   stage: build
   tags:
-    - hv2
-  services:
-    - docker:dind
-  before_script:
-    - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.vereign.com
+    - ppc64le
   script:
-    - docker build --build-arg CI_COMMIT_SHA=$CI_COMMIT_SHA --build-arg CI_COMMIT_REF_NAME=$CI_COMMIT_REF_NAME --build-arg CI_PROJECT_NAME=$CI_PROJECT_NAME --build-arg CI_JOB_TOKEN=$CI_JOB_TOKEN --pull -t $TEST_IMAGE -f Dockerfile .
-    - docker push $TEST_IMAGE
-    - docker tag $TEST_IMAGE $TEST_IMAGE_SHA
-    - docker push $TEST_IMAGE_SHA
-build-x86:
+    - docker build --build-arg CI_COMMIT_SHA=$CI_COMMIT_SHA --build-arg CI_COMMIT_REF_NAME=$CI_COMMIT_REF_NAME --build-arg CI_PROJECT_NAME=$CI_PROJECT_NAME --build-arg CI_JOB_TOKEN=$CI_JOB_TOKEN --pull -t $IMAGE -f Dockerfile .
+    - docker push $IMAGE
+    - docker tag $IMAGE $IMAGE_SHA
+    - docker push $IMAGE_SHA
+amd64:
+  variables:
+    IMAGE: $CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/$CI_JOB_NAME:$CI_COMMIT_REF_NAME
+    IMAGE_SHA: $CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/$CI_JOB_NAME:$CI_COMMIT_SHA
   stage: build
   tags:
-    - dell
-  services:
-    - docker:dind
-  before_script:
-    - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.vereign.com
+    - amd64
+  script:
+    - docker build --build-arg CI_COMMIT_SHA=$CI_COMMIT_SHA --build-arg CI_COMMIT_REF_NAME=$CI_COMMIT_REF_NAME --build-arg CI_PROJECT_NAME=$CI_PROJECT_NAME --build-arg CI_JOB_TOKEN=$CI_JOB_TOKEN --pull -t $IMAGE -f Dockerfile .
+    - docker push $IMAGE
+    - docker tag $IMAGE $IMAGE_SHA
+    - docker push $IMAGE_SHA
+manifest:
+  variables:
+    IMAGE: $CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME:$CI_COMMIT_REF_NAME
+    IMAGE_SHA: $CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME:$CI_COMMIT_SHA
+    IMAGE_amd64: $CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/amd64:$CI_COMMIT_REF_NAME
+    IMAGE_SHA_amd64: $CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/amd64:$CI_COMMIT_SHA
+    IMAGE_ppc64le: $CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/ppc64le:$CI_COMMIT_REF_NAME
+    IMAGE_SHA_ppc64le: $CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/ppc64le:$CI_COMMIT_SHA
+  stage: manifest
+  tags:
+    - amd64
   script:
-    - docker build --build-arg CI_COMMIT_SHA=$CI_COMMIT_SHA --build-arg CI_COMMIT_REF_NAME=$CI_COMMIT_REF_NAME --build-arg CI_PROJECT_NAME=$CI_PROJECT_NAME --build-arg CI_JOB_TOKEN=$CI_JOB_TOKEN --pull -t $TEST_IMAGE-x86 -f Dockerfile-x86 .
-    - docker push $TEST_IMAGE-x86
-    - docker tag $TEST_IMAGE-x86 $TEST_IMAGE_SHA-x86
-    - docker push $TEST_IMAGE_SHA-x86
+    - docker manifest create $IMAGE $IMAGE_amd64 $IMAGE_ppc64le 
+    - docker manifest push $IMAGE
+    - docker manifest create $IMAGE_SHA $IMAGE_SHA_amd64 $IMAGE_SHA_ppc64le 
+    - docker manifest push $IMAGE_SHA
+
 deploy:
   stage: deploy
   tags:
@@ -40,4 +59,4 @@ deploy:
     - master 
   script:
     - apk add curl
-    - curl -X POST -F token=$TRIGGER_TOKEN -F ref=integration2 -F variables[branch]=master https://code.vereign.com/api/v4/projects/59/trigger/pipeline
+    - for ref in $DEPLOYENVS; do curl -X POST -F token=$TRIGGER_TOKEN -F ref=$ref -F variables[branch]=master https://code.vereign.com/api/v4/projects/59/trigger/pipeline; done
-- 
GitLab