في كل مشروع يحترم نفسه ، يجب على مهندسي ضمان الجودة المشاركة. كل يوم سيواجهون مهمة التحقق من إنجاز المهام في فروع منفصلة. في كثير من الأحيان ، تستغرق عملية التحول إلى الفرع المطلوب والتجميع والاختبار الكثير من الوقت ، بالإضافة إلى ذلك ، ليس من الممكن دائمًا إعادة إنشاء بيئة قتالية متطابقة تمامًا.
الغرض من هذه المقالة هو إظهار تقنية بسيطة لإنشاء موقف على عدة فروع. تمت كتابة هذه المقالة من قبل المطورين من المطور ، لذلك من غير المرجح أن تكون ذات أهمية كبيرة لمهندسي DevOps المحترفين.
المتطلبات:- جيتلاب (المعدن / السحابة)
- خادم مخصص
- نطاق مجاني
الخطوة الأولى: تكوين Gitlab
- قم بتثبيت Gitlab Runner على خادمك المخصص
- إنشاء عامل دعم يبني صورة عامل الميناء
- تمكين تسجيل الحاوية
الخطوة الثانية: إعداد الخادم
- تثبيت Docker
- تثبيت Compose
- إنشاء مستخدم:
- قم بإعداد traefik (طلبات الخادم الوكيل لحاويات Docker بناءً على تصنيفاتها (الملصقات)):
$ sudo mkdir -p /opt/traefik $ docker network create web
/opt/traefik/docker-compose.yml
version: '2' services: traefik: image: traefik:1.4.6 restart: always ports: - 80:80 networks: - web volumes: - /var/run/docker.sock:/var/run/docker.sock - ./traefik.toml:/traefik.toml container_name: traefik networks: web: external: true
/opt/traefik/traefik.toml
استبدل DOMAIN.COM بالمجال الخاص بك.
debug = true checkNewVersion = true logLevel = "ERROR" defaultEntryPoints = ["http"] [entryPoints] [entryPoints.http] address = ":80" [retry] [docker] endpoint = "unix:///var/run/docker.sock" domain = "DOMAIN.COM" watch = true exposedbydefault = false
- تشغيل traefik:
cd /opt/traefik && docker-compose up -d
- قم بإضافة سجل لـ DOMAIN.COM من النموذج '*' - IP الخاص بالخادم المخصص.
الخطوة الثالثة: تحضير المستودع
- أضف إلى جذر مستودع Dockerfile:
FROM node:8.9 as build-deps WORKDIR /usr/src/app COPY package.json ./ RUN npm i COPY . ./ RUN npm run build FROM nginx:1.12-alpine COPY
التغيير
npm run build
لفريق البناء الخاص بك. قم بتحرير المسار بنفس الطريقة.
/usr/src/app/dist
تغيير dist إلى دليل البناء الخاص بك.
يمكنك قراءة المزيد عن أوامر الهيكل و dockerfire هنا .
- أضف ملف .gitlab-ci.yml مع قسم تجميع الصور:
image: docker:stable variables: DOCKER_HOST: tcp://docker:2375/ DOCKER_DRIVER: overlay2 GITLAB_DOMAIN: gitlab.com services: - docker:dind stages: - build build_staging: stage: build script: - export GITLAB_DOMAIN=gitlab.com - export CONTAINER_IMAGE=$GITLAB_DOMAIN/frontend/main/image - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $GITLAB_DOMAIN - docker pull $CONTAINER_IMAGE:$CI_COMMIT_REF_SLUG || true - export URL="Host:${CI_COMMIT_REF_NAME}.tests.DOMAIN.COM" - docker build -t $CONTAINER_IMAGE:$CI_COMMIT_REF_SLUG . --label "traefik.backend=${CI_COMMIT_REF_NAME}" --label "traefik.frontend.rule=${URL}" - docker push $CONTAINER_IMAGE:$CI_COMMIT_REF_SLUG
- أضف المفتاح الخاص Publisher@DOMAIN.COM إلى إعدادات المستودع (Settings -> CI / CD -> Variables) كـ SSH_PRIVATE_KEY
- أضف أقسام النشر:
stages: - build - deploy /// .... deploy_staging: stage: deploy image: kroniak/ssh-client:3.6 script: - mkdir ~/.ssh - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config' - eval $(ssh-agent -s) - ssh-add <(echo "$SSH_PRIVATE_KEY") - ssh deployer@DOMAIN.COM "docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $GITLAB_DOMAIN" - ssh deployer@DOMAIN.COM "docker stop frontend_${CI_COMMIT_REF_SLUG}" || true - ssh deployer@DOMAIN.COM "docker rm frontend_${CI_COMMIT_REF_SLUG}" || true - ssh deployer@DOMAIN.COM "docker rmi GITLAB-DOMAIN.COM/frontend/main/image:${CI_COMMIT_REF_SLUG}" || true - ssh deployer@DOMAIN.COM "docker run --name frontend_${CI_COMMIT_REF_SLUG} --network=web -d $GITLAB_DOMAIN/frontend/main/image:${CI_COMMIT_REF_SLUG}" environment: name: review/$CI_COMMIT_REF_NAME url: http://${CI_COMMIT_REF_NAME}.tests.DOMAIN.COM on_stop: stop_staging stop_staging: stage: deploy image: kroniak/ssh-client:3.6 variables: GIT_STRATEGY: none script: - mkdir ~/.ssh - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config' - eval $(ssh-agent -s) - ssh-add <(echo "$SSH_PRIVATE_KEY") - ssh deployer@DOMAIN.COM "docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN GITLAB-DOMAIN.COM" - ssh deployer@DOMAIN.COM "docker stop frontend_${CI_COMMIT_REF_SLUG}" || true - ssh deployer@DOMAIN.COM "docker rm frontend_${CI_COMMIT_REF_SLUG}" || true - ssh deployer@DOMAIN.COM "docker rmi $GITLAB_DOMAIN/frontend/main/image:${CI_COMMIT_REF_SLUG}" || true when: manual environment: name: review/$CI_COMMIT_REF_NAME action: stop
الخطوات المذكورة أعلاه كافية للحصول على النتيجة التالية:
- يبدأ كل التزام جديد لفرع بتجميع ونشر أحدث رمز حالي على٪ branch_name٪ .tests.DOMAIN.COM
- يتضمن Gitlab آلية بيئة تتيح لك إنشاء / حذف / فتح الصور المقفلة في بضع لمسات
الخطوات التالية:
- قم بإعداد قسم منفصل لتجميعات المعالج. في حالة المعالج ، من المعقول وضع علامة على الصورة من خلال COMMIT_SHA
- إضافة التكوينات إلى nginx في عامل الميناء
- معلمات تجميع الحزمة الأمامية من خلال آليات ملف إرساء ARG و ENV
- تكوين استخدام ذاكرة التخزين المؤقت من الصورة للتجميعات
بناء على المقال.