يتوفر خادم Jenkins Continious Integration and Delivery على Docker Hub.
هذا خادم Jenkins يعمل بكامل طاقته. https://jenkins.io/.
docker run -p 8080:8080 -p 50000:50000 --restart=on-failure jenkins/jenkins:lts-jdk17
ملاحظة: اقرأ قسم توصيل الوكلاء أدناه للتعرف على دور تعيين منفذ 50000
. ملاحظة: اقرأ القسم تكوين DNS في حالة ظهور الرسالة "يبدو أن مثيل Jenkins هذا غير متصل بالإنترنت."
سيؤدي هذا إلى تخزين مساحة العمل في /var/jenkins_home
. توجد جميع بيانات Jenkins هناك - بما في ذلك المكونات الإضافية والتكوين. ربما ترغب في جعل هذا المجلد واضحًا حتى تتمكن من إدارته وإرفاقه بحاوية أخرى للترقيات:
docker run -p 8080:8080 -p 50000:50000 --restart=on-failure -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts-jdk17
سيؤدي هذا تلقائيًا إلى إنشاء وحدة تخزين إرساء "jenkins_home" على الجهاز المضيف. تحتفظ وحدات تخزين Docker بمحتواها حتى عند إيقاف الحاوية أو بدء تشغيلها أو حذفها.
ملاحظة: تجنب استخدام رابط الربط من مجلد على الجهاز المضيف إلى /var/jenkins_home
، لأن هذا قد يؤدي إلى مشكلات في أذونات الملف (قد لا يكون لدى المستخدم المستخدم داخل الحاوية حقوق في المجلد الموجود على الجهاز المضيف). إذا كنت بحاجة حقًا إلى ربط Mount jenkins_home، فتأكد من إمكانية الوصول إلى الدليل الموجود على المضيف بواسطة مستخدم Jenkins داخل الحاوية (jenkins user - uid 1000) أو استخدم -u some_other_user
المعلمة مع docker run
.
docker run -d -v jenkins_home:/var/jenkins_home -p 8080:8080 -p 50000:50000 --restart=on-failure jenkins/jenkins:lts-jdk17
سيؤدي هذا إلى تشغيل Jenkins في الوضع المنفصل مع إعادة توجيه المنفذ وإضافة وحدة التخزين. يمكنك الوصول إلى السجلات باستخدام الأمر "docker logs CONTAINER_ID" للتحقق من الرمز المميز لتسجيل الدخول الأول. سيتم إرجاع معرف الحاوية من إخراج الأمر أعلاه.
إذا قمت بربط التحميل في وحدة تخزين - يمكنك ببساطة عمل نسخة احتياطية من هذا الدليل (وهو jenkins_home) في أي وقت.
لا يُنصح باستخدام أداة ربط الربط لأنها قد تؤدي إلى مشكلات في الأذونات. تعامل مع دليل jenkins_home كما تفعل مع قاعدة البيانات - في Docker ستضع بشكل عام قاعدة بيانات على وحدة تخزين.
إذا كان وحدة التخزين الخاصة بك داخل حاوية - فيمكنك استخدام الأمر docker cp $ID:/var/jenkins_home
لاستخراج البيانات، أو خيارات أخرى للعثور على مكان وجود بيانات وحدة التخزين. لاحظ أن بعض الارتباطات الرمزية الموجودة في بعض أنظمة التشغيل قد يتم تحويلها إلى نسخ (قد يؤدي ذلك إلى إرباك جينكينز مع روابط lastStableBuild، وما إلى ذلك)
لمزيد من المعلومات، راجع قسم مستندات Docker في استخدام وحدات التخزين
يمكنك تحديد عدد المنفذين على عقدة Jenkins المضمنة باستخدام برنامج نصي رائع. افتراضيًا، يتم تعيينها على منفذين، ولكن يمكنك توسيع الصورة وتغييرها إلى العدد المطلوب من المنفذين (يوصى بـ 0 منفذًا على العقدة المضمنة):
executors.groovy
import jenkins.model.* Jenkins.instance.setNumExecutors(0) // Recommended to not run builds on the built-in node
و Dockerfile
FROM jenkins/jenkins:lts COPY --chown=jenkins:jenkins executors.groovy /usr/share/jenkins/ref/init.groovy.d/executors.groovy
يمكنك تشغيل الإصدارات على وحدة التحكم خارج الصندوق. يوصي مشروع Jenkins بعدم تمكين أي منفذين على وحدة التحكم.
لتوصيل الوكلاء من خلال اتصال TCP وارد ، قم بتعيين المنفذ: -p 50000:50000
. سيتم استخدام هذا المنفذ عند توصيل الوكلاء بوحدة التحكم.
إذا كنت تستخدم فقط وكلاء بناء SSH (الصادر)، فلن يكون هذا المنفذ مطلوبًا، حيث يتم إنشاء الاتصالات من وحدة التحكم. إذا قمت بتوصيل الوكلاء باستخدام مقابس الويب (منذ Jenkins 2.217)، فلن يتم استخدام منفذ وكيل TCP أيضًا.
قد تحتاج إلى تخصيص JVM الذي يقوم بتشغيل Jenkins، عادةً لضبط خصائص النظام أو تعديل إعدادات ذاكرة الكومة. استخدم متغيرات البيئة JAVA_OPTS
أو JENKINS_JAVA_OPTS
لهذا الغرض:
docker run --name myjenkins -p 8080:8080 -p 50000:50000 --restart=on-failure --env JAVA_OPTS=-Dhudson.footerURL=http://mycompany.com jenkins/jenkins:lts-jdk17
يجب تعيين خيارات JVM خصيصًا لوحدة تحكم Jenkins من خلال JENKINS_JAVA_OPTS
، حيث قد تستجيب الأدوات الأخرى أيضًا لمتغير البيئة JAVA_OPTS
.
يمكن تكوين تسجيل Jenkins من خلال ملف الخصائص وخاصية java.util.logging.config.file
. على سبيل المثال:
mkdir data cat > data/log.properties <<EOF handlers=java.util.logging.ConsoleHandler jenkins.level=FINEST java.util.logging.ConsoleHandler.level=FINEST EOF docker run --name myjenkins -p 8080:8080 -p 50000:50000 --restart=on-failure --env JAVA_OPTS="-Djava.util.logging.config.file=/var/jenkins_home/log.properties" -v `pwd`/data:/var/jenkins_home jenkins/jenkins:lts-jdk17
إذا كنت تريد تثبيت Jenkins خلف وكيل عكسي ببادئة، على سبيل المثال: mysite.com/jenkins، فأنت بحاجة إلى إضافة متغير البيئة JENKINS_OPTS="--prefix=/jenkins"
ثم اتباع الإجراءات التالية لتكوين الوكيل العكسي الخاص بك، والذي سيعتمد على ما إذا كان لديك Apache أو Nginx:
أباتشي
نجينكس
إذا ظهرت الرسالة "يبدو أن مثيل Jenkins هذا غير متصل بالإنترنت." عند بدء التشغيل لأول مرة، وتعرض سجلات الحاوية أسطرًا مثل java.net.UnknownHostException: updates.jenkins.io
، فقد تواجه حاويتك مشكلات في حل أسماء DNS.
لحل المشكلة المحتملة، ابدأ الحاوية بتحديد خادم DNS (على سبيل المثال، 1.1.1.1 من Cloudflare أو 8.8.8.8 من Google، أو أي خادم DNS آخر):
docker run -p 8080:8080 -p 50000:50000 --restart=on-failure --dns 1.1.1.1 --dns 8.8.8.8 jenkins/jenkins:lts-jdk17
يتم تمرير الوسيطات التي تمررها إلى عامل الإرساء الذي يقوم بتشغيل صورة Jenkins إلى مشغل Jenkins، لذلك يمكنك على سبيل المثال تشغيل:
docker run jenkins/jenkins:lts-jdk17 --version
سيُظهر هذا إصدار Jenkins، تمامًا كما هو الحال عند تشغيل Jenkins من حرب قابلة للتنفيذ.
يمكنك أيضًا تحديد وسيطات Jenkins عبر JENKINS_OPTS
. يعد هذا مفيدًا لتخصيص الوسائط لمشغل Jenkins في صورة Jenkins المشتقة. يستخدم نموذج Dockerfile التالي هذا الخيار لفرض استخدام HTTPS مع الشهادة المضمنة في الصورة.
FROM jenkins/jenkins:lts-jdk17 COPY --chown=jenkins:jenkins certificate.pfx /var/lib/jenkins/certificate.pfx COPY --chown=jenkins:jenkins https.key /var/lib/jenkins/pk ENV JENKINS_OPTS="--httpPort=-1 --httpsPort=8083 --httpsKeyStore=/var/lib/jenkins/certificate.pfx --httpsKeyStorePassword=Password12" EXPOSE 8083
يمكنك أيضًا تغيير منفذ الوكيل الافتراضي لـ Jenkins عن طريق تحديد JENKINS_SLAVE_AGENT_PORT
في نموذج Dockerfile.
FROM jenkins/jenkins:lts-jdk17 ENV JENKINS_SLAVE_AGENT_PORT=50001
أو كمعلمة لعامل الإرساء،
docker run --name myjenkins -p 8080:8080 -p 50001:50001 --restart=on-failure --env JENKINS_SLAVE_AGENT_PORT=50001 jenkins/jenkins:lts-jdk17
ملاحظة : سيتم استخدام متغير البيئة هذا لتعيين خاصية النظام jenkins.model.Jenkins.slaveAgentPort
.
إذا تم تعيين هذه الخاصية بالفعل في JAVA_OPTS أو JENKINS_JAVA_OPTS ، فسيتم تجاهل قيمة
JENKINS_SLAVE_AGENT_PORT
.
يمكنك تشغيل حاويتك كجذر - والتثبيت عبر apt-get، أو التثبيت كجزء من خطوات البناء عبر مثبتات أدوات Jenkins، أو يمكنك إنشاء ملف Dockerfile الخاص بك للتخصيص، على سبيل المثال:
FROM jenkins/jenkins:lts-jdk17 # if we want to install via apt USER root RUN apt-get update && apt-get install -y ruby make more-thing-here # drop back to the regular jenkins user - good practice USER jenkins
في هذه الصورة المشتقة، يمكنك تخصيص مثيل Jenkins الخاص بك باستخدام نصوص ربط أو مكونات إضافية إضافية. لهذا الغرض، استخدم /usr/share/jenkins/ref
كمكان لتحديد محتوى JENKINS_HOME الافتراضي الذي تريد أن يبدو التثبيت المستهدف عليه:
FROM jenkins/jenkins:lts-jdk17 COPY --chown=jenkins:jenkins custom.groovy /usr/share/jenkins/ref/init.groovy.d/custom.groovy
يمكنك الاعتماد على مدير البرنامج المساعد CLI لتمرير مجموعة من المكونات الإضافية للتنزيل مع تبعياتها. ستقوم هذه الأداة بإجراء التنزيلات من مراكز التحديث، ويلزم الوصول إلى الإنترنت لمراكز التحديث الافتراضية.
أثناء التنزيل، ستستخدم واجهة سطر الأوامر (CLI) مراكز التحديث المحددة بواسطة متغيرات البيئة التالية:
JENKINS_UC
- مركز التحديث الرئيسي. قد يقدم مركز التحديث هذا إصدارات مكون إضافي اعتمادًا على إصدارات Jenkins LTS Core. القيمة الافتراضية: https://updates.jenkins.io
JENKINS_UC_EXPERIMENTAL
- مركز التحديث التجريبي. يقدم هذا المركز إصدارات ألفا وبيتا من المكونات الإضافية. القيمة الافتراضية: https://updates.jenkins.io/experimental
JENKINS_INCREMENTALS_REPO_MIRROR
- يحدد مرآة Maven لاستخدامها لتنزيل المكونات الإضافية من مستودع Incrementals. القيمة الافتراضية: https://repo.jenkins-ci.org/incrementals
JENKINS_UC_DOWNLOAD
- تنزيل عنوان url الخاص بمركز التحديث. القيمة الافتراضية: $JENKINS_UC/download
JENKINS_PLUGIN_INFO
- موقع معلومات البرنامج المساعد. القيمة الافتراضية: https://updates.jenkins.io/current/plugin-versions.json
من الممكن تجاوز متغيرات البيئة في الصور.
❗ لاحظ أن تغيير متغيرات مركز التحديث لن يغير مركز التحديث الذي يستخدمه وقت تشغيل Jenkins، فهو يتعلق فقط بسطر أوامر مدير البرنامج الإضافي.
يمكن تثبيت المكونات الإضافية المخصصة المُصممة مسبقًا عن طريق نسخ ملف HPI الإضافي إلى /usr/share/jenkins/ref/plugins/
داخل Dockerfile
:
COPY --chown=jenkins:jenkins path/to/custom.hpi /usr/share/jenkins/ref/plugins/
يمكنك تشغيل CLI يدويًا في Dockerfile:
من جنكينز/جنكينز: lts-jdk17RUN jenkins-plugin-cli --plugins خط أنابيب-تعريف-نموذج-github-branch-source:1.8
علاوة على ذلك، من الممكن تمرير ملف يحتوي على هذه المجموعة من المكونات الإضافية (مع أو بدون فواصل الأسطر).
من jenkins/jenkins:lts-jdk17COPY --chown=jenkins:jenkins plugins.txt /usr/share/jenkins/ref/plugins.txtRUN jenkins-plugin-cli -f /usr/share/jenkins/ref/plugins.txt
عندما تبدأ حاوية Jenkins، ستتحقق من أن JENKINS_HOME
يحتوي على هذا المحتوى المرجعي، وتنسخه هناك إذا لزم الأمر. لن يؤدي ذلك إلى تجاوز هذه الملفات، لذلك إذا قمت بترقية بعض المكونات الإضافية من واجهة المستخدم، فلن يتم إعادتها في البداية التالية.
في حالة رغبتك في التجاوز، قم بإلحاق ".override" باسم الملف المرجعي. على سبيل المثال، سيحل الملف المسمى /usr/share/jenkins/ref/config.xml.override
محل ملف config.xml
موجود في JENKINS_HOME.
انظر أيضًا جينكينز-24986
فيما يلي مثال للحصول على قائمة المكونات الإضافية من خادم موجود:
JENKINS_HOST=username:[email protected]:port curl -sSL "http://$JENKINS_HOST/pluginManager/api/xml?depth=1&xpath=/*/*/shortName|/*/*/version&wrapper=plugins" | perl -pe 's/.*?<shortName>([w-]+).*?<version>([^<]+)()(</w+>)+/1 2n/g'|sed 's/ /:/'
إخراج المثال:
cucumber-testresult-plugin:0.8.2 pam-auth:1.1 matrix-project:1.4.1 script-security:1.13 ...
بالنسبة للصور المشتقة من 2.x، قد ترغب أيضًا في ذلك
RUN echo 2.0 > /usr/share/jenkins/ref/jenkins.install.UpgradeWizard.state
للإشارة إلى أن تثبيت Jenkins هذا قد تم تكوينه بالكامل. وإلا سيظهر شعار يطالب المستخدم بتثبيت مكونات إضافية إضافية، والتي قد تكون غير مناسبة.
لتمكين سجلات وصول مستخدم Jenkins من دليل Jenkins الرئيسي داخل حاوية عامل إرساء، قم بتعيين قيمة متغير البيئة JENKINS_OPTS
على --accessLoggerClassName=winstone.accesslog.SimpleAccessLogger --simpleAccessLogger.format=combined --simpleAccessLogger.file=/var/jenkins_home/logs/access_log
يتبع اصطلاح التسمية للعلامات في Docker Hub التنسيق <repository_name>:<tag>
، حيث يكون اسم المستودع هو jenkins/jenkins وحيث تحدد العلامة إصدار الصورة. في حالة LTS والإصدارات الأحدث، تكون العلامات lts
latest
على التوالي.
يمكنك استخدام هذه العلامات لسحب صور Jenkins المقابلة من Docker Hub وتشغيلها على نظامك. على سبيل المثال، لسحب إصدار LTS من صورة Jenkins، استخدم هذا الأمر: docker pull jenkins/jenkins:lts
لاستخدام Docker Compose مع Jenkins، يمكنك تحديد ملف docker-compose.yml بما في ذلك مثيل Jenkins وأي خدمات أخرى يعتمد عليها. على سبيل المثال، يحدد ملف docker-compose.yml التالي وحدة تحكم Jenkins ووكيل Jenkins SSH:
الخدمات: جنكينز:الصورة: جنكينز/جينكينز:ltsports: - المجلدات "8080:8080": - Jenkins_home:/var/jenkins_home وكيل ssh: الصورة: جنكينز/ssh-agentvolumes: jenkins_home:
يقوم ملف docker-compose.yml
هذا بإنشاء حاويتين: واحدة لـ Jenkins والأخرى لوكيل Jenkins SSH.
تعتمد حاوية Jenkins على صورة jenkins/jenkins:lts
وتكشف عن واجهة ويب Jenkins على المنفذ 8080. وحدة تخزين jenkins_home
هي وحدة تخزين مسماة يتم إنشاؤها وإدارتها بواسطة Docker.
تم تثبيته على /var/jenkins_home
في حاوية Jenkins، وسيستمر في تكوين Jenkins وبياناته.
تعتمد حاوية وكيل ssh على صورة jenkins/ssh-agent
وتقوم بتشغيل خادم SSH لتنفيذ Jenkins SSH Build Agent.
لبدء مثيل Jenkins والخدمات الأخرى المحددة في ملف docker-compose.yml
، قم بتشغيل docker compose up -d
.
سيؤدي هذا إلى سحب الصور الضرورية من Docker Hub إذا لم تكن موجودة بالفعل على نظامك، وبدء تشغيل الخدمات في الخلفية.
يمكنك بعد ذلك الوصول إلى واجهة ويب Jenkins على http://localhost:8080
على نظامك المضيف لتكوين وإدارة مثيل Jenkins الخاص بك (حيث يشير localhost
إلى المنفذ المنشور بواسطة Docker Engine).
ملاحظة: اقرأ القسم تكوين DNS في حالة ظهور الرسالة "يبدو أن مثيل Jenkins هذا غير متصل بالإنترنت." في هذه الحالة أضف تكوين DNS إلى yaml:
الخدمات: جنكينز:# ... التكوينات الأخرى: - 1.1.1.1 - 8.8.8.8# ... تكوينات أخرى
تدعم أداة إدارة تثبيت المكونات الإضافية تحديث ملف المكونات الإضافية لك.
أمر مثال:
JENKINS_IMAGE=jenkins/jenkins:lts-jdk17 تشغيل عامل الميناء -it ${JENKINS_IMAGE} bash -c "stty -onlcr && jenkins-plugin-cli -f /usr/share/jenkins/ref/plugins.txt --available-updates --output txt" > plugins2.txt mv plugins2.txt plugins.txt
جميع البيانات المطلوبة موجودة في الدليل /var/jenkins_home - لذا اعتمادًا على كيفية إدارتك لذلك - يعتمد على كيفية الترقية. بشكل عام - يمكنك نسخها - ثم "سحب عامل الإرساء" الصورة مرة أخرى - وسيكون لديك أحدث LTS - يمكنك بعد ذلك البدء بـ -v للإشارة إلى تلك البيانات (/var/jenkins_home) وسيكون كل شيء كما تريد تركته.
كما هو الحال دائمًا - يرجى التأكد من أنك تعرف كيفية تشغيل عامل الإرساء - وخاصة التعامل مع وحدات التخزين!
إذا قمت بتثبيت دليل Jenkins الرئيسي على وحدة تخزين Docker المسماة، فستتكون الترقية من docker pull
وليس أكثر.
نوصي باستخدام docker compose
، خاصةً في الحالات التي يقوم فيها المستخدم أيضًا بتشغيل حاوية nginx/Apache المتوازية كوكيل عكسي لحاوية Jenkins.
افتراضيًا، ستتم ترقية المكونات الإضافية إذا لم تتم ترقيتها يدويًا وإذا كان الإصدار من صورة عامل الإرساء أحدث من الإصدار الموجود في الحاوية. يتم تعقب الإصدارات المثبتة بواسطة صورة عامل الإرساء من خلال ملف علامة.
لفرض ترقية المكونات الإضافية التي تمت ترقيتها يدويًا، قم بتشغيل صورة عامل الإرساء باستخدام -e PLUGINS_FORCE_UPGRADE=true
.
السلوك الافتراضي عند الترقية من صورة عامل إرساء لا تكتب ملفات علامة هو ترك المكونات الإضافية الموجودة في مكانها. إذا كنت ترغب في ترقية المكونات الإضافية الموجودة بدون علامة، فيمكنك تشغيل صورة عامل الإرساء باستخدام -e TRY_UPGRADE_IF_NO_MARKER=true
. بعد ذلك، ستتم ترقية المكونات الإضافية إذا كان الإصدار الذي توفره صورة عامل الإرساء أحدث.
إذا كنت ترغب في المساهمة في إصلاحات لهذا المستودع، يرجى الرجوع إلى الوثائق المخصصة.
للحصول على معلومات تتعلق بأمان صورة Docker هذه، يرجى الرجوع إلى الوثائق المخصصة.
نحن على Gitter، https://gitter.im/jenkinsci/docker