في هذه المقالة ، أريد أن أخبرك عن كيفية نشر التطبيقات في بيئات مختلفة. في هذا المثال ، سننشر في: "اختبار" و "إنتاج". بالطبع ، يمكنك إضافة أي بيئة.
لنشر التطبيقات ، أستخدم HELM. يسمح بإدارة تكوين مرنة. ما يمكنك رؤيته أدناه. من المفترض أن لديك بالفعل عداء مهيأ مع الدفة وأنك تعرف وتعرف كيف تعمل مع HELM.
ملف مثال:
.gitlab-ci.yml.base_deploy: &base_deploy stage: deploy script: - PROJECT_NAME="${CI_PROJECT_NAME}-${CI_ENVIRONMENT_SLUG}" - helm --namespace ${CI_ENVIRONMENT_SLUG} upgrade -i ${PROJECT_NAME} helm --set "global.env=${CI_ENVIRONMENT_SLUG}"; stages: - deploy Deploy to Test: <<: *base_deploy environment: name: test Deploy to Production: <<: *base_deploy environment: name: production when: manual
يجدر الانتباه إلى حقيقة أنه ، اعتمادًا على البيئة ، نمر متغيرًا: "اختبار" أو "إنتاج".
نقوم أيضًا بإنشاء اسم المشروع مع مراعاة اسم المتغير ، بحيث تدرك شركة Helm أن هذه مشروعات مختلفة (helm ls).
بعد ذلك ، نمرر هذا المتغير (البيئة) إلى HELM كـ: "global.env".
بالنسبة للمثال أعلاه ، يجب وضع الدفة في نفس المجلد في مستودعك.
لنلقِ نظرة الآن على مثال لكيفية استخدام متغير البيئة في مخططات HELM.
إنشاء مثل هذه
القيم. yaml :
replicas: test: 1 production: 3 domain: test: test.domain.com production: production.domain.com resources: requests: cpu: _default: 50m production: 50m memory: _default: 256Mi production: 10Mi limits: memory: _default: 1Gi production: 1Gi cpu: _default: 1000m
هنا يمكنك أن ترى أنه في البيئات المختلفة نحدد إعدادات مختلفة.
للراحة ، يمكنك تحديد الإعدادات الافتراضية.
مثال آخر على ingress.yaml:
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: {{ .Chart.Name }} spec: rules: - host: {{ pluck .Values.global.env .Values.domain | first | default .Values.domain._default }} http: paths: - path: / backend: serviceName: {{ .Chart.Name }} servicePort: 80
يمكنك دائمًا التحقق من سير مخططك بواسطة الأمر:
helm template ./helm --set "global.env=test" helm template ./helm --set "global.env=production"
يمكنك أيضًا نشر الكود الخاص بك في العقد المختلفة اعتمادًا على البيئة.
مثال:
{{ if eq .Values.global.env "test" }} nodeSelector: nodetype: testnodes {{ else if eq .Values.global.env "production" }} nodeSelector: nodetype: productionnodes {{ else }}
شكرا لكم جميعا. نشر بشكل صحيح.