84 lines
2.8 KiB
YAML
84 lines
2.8 KiB
YAML
.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
|