मेरे पास एक दूरस्थ सर्वर है जहां मैं Nginx के माध्यम से अपनी परियोजना की सेवा करता हूं। मैं अपनी तैनाती प्रक्रिया को स्वचालित करने के लिए गिटलैब सीआई का उपयोग कर रहा हूं और मैं एक समस्या में भाग गया हूं। जब मैं अपने कमिट को मास्टर शाखा में धकेलता हूं तो गिटलैब-रनर अच्छी तरह से चलता है लेकिन समस्या यह है कि यह मेरे रिएक्ट बिल्ड फ़ोल्डर को हटा देता है (यह ठीक है, जैसा कि मैंने इसे .gitignore में डाल दिया है), लेकिन क्योंकि यह हमेशा मेरे बिल्ड फ़ोल्डर को हटा देता है, मेरा Nginx बिल्ड खत्म होने तक किसी भी फाइल की सेवा नहीं कर सका, और एक नया बिल्ड फ़ोल्डर बनाया गया। क्या इस समस्या का कोई समाधान है? यह अच्छा होगा यदि मैं बिल्ड प्रक्रिया समाप्त होने तक अपनी बिल्ड फ़ाइल को कैश कर सकूं। मैंने अपना gitlab.ci.yml संलग्न किया। अग्रिम में धन्यवाद!

image: docker:latest
services:
  - docker:dind
stages:
  - build
  - deploy
variables:
    GIT_SSL_NO_VERIFY: "1"
build-step:
  stage: build
  tags:
    - shell
  script:
    - docker image prune -f
    - docker-compose -f docker-compose.yml -f docker-compose.prod.yml build
deploy-step:
  stage: deploy
  tags:
    - shell
  script:
    - docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d


0
bummm26 2 पद 2019, 12:48

1 उत्तर

सबसे बढ़िया उत्तर

जब आपकी तैनाती का काम शुरू होता है तो git fetch का उपयोग करना और git क्लीन को अक्षम करना संभव होना चाहिए। ऐसा करने के लिए वेरिएबल के लिंक यहां दिए गए हैं:

https://docs.gitlab.com/ee/ci/yaml/#git-clean-flags

https://docs.gitlab.com/ee/ci/yaml/#git-strategy

यह कुछ इस तरह दिखेगा:

deploy-step:
  variables:
    GIT_STRATEGY: fetch
    GIT_CLEAN_FLAGS: none
  stage: deploy
  tags:
    - shell
  script:
    - docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d

इससे GitLab को git clone के बजाय git fetch का उपयोग करना चाहिए, और कोई भी git clean ... कमांड नहीं चलाना चाहिए। आपके पिछले रन से निर्मित कलाकृतियों को तब नहीं हटाया जाना चाहिए।

हालांकि इसमें कुछ समस्याएं हैं। यदि किसी बिल्ड में कुछ गलत हो जाता है, तो आप ऐसी स्थिति में समाप्त हो सकते हैं जहां आपको सर्वर में मैन्युअल रूप से लॉग इन करना होगा जहां रनर इसे ठीक करना है। इस प्रकार की समस्याओं को रोकने के लिए GitLab git clean का उपयोग करता है।

एक अधिक उचित समाधान एक प्रकार का डबबल बफर रखने के लिए nginx का उपयोग करना है। आपके पास दो अलग-अलग बिल्ड फ़ोल्डर हो सकते हैं, कॉन्फ़िगरेशन को nginx में बदल सकते हैं, और फिर कॉन्फ़िगरेशन को पुनः लोड करने के लिए nginx को एक सिग्नल भेज सकते हैं। फिर nginx बिना किसी रुकावट के आपके एप्लिकेशन के नए संस्करण में इनायत से स्विच करना सुनिश्चित करेगा। यहां किसी ऐसे व्यक्ति का लिंक दिया गया है जिसने ऐसा किया है:

https://syshero.org/2016-06-09-zero-downtime-deployments-using-nginx/

1
MrBerta 9 पद 2019, 12:39