python - كيفية تحديث التعليمات البرمجية من جيت إلى حاوية عامل ميناء



git deployment (4)

أود أن أوصي لك الخروج من التعليمات البرمجية على المضيف الخاص بك COPY في الصورة. وبهذه الطريقة سيتم تحديثها كلما قمت بإجراء تغيير. أيضا، أثناء التطوير يمكنك ربط جبل الدليل المصدر على دليل التعليمات البرمجية في الحاوية، وهذا يعني أي تغييرات تنعكس على الفور في الحاوية.

أمر عامل ميناء لمستودعات جيت التي يتحقق من التحديث الأخير سيكون مفيدا جدا على الرغم من!

https://src-bin.com

لدي ملف عامل ميناء يحاول نشر رمز جانغو إلى حاوية

FROM ubuntu:latest
MAINTAINER { myname }

#RUN echo "deb http://archive.ubuntu.com/ubuntu/ $(lsb_release -sc) main universe" >> /etc/apt/sou$

RUN apt-get update

RUN DEBIAN_FRONTEND=noninteractive apt-get install -y tar git curl dialog wget net-tools nano buil$
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y python python-dev python-distribute python-p$

RUN mkdir /opt/app
WORKDIR /opt/app

#Pull Code
RUN git clone [email protected].org/{user}/{repo}

RUN pip install -r website/requirements.txt

#EXPOSE = ["8000"]
CMD python website/manage.py runserver 0.0.0.0:8000

ومن ثم بناء بلدي التعليمات البرمجية كما docker build -t dockerhubaccount/demo:v1 . ، وهذا يسحب رمز بلدي من بيتبوكيت إلى الحاوية. أنا تشغيله كما docker run -p 8000:8080 -td felixcheruiyot/demo:v1 وأشياء تظهر للعمل بشكل جيد.

الآن أريد تحديث رمز أي منذ أن git clone ... ، لدي هذا الارتباك:

  • كيف يمكنني تحديث التعليمات البرمجية عندما يكون لدي التزامات جديدة وعلى حاويات دوكر بناء عليه السفن مع التعليمات البرمجية الجديدة (ملاحظة: عند تشغيل بناء عليه لا جلبه بسبب ذاكرة التخزين المؤقت).
  • ما هو أفضل سير العمل لهذا النوع من النهج؟

Answer #1

حل آخر.

يستخدم الأمر دوكر بيلد ذاكرة التخزين المؤقت طالما أن سلسلة التعليمات هي بالضبط نفس صورة المخزنة مؤقتا. لذلك، إذا كنت أكتب

RUN echo '2014122400' >/dev/null && git pull ...

في التحديث التالي، يمكنك تغيير كما يلي.

RUN echo '2014122501' >/dev/null && git pull ...

هذا يمكن أن يمنع عامل الميناء من استخدام ذاكرة التخزين المؤقت.


Answer #2

إذا كنت تستخدم جيثب يمكنك استخدام واجهة برمجة التطبيقات جيثب لا مخبأ الأوامر رن محددة.

تحتاج إلى أن يكون جق تثبيت لتحليل جسون: apt-get install -y jq

مثال:

docker build --build-arg SHA=$(curl -s 'https://api.github.com/repos/Tencent/mars/commits' | jq -r '.[0].sha') -t imageName .

في دوكيرفيل (يجب أن يكون الأمر أرج قبل رن):

ARG SHA=LATEST
RUN SHA=${SHA} \
    git clone https://github.com/Tencent/mars.git

أو إذا كنت لا تريد تثبيت جق:

SHA=$(curl -s 'https://api.github.com/repos/Tencent/mars/commits' | grep sha | head -1)

إذا كان مستودع لديه التزامات جديدة، سيتم تنفيذ git clone .


Answer #3

هناك بضعة نهج يمكنك استخدامها.

  1. يمكنك استخدام docker build --no-cache لتجنب استخدام ذاكرة التخزين المؤقت لاستنساخ جيت.
  2. يتطلب الأمر بدء التشغيل git pull . لذلك بدلا من تشغيل python manage.py ، سيكون لديك شيء مثل CMD cd /repo && git pull && python manage.py أو استخدام برنامج نصي بداية إذا كانت الأمور أكثر تعقيدا.

أنا أميل إلى تفضيل 2. يمكنك أيضا تشغيل وظيفة كرون لتحديث التعليمات البرمجية في الحاوية الخاصة بك، ولكن هذا هو أكثر قليلا من العمل ويذهب إلى حد ما ضد فلسفة عامل الميناء.





docker