Skip to main content

CI/CD интеграци

GitLab Container Registry-ийг CI/CD pipeline-д нэгтгэх заавар. Энэ хэсэгт git-registry.techpartners.asia registry ашиглан Docker image-үүдийг бүрдүүлж, push хийх үйл явцыг тайлбарлана.


Үндсэн зарчим

GitLab CI/CD pipeline дотор:

  • dev branch: dev tag-аар image push хийнэ
  • main/master branch: latest болон commit SHA tag-аар image push хийнэ
  • Registry хаяг: git-registry.techpartners.asia

CI/CD тохиргоо

1. Variables тохиргоо

.gitlab-ci.yml файлд registry болон image-ийн мэдээллийг variables-д тодорхойлно:

variables:
REGISTRY_URL: 'git-registry.techpartners.asia'
IMAGE_NAME: 'git-registry.techpartners.asia/medtech/mrp/api'

Тайлбар:

  • REGISTRY_URL: Registry-ийн үндсэн хаяг
  • IMAGE_NAME: Таны project-ийн image-ийн бүтэн хаяг (namespace, project нэртэй)

2. Dev environment pipeline

Dev branch дээр ажиллах pipeline жишээ:

dev:
only:
- dev
stage: dev
script:
# 1. Environment файл хуулах
- cp $ENV_DEV "$(pwd)/.env"
# 2. Registry-д нэвтрэх
- echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin "$REGISTRY_URL"
# 3. Docker image build хийх
- docker build -t "$IMAGE_NAME:dev" -t mrp-api:dev .
# 4. Registry-д push хийх
- docker push "$IMAGE_NAME:dev"
# 5. Хуучин container устгах
- docker ps --quiet --filter="name=mrp-api-dev" | xargs --no-run-if-empty docker rm -f
# 6. Шинэ container ажиллуулах
- docker run -dt -p 7470:8080 --add-host=prodvpn-new.golomtbank.com:10.20.30.1 --restart always --name mrp-api-dev mrp-api:dev
tags:
- medtech-deploy

Үндсэн алхамууд:

  1. Environment файл (.env) хуулах
  2. Registry-д нэвтрэх
  3. Docker image бүрдүүлэх, dev tag өгөх
  4. Registry-д image push хийх
  5. Хуучин container-ийг устгах
  6. Шинэ container ажиллуулах

3. Production environment pipeline

Main branch дээр manual байдлаар ажиллах pipeline жишээ:

prod:
only:
- main
stage: prod
when: manual
script:
# 1. Production environment файл хуулах
- cp $ENV "$(pwd)/.env"
# 2. Registry-д нэвтрэх
- echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin "$REGISTRY_URL"
# 3. Docker image build хийх (олон tag-тай)
- docker build -t "$IMAGE_NAME:latest" -t "$IMAGE_NAME:$CI_COMMIT_SHORT_SHA" -t mrp-api .
# 4. Registry-д push хийх
- docker push "$IMAGE_NAME:latest"
- docker push "$IMAGE_NAME:$CI_COMMIT_SHORT_SHA"
# 5. Хуучин container устгах
- docker ps --quiet --filter="name=mrp-api-prod" | xargs --no-run-if-empty docker rm -f
# 6. Шинэ container ажиллуулах
- docker run -dt -p 6060:8080 --add-host=prodvpn-new.golomtbank.com:10.20.30.1 --restart always --name mrp-api-prod mrp-api
tags:
- medtech-deploy

Production-ий онцлог:

  • when: manual: Manual ажиллуулна (автомат биш)
  • Олон tag: latest, commit SHA ($CI_COMMIT_SHORT_SHA)

Бүтэн .gitlab-ci.yml жишээ

variables:
REGISTRY_URL: 'git-registry.techpartners.asia'
IMAGE_NAME: 'git-registry.techpartners.asia/medtech/mrp/api'

stages:
- dev
- prod

dev:
only:
- dev
stage: dev
script:
- cp $ENV_DEV "$(pwd)/.env"
- echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin "$REGISTRY_URL"
- docker build -t "$IMAGE_NAME:dev" -t mrp-api:dev .
- docker push "$IMAGE_NAME:dev"
- docker ps --quiet --filter="name=mrp-api-dev" | xargs --no-run-if-empty docker rm -f
- docker run -dt -p 7470:8080 --add-host=prodvpn-new.golomtbank.com:10.20.30.1 --restart always --name mrp-api-dev mrp-api:dev
tags:
- medtech-deploy

prod:
only:
- main
stage: prod
when: manual
script:
- cp $ENV "$(pwd)/.env"
- echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin "$REGISTRY_URL"
- docker build -t "$IMAGE_NAME:latest" -t "$IMAGE_NAME:$CI_COMMIT_SHORT_SHA" -t mrp-api .
- docker push "$IMAGE_NAME:latest"
- docker push "$IMAGE_NAME:$CI_COMMIT_SHORT_SHA"
- docker ps --quiet --filter="name=mrp-api-prod" | xargs --no-run-if-empty docker rm -f
- docker run -dt -p 6060:8080 --add-host=prodvpn-new.golomtbank.com:10.20.30.1 --restart always --name mrp-api-prod mrp-api
tags:
- medtech-deploy

Pipeline амжилттай ажиллаж дууссаны дараа Container registry дараах байдлаар харагдана: Container Registry

Registry дотор: Registry tag


Image-ийг local татах

Registry-аас image татах жишээ:

# 1. Registry-д нэвтрэх
docker login git-registry.techpartners.asia

# 2. Image татах
docker pull git-registry.techpartners.asia/medtech/mrp/api:dev
docker pull git-registry.techpartners.asia/medtech/mrp/api:latest
docker pull git-registry.techpartners.asia/medtech/mrp/api:abc1234

# 3. Ажиллуулах
docker run -p 8080:8080 git-registry.techpartners.asia/medtech/mrp/api:latest

Нэмэлт материал