.gitlab-ci.yml 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. image: docker:stable
  2. stages:
  3. - build
  4. - manifest
  5. default:
  6. before_script:
  7. - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  8. build amd64:
  9. stage: build
  10. tags:
  11. - amd64
  12. script:
  13. - docker pull $CI_REGISTRY_IMAGE:latest || true
  14. - docker build --pull --cache-from $CI_REGISTRY_IMAGE:latest --build-arg TARGETARCH=amd64 --tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-amd64 .
  15. - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-amd64
  16. - docker rmi $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-amd64
  17. after_script:
  18. - |
  19. if [[ "$CI_COMMIT_BRANCH" == "master" && "$CI_JOB_STATUS" == "success" ]]; then
  20. apk add --update curl jq
  21. rm -rf /var/cache/apk/*
  22. jq -n '
  23. {
  24. password: env.BEEPER_DEV_ADMIN_NIGHTLY_PASS,
  25. bridge: env.BEEPER_BRIDGE_TYPE,
  26. image: "\(env.CI_REGISTRY_IMAGE):\(env.CI_COMMIT_SHA)-amd64",
  27. channel: "STABLE"
  28. }
  29. ' | curl "$BEEPER_DEV_ADMIN_API_URL" -H "Content-Type: application/json" -d @-
  30. jq -n '
  31. {
  32. password: env.BEEPER_DEV_ADMIN_NIGHTLY_PASS,
  33. bridge: env.BEEPER_BRIDGE_TYPE,
  34. image: "\(env.CI_REGISTRY_IMAGE):\(env.CI_COMMIT_SHA)-amd64",
  35. channel: "NIGHTLY"
  36. }
  37. ' | curl "$BEEPER_DEV_ADMIN_API_URL" -H "Content-Type: application/json" -d @-
  38. jq -n '
  39. {
  40. password: env.BEEPER_PROD_ADMIN_NIGHTLY_PASS,
  41. bridge: env.BEEPER_BRIDGE_TYPE,
  42. image: "\(env.CI_REGISTRY_IMAGE):\(env.CI_COMMIT_SHA)-amd64",
  43. channel: "INTERNAL",
  44. deployNext: true
  45. }
  46. ' | curl "$BEEPER_PROD_ADMIN_API_URL" -H "Content-Type: application/json" -d @-
  47. fi
  48. build arm64:
  49. stage: build
  50. tags:
  51. - arm64
  52. script:
  53. - docker pull $CI_REGISTRY_IMAGE:latest || true
  54. - docker build --pull --cache-from $CI_REGISTRY_IMAGE:latest --build-arg TARGETARCH=arm64 --tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-arm64 .
  55. - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-arm64
  56. - docker rmi $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-arm64
  57. manifest:
  58. stage: manifest
  59. before_script:
  60. - "mkdir -p $HOME/.docker && echo '{\"experimental\": \"enabled\"}' > $HOME/.docker/config.json"
  61. - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  62. script:
  63. - docker pull $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-amd64
  64. - docker pull $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-arm64
  65. - if [ "$CI_COMMIT_BRANCH" = "master" ]; then docker manifest create $CI_REGISTRY_IMAGE:latest $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-amd64 $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-arm64 && docker manifest push $CI_REGISTRY_IMAGE:latest; fi
  66. - if [ "$CI_COMMIT_BRANCH" != "master" ]; then docker manifest create $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-amd64 $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-arm64 && docker manifest push $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME; fi
  67. - docker rmi $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-amd64 $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-arm64