.docker_info: &docker-info - until docker info; do sleep 1; done .docker_login_registry: &docker-login-registry - docker login -u $REGISTRY_USER -p $REGISTRY_PASSWORD $REGISTRY .docker_login_stdin: &docker-login-stdin - echo "$REGISTRY_PASSWORD" | docker login -u $REGISTRY_USER $REGISTRY --password-stdin .docker_login_docker_hub: &docker-login-docker-hub - echo $DOCKER_REGISTRY_TOKEN | docker login -u $DOCKER_REGISTRY_USERNAME $DOCKER_REGISTRY_PATH --password-stdin .docker_logout_docker_hub: &docker-logout-docker-hub - docker logout $DOCKER_REGISTRY_PATH .docker_build_dind: &docker-build_dind - docker build $NO_CACHE $BUILD_ARGS -f $DOCKERFILE_PATH -t $DOCKER_TAG $CONTEXT_PATH .docker_push: &docker-push - docker push $DOCKER_TAG - if [[ "${CI_COMMIT_REF_SLUG}" == "main" || "${CI_COMMIT_REF_SLUG}" == "master" ]]; then docker tag $DOCKER_TAG ${REGISTRY_IMAGE}:latest; fi - if [[ "${CI_COMMIT_REF_SLUG}" == "main" || "${CI_COMMIT_REF_SLUG}" == "master" ]]; then docker push ${REGISTRY_IMAGE}:latest; fi .docker_retag: &docker-retag - docker pull $SOURCE_IMAGE - docker tag $SOURCE_IMAGE $TARGET_IAMGE - docker push $TARGET_IAMGE .docker_build: stage: build image: ${DOCKER_IMAGE} variables: REGISTRY: $CI_REGISTRY REGISTRY_USER: $CI_REGISTRY_USER REGISTRY_PASSWORD: $CI_REGISTRY_PASSWORD REGISTRY_IMAGE: $CI_REGISTRY_IMAGE DOCKER_HOST: tcp://docker:2375 DOCKER_TLS_CERTDIR: "" CONTEXT_PATH: ${CI_PROJECT_DIR} DOCKERFILE_PATH: ${CI_PROJECT_DIR}/Dockerfile DOCKER_TAG: $REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG NO_CACHE: "--no-cache" # Можно изменить на пустую строку "", чтобы включить кэш BUILD_ARGS: "" # Можно изменить, например, на "--build-arg PROJECT_PATH=dotnet/app01 --build-arg CONFIG_FILE=dotnet/NuGet.Config" DOCKER_IMAGE: docker:latest DOCKER_IMAGE_DIND: docker:dind services: - name: ${DOCKER_IMAGE_DIND} # NOTE: The alias is key to resolving the DNS issue. # alias: docker before_script: - env | sort script: - | if [[ -n "${CI_COMMIT_TAG}" && "${CI_COMMIT_TAG}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then export DOCKER_TAG=${REGISTRY_IMAGE}:${CI_COMMIT_TAG} else export DOCKER_TAG=${REGISTRY_IMAGE}:${CI_COMMIT_REF_SLUG} fi - *docker-login-stdin - *docker-build_dind - *docker-push .docker-retag: stage: retag image: ${DOCKER_IMAGE} variables: REGISTRY: $CI_REGISTRY REGISTRY_USER: $CI_REGISTRY_USER REGISTRY_PASSWORD: $CI_REGISTRY_PASSWORD SOURCE_IMAGE: TARGET_IAMGE: DOCKER_IMAGE: docker:latest DOCKER_IMAGE_DIND: docker:dind services: - ${DOCKER_IMAGE_DIND} script: - *docker-login-stdin - *docker-retag