CI/CD интеграци
GitLab Container Registry-ийг CI/CD pipeline-д нэгтгэх заавар. Энэ хэсэгт git-registry.techpartners.asia registry ашиглан Docker image-үүдийг бүрдүүлж, push хийх үйл явцыг тайлбарлана.
Үндсэн зарчим
GitLab CI/CD pipeline дотор:
- dev branch:
devtag-аар image push хийнэ - main/master branch:
latestболонcommit SHAtag-аар 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
Үндсэн алхамууд:
- Environment файл (.env) хуулах
- Registry-д нэвтрэх
- Docker image бүрдүүлэх,
devtag өгөх - Registry-д image push хийх
- Хуучин container-ийг устгах
- Шинэ 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 дараах байдлаар харагдана:

Registry дотор:

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
Cleanup Policy тохиргоо
Container Registry-ийн cleanup policy нь project эсвэл repository түвшинд тохируулна. Энэ тохиргоо нь хуучин tag-үүдийг автоматаар устгаж, хадгалах зайг хэмнэхэд тусална.
Cleanup Policy хэрхэн олох
- Project-ийн Settings хэсэг рүү орох
- Зүүн sidebar-аас Packages and registries сонгох

- Cleanup policies хэсэг рүү орох
Cleanup Policy тохиргоо
Cleanup policy-д дараах тохиргоонуудыг хийж болно:

Үндсэн тохиргоонууд:
- Enable cleanup policy: Cleanup policy-г идэвхжүүлэх/унтраах
- Run cleanup: Cleanup хэзээ ажиллах (жишээ: өдөр бүр)
- Keep these tags: Хадгалах tag-ууд
- Keep the most recent: Хамгийн сүүлийн N tag хадгалах
- Keep tags matching: Regex pattern-тай таарч байгаа tag-үүдийг хадгалах
- Remove these tags: Устгах tag-ууд
- Remove tags older than: N хоногоос эхлэн хуучин tag-үүдийг устгах
- Remove tags matching: Regex pattern-тай таарч байгаа tag-үүдийг устгах
Жишээ тохиргоо:
- Keep the most recent: 5 tags per image name
- Keep tags matching:
^latest$|^dev$|^prod$|^v.*$ - Remove tags older than: 7 days
- Remove tags matching:
.*
Энэ тохиргоо нь:
latest,dev,prodtag-үүд болонv-ээр эхэлсэн version tag-үүдийг хадгална- Хамгийн сүүлийн 5 tag-ийг хадгална
- 7 хоногоос эхлэн хуучин tag-үүдийг устгана
Анхаарах: Policy-ийн шинэчлэл нь cleanup-ийн дараагийн ажиллах огноо, цагийг өөрчлөнө.