تكوين التسليم المستمر على gitlab.com

بمجرد التفكير في أتمتة نشر مشروعي. يرجى gitlab.com توفير جميع الأدوات اللازمة لذلك ، وبالطبع قررت استخدامه من خلال فرز نصوص نشر صغيرة وكتابتها. في هذه المقالة ، أشارك تجربتي مع المجتمع.

TL ؛ د


  1. تكوين VPS: تعطيل الجذر ، تسجيل الدخول إلى كلمة المرور ، تثبيت dockerd ، تكوين ufw
  2. إنشاء شهادات للخادم والعميل docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl تمكين التحكم في إرساء الجهاز عبر مأخذ tcp: قم بإزالة الخيار -H fd: / / من التكوين عامل ميناء.
  3. تسجيل مسارات الشهادة في docker.json
  4. التسجيل في متغيرات gitlab في إعدادات CI / CD مع محتويات الشهادة. اكتب نصي .gitlab-ci.yml للنشر.

سأعرض كل الأمثلة على مجموعة توزيع دبيان.

إعداد VPS الأولي


لذا فقد اشتريت مثيلًا على سبيل المثال في DO ، فإن أول ما عليك فعله هو حماية الخادم الخاص بك من العالم الخارجي العدواني. لن أقوم بإثبات أي شيء أو المطالبة به ، فما عليك سوى عرض السجل / var / log / رسائل الخادم الظاهري:

قطة
صورة

أولاً ، قم بتثبيت جدار الحماية ufw:

apt-get update && apt-get install ufw 

تشغيل السياسة الافتراضية: حظر جميع الاتصالات الواردة ، والسماح لجميع الاتصالات الصادرة:

 ufw default deny incoming ufw default allow outgoing 

هام: لا تنسى السماح بالاتصال ssh:

 ufw allow OpenSSH 

بناء الجملة العام هو: السماح باتصال منفذ: ufw allow 12345 ، حيث 12345 هو رقم المنفذ أو اسم الخدمة. الرفض: ufw الرفض 12345

قم بتشغيل جدار الحماية:

 ufw enable 

نترك الجلسة وتسجيل الدخول مرة أخرى عبر سه.

أضف المستخدم ، عيّنه كلمة مرور وأضفه إلى مجموعة sudo.

 apt-get install sudo adduser scoty usermod -aG sudo scoty 

بعد ذلك ، وفقًا للخطة ، يجب عليك تعطيل إدخال كلمة المرور. للقيام بذلك ، انسخ مفتاح ssh الخاص بك إلى الخادم:

 ssh-copy-id root@10.101.10.28 

يجب تحديد عنوان IP الخاص بالخادم. جرب الآن لتسجيل الدخول تحت المستخدم الذي تم إنشاؤه مسبقًا ، لم تعد بحاجة إلى إدخال كلمة مرور. بعد ذلك ، في إعدادات التكوين ، قم بتغيير التالي:

 sudo nano /etc/ssh/sshd_config 

تعطيل إدخال كلمة المرور:

 PasswordAuthentication no 

أعد تشغيل البرنامج الخفي sshd:

 sudo systemctl reload sshd 

الآن ، إذا حاولت أنت أو أي شخص آخر تسجيل الدخول كجذر ، فهذا لن ينجح.

بعد ذلك ، قم بتعيين dockerd ، لن أصف العملية هنا ، حيث يمكن تغيير كل شيء بالفعل ، اتبع الرابط إلى الموقع الرسمي وتصفح خطوات تثبيت docker على جهازك الظاهري: https://docs.docker.com/install/linux/docker- م / ديبيان /

شهادة الجيل


لإدارة البرنامج الخفي لرسو السفن عن بُعد ، يلزم وجود اتصال TLS مشفر. للقيام بذلك ، يجب أن يكون لديك شهادة ومفتاح ، والتي يجب إنشاؤها ونقلها إلى جهازك البعيد. اتبع الخطوات الموضحة في الإرشادات الموجودة على موقع عامل الإرساء الرسمي على الويب: https://docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl كل ما تم إنشاؤه * .pem يجب وضع ملفات الخادم ، وهي ca.pem ، server.pem ، key.pem في دليل / etc / docker على الخادم.

Dockerd الإعداد


في البرنامج النصي لتشغيل البرنامج الخفي docker ، أزل الخيار -H df: // ، هذا الخيار يجيب على المضيف الذي يمكنه التحكم في البرنامج الخفي.

 # At /lib/systemd/system/docker.service [Service] Type=notify ExecStart=/usr/bin/dockerd 

بعد ذلك ، قم بإنشاء ملف إعدادات ، إذا لم يكن موجودًا بالفعل ووصف الخيارات:

/etc/docker/daemon.json
 { "hosts": [ "unix:///var/run/docker.sock", "tcp://0.0.0.0:2376" ], "labels": [ "is-our-remote-engine=true" ], "tls": true, "tlscacert": "/etc/docker/ca.pem", "tlscert": "/etc/docker/server.pem", "tlskey": "/etc/docker/key.pem", "tlsverify": true } 


لنقم بتمكين الاتصالات على المنفذ 2376:

 sudo ufw allow 2376 

أعد تشغيل dockerd بالإعدادات الجديدة:

 sudo systemctl daemon-reload && sudo systemctl restart docker 

تحقق:

 sudo systemctl status docker 

إذا كان كل شيء أخضر ، فإننا نعتقد أننا نجحنا في تهيئة عامل ميناء على الخادم.

تكوين deleivery مستمر على gitlab


لكي يتمكن عامل gitalab من تنفيذ الأوامر على مضيف جهاز التحكم عن بعد ، من الضروري تحديد كيفية ومكان تخزين الشهادات والمفتاح الخاص بالاتصال المشفر مع dockerd. لقد قمت بحل هذه المشكلة بمجرد كتابتها في متغيرات في إعدادات gitlbab:

المفسد العنوان
صورة

ما عليك سوى عرض محتويات الشهادات والمفتاح عبر cat: cat ca.pem . انسخ والصق في قيمة المتغيرات.

دعنا نكتب البرنامج النصي للنشر من خلال gitlab. سيتم استخدام صورة عامل الإرساء (dind).

.gitlab-ci.yml
 image: name: docker/compose:1.23.2 #  entrypoint ,    dind entrypoint: ["/bin/sh", "-c"] variables: DOCKER_HOST: tcp://docker:2375/ DOCKER_DRIVER: overlay2 services: - docker:dind stages: - deploy deploy: stage: deploy script: - bin/deploy.sh #    


محتوى البرنامج النصي للنشر مع التعليقات:

بن / نشر
 #!/usr/bin/env sh #  ,   -  set -e # ,  ,   set -v # DOCKER_COMPOSE_FILE=docker-compose.yml #   DEPLOY_HOST=185.241.52.28 #    ,      - gitlab- DOCKER_CERT_PATH=/root/.docker # ,      docker info docker-compose version #   (    -  gitlab') mkdir $DOCKER_CERT_PATH #   ,         . echo "$CA_PEM" | tr -d '\r' > $DOCKER_CERT_PATH/ca.pem echo "$CERT_PEM" | tr -d '\r' > $DOCKER_CERT_PATH/cert.pem echo "$KEY_PEM" | tr -d '\r' > $DOCKER_CERT_PATH/key.pem #       chmod 400 $DOCKER_CERT_PATH/ca.pem chmod 400 $DOCKER_CERT_PATH/cert.pem chmod 400 $DOCKER_CERT_PATH/key.pem #       docker-. ,   export DOCKER_TLS_VERIFY=1 export DOCKER_HOST=tcp://$DEPLOY_HOST:2376 # ,     docker-compose \ -f $DOCKER_COMPOSE_FILE \ ps #   docker-,     ""  docker login -u $DOCKER_USER -p $DOCKER_PASSWORD docker-compose \ -f $DOCKER_COMPOSE_FILE \ pull app #   docker-compose \ -f $DOCKER_COMPOSE_FILE \ up -d app 


كانت المشكلة الرئيسية هي "استخراج" محتويات الشهادات في شكلها الطبيعي من متغيرات gitlab CI / CD. لم أستطع فهم سبب عدم عمل الاتصال بالمضيف البعيد. على المضيف ، نظرت إلى سجل عامل الإيقاف sudu journalctl -u ، هناك خطأ في المصافحة. قررت إلقاء نظرة على ما يتم تخزينه بشكل عام في المتغيرات ، لذلك يمكنك رؤية cat -A $ DOCKER_CERT_PATH / key.pem. تم التغلب على الخطأ عن طريق إضافة إزالة رمز النقل tr -d '\ r'.

علاوة على ذلك في البرنامج النصي ، يمكنك إضافة مهام ما بعد النشر وفقًا لتقديرك. تستطيع أن ترى نسخة العمل في مستودع بلدي https://gitlab.com/isqad/gitlab-ci-cd

Source: https://habr.com/ru/post/ar449952/


All Articles