diff --git a/gitlab-ci-config/check-packages.yml b/gitlab-ci-config/check-packages.yml index 87f365bfcbc581fd23daa54965b9f310a72edd0d_Z2l0bGFiLWNpLWNvbmZpZy9jaGVjay1wYWNrYWdlcy55bWw=..18488e5fb5084cfe2d8fa6bb1b010b8ae5ff3d38_Z2l0bGFiLWNpLWNvbmZpZy9jaGVjay1wYWNrYWdlcy55bWw= 100644 --- a/gitlab-ci-config/check-packages.yml +++ b/gitlab-ci-config/check-packages.yml @@ -1,5 +1,6 @@ stages: - package + - image variables: # BUILDER_IMAGE_REGISTRY is incorrectly passed from parent pipeline due to @@ -204,3 +205,18 @@ extends: - .zypper-install - .ee-tag-only + +Docker: + stage: image + needs: [] + variables: + DOCKER_DRIVER: overlay2 + DOCKER_HOST: tcp://docker:2375 + services: + - name: docker:23.0.5-dind + alias: localhost + image: "${BUILDER_IMAGE_REGISTRY}/distribution_ci_tools:latest" + script: + - bash scripts/ci/deploy_docker.sh + tags: !reference [.distribution-amd64-tags] + retry: 2 diff --git a/gitlab-ci-config/dev-gitlab-org.yml b/gitlab-ci-config/dev-gitlab-org.yml index 87f365bfcbc581fd23daa54965b9f310a72edd0d_Z2l0bGFiLWNpLWNvbmZpZy9kZXYtZ2l0bGFiLW9yZy55bWw=..18488e5fb5084cfe2d8fa6bb1b010b8ae5ff3d38_Z2l0bGFiLWNpLWNvbmZpZy9kZXYtZ2l0bGFiLW9yZy55bWw= 100644 --- a/gitlab-ci-config/dev-gitlab-org.yml +++ b/gitlab-ci-config/dev-gitlab-org.yml @@ -1149,6 +1149,7 @@ deploy_instance: "true" package_repository: "pre-release" package_repo_token: "${PRE_RELEASE_REPO_TOKEN}:@" + image_registry: "${CI_REGISTRY_IMAGE}" # Check if the packages are available from public repositories check-packages-availability: diff --git a/scripts/ci/deploy_docker.sh b/scripts/ci/deploy_docker.sh new file mode 100644 index 0000000000000000000000000000000000000000..18488e5fb5084cfe2d8fa6bb1b010b8ae5ff3d38_c2NyaXB0cy9jaS9kZXBsb3lfZG9ja2VyLnNo --- /dev/null +++ b/scripts/ci/deploy_docker.sh @@ -0,0 +1,66 @@ +#!/bin/env bash + +set -eo pipefail + +image_registry=${image_registry:-gitlab} + +if [ "${image_registry}" = "${CI_REGISTRY_IMAGE}" ] ; then + docker login -u gitlab-ci-token -p ${CI_JOB_TOKEN} ${CI_REGISTRY} +fi + +# Split the result from rake task at = and assign to two variables image_name +# and image_tag +IFS== read -r image_name image_tag <<< $(bundle exec rake build:package:name_version 2>&1 | tail -n1) + +GITLAB_HOME=/tmp/gitlab +mkdir -p $GITLAB_HOME + +docker run --detach \ + --hostname gitlab.example.com \ + --env GITLAB_OMNIBUS_CONFIG="external_url 'http://gitlab.example.com'" \ + --publish 443:443 --publish 80:80 --publish 2222:22 \ + --name gitlab \ + --restart always \ + --volume $GITLAB_HOME/config:/etc/gitlab \ + --volume $GITLAB_HOME/logs:/var/log/gitlab \ + --volume $GITLAB_HOME/data:/var/opt/gitlab \ + --shm-size 256m \ + ${image_registry}/${image_name}:${image_tag} + +if [ "${deploy_instance}" != "true" ]; then + exit 0; +fi + +function get_health { + state=$(docker inspect -f '{{ .State.Health.Status }}' gitlab) + return_code=$? + if [ ! ${return_code} -eq 0 ]; then + echo "Getting health status failed." + exit 1 + fi + + if [ "${state}" = "healthy" ]; then + return 0 + else + return 1 + fi +} + +# Do not fail on the `return 1` above. +set +e + +echo "Wait for GitLab to be healthy" +for i in `seq 600`; do + get_health + state=$? + + if [ ${state} -eq 0 ]; then + echo "GitLab is running successfully." + exit 0 + fi + + sleep 1 +done + +echo "GitLab not healthy after 10 minutes. Health status returned: $(docker inspect -f '{{ .State.Health.Status }}' gitlab)" +exit 1