۲۹ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

ادغام مداوم با Docker و Jenkins

چگونه از Git بیرون بیاییم، یک تصویر Docker بسازیم و تصویر را در Docker Hub منتشر کنیم.

چگونه از Git بیرون بیاییم، یک تصویر Docker بسازیم و تصویر را در Docker Hub منتشر کنیم.

تنوع زیادی از رویکردها برای ادغام پیوسته و تحویل مستمر (CI/CD) وجود دارد. کانتینر کردن برنامه‌ها با Docker به دلایل مختلف یک گام متداول است. یک عنصر کلیدی برای خط لوله CI این است که هنگام ورود، یک تصویر بسازید، آزمایش ها را اجرا کنید و سپس تصویر را در Docker Hub (یا رجیستری دیگر) برای استفاده در مراحل پایین دستی منتشر کنید.

این مقاله بر نحوه راه‌اندازی Jenkins تمرکز دارد تا کد برنامه به‌روزرسانی شده را از GitHub بسازد، یک تصویر Docker بسازد، آزمایش‌ها را اجرا کند و آن را در رجیستری منتشر کند.

شما از یک برنامه ساده جاوا برای این منظور استفاده خواهید کرد، اما این فرآیند در پشته های مختلف تقریباً مشابه است.

انتشار در Docker Hub

این آموزش در معرفی اصول اولیه جاوا، جنکینز و داکر به خوبی کار می کند. ما در اینجا یک قدم جلوتر می‌رویم و نحوه انجام آخرین بررسی GitHub، ساختن یک تصویر Docker از برنامه و انتشار آن در Docker Hub را در صورت موفقیت توضیح می‌دهیم. به یک حساب Docker Hub نیاز دارید که رایگان است.

انتشار در مخزن تصویر کانتینر مرکزی (در این مورد، Docker Hub) یک عنصر کلیدی برای CI/CD سازمانی است، زیرا مکان مشترکی را برای استفاده مجدد از مصنوع در مراحل مختلف، از QA و آزمایش تا تولید، فراهم می‌کند.

جنکینز و داکر در داکر را بچرخانید

برای راه‌اندازی Jenkins با قابلیت اجرای Docker، دو تصویر Docker را در VM اجرا می‌کنیم. یک کانتینر میزبان «Docker-in-Docker» (تصویر docker:dind) برای دسترسی به خود داکر خواهد بود و دیگری میزبان جنکینز خواهد بود. این دو کانتینر از طریق شبکه و حجم با هم تعامل خواهند داشت. این روشی است که توسط سنکینز حمایت می‌شود.

ابتدا، یک VM جدید در ارائه دهنده ابر انتخابی خود ایجاد کنید. من از Google Cloud Platform (GCP) استفاده خواهم کرد.

یک راه عالی برای شروع سریع این معماری، شروع با ماشین مجازی است که قبلاً Docker و تصویر Docker-in-Docker را نصب کرده است. در کنسول GCP، من به Compute Engine دسترسی پیدا می کنم و روی Create New Instance کلیک می کنم. من از یک نمونه نسبتاً ساده N1-Medium استفاده می کنم زیرا Docker و Jenkins هر دو نصب های سنگینی هستند.

ترفند این است که Install Image را انتخاب کنید. برای نام تصویر، از docker:dind استفاده کنید. این اطمینان حاصل می کند که Docker CLI در دسترس است. همچنین، پورت ۸۰۸۰ را در معرض ترافیک خارجی قرار دهید، زیرا جنکینز به آن پورت گوش می دهد.

گوگل از پروژه های منبع باز برای هوش مصنوعی رونمایی می کند

هنگامی که VM شما فعال شد، با تایپ کردن docker --version مطمئن شوید که Docker در حال اجرا است.

اکنون می‌خواهید پل شبکه Docker را ایجاد کنید که کانتینرهای Jenkins و Docker-in-Docker به اشتراک خواهند گذاشت. شبکه docker ایجاد جنکین را اجرا کنید.

Docker-in-Docker را راه اندازی کنید

VM قبلاً تصویر docker:dind را اجرا می‌کند، اما ما می‌خواهیم آن را سفارشی کنیم. بنابراین docker container list را تایپ کنید، (چند نویسه اول) UID کانتینر را پیدا کنید و آن را با docker stop متوقف کنید. برای جزئیات دقیق در مورد این پیکربندی‌ها، اسناد را بررسی کنید.

اکنون با دستور موجود در فهرست ۱، کانتینر Docker-in-Docker را پشتیبان بگیرید.

فهرست ۱. اجرای docker:dind

docker run --name jenkins-docker --rm --detach --privileged --network jenkins --network-alias docker --env DOCKER_TLS_CERTDIR="" --volume jenkins-docker-certs:/certs/client --volume jenkins-data:/var/jenkins_home --publish 2735:2375 --publish 2376:2376 docker:dind --storage-driver overlay2

فهرست ۱ هنگام گوش دادن به پورت ۲۳۷۵ و شرکت در شبکه جنکینز که قبلا ایجاد کردید، تصویر داکر را راه اندازی می کند. توجه داشته باشید که ۲۳۷۵ پورت غیر SSL است. الزامات امنیتی شما ممکن است نیاز به گوش دادن به ۲۳۷۶ و ارائه کلیدهای مناسب داشته باشد.

کانتینر جنکینز را اجرا کنید

اکنون نمونه‌ای از تصویر رسمی جنکینز را اجرا می‌کنیم که در پل شبکه نیز شرکت می‌کند. دستور را در لیست ۳ اجرا کنید.

فهرست ۳. اجرای تصویر جنکینز در یک ظرف

sudo docker run --name my-jenkins --detach --network jenkins --env DOCKER_HOST=tcp://docker:2375 --volume /home/matthewcarltyson/jenkins:/var/jenkins --volume /usr/bin/docker:/user/bin/docker --publish 8080:8080 --publish 50000:50000 --user root jenkins/jenkins:lt

اکنون جنکینز با دسترسی به Docker در حال اجرا است. شما باید بتوانید VM در حال اجرا خود را در ۸۰۸۰ ضربه بزنید. توجه داشته باشید که چندین پرچم در این دستور اختیاری هستند – به ویژه، گوش دادن به ۵۰۰۰۰ فقط در صورتی مورد نیاز است که بخواهید نمونه های عامل جنکینز را به عنوان “master” به این نمونه فراخوانی کنند.

گذرواژه سیستم جنکینز

جنکینز یک رمز عبور به گزارش‌های خود خروجی می‌دهد. صفحه وب آن را درخواست خواهد کرد. به خط فرمان VM بروید و docker container list را تایپ کنید تا UID خود را برای نمونه “jenkins” بدست آورید، و docker logs --tail 50 را تایپ کنید تا رمز عبور مدیریت خود را بدست آورید.

اکنون رمز عبور سرپرست را در فرم برنامه وب وارد کنید.

جنکینز را پیکربندی کنید

بروید و روی Install Suggested Plugins کلیک کنید. در مرحله بعد از شما خواسته می شود که یک کاربر مدیر ایجاد کنید. این کار را انجام دهید. همچنین آدرس IP پیش‌فرض را بپذیرید و سرور را مجدداً راه‌اندازی کنید تا وقتی از شما خواسته شد افزونه‌ها بارگیری شوند.

چرا سیستم های Raft-native آینده جریان داده ها هستند؟

افزودن افزونه Docker

چندین افزونه Docker موجود است. ما از پلاگینی به نام “افزونه داکر” استفاده خواهیم کرد که با حداقل پیکربندی قدرت زیادی به شما می دهد. برای کنترل دقیق‌تر، می‌توانید افزونه docker-build-step یا تغییر به ساخت خط لوله را در نظر بگیرید.

به Manage Jenkins -> Plugins -> Available بروید و “docker” را در فیلد تایپ کنید. “افزونه Docker” را انتخاب کنید و آن را نصب کنید.

جنکینز به پلاگین Docker به عنوان “ابر” اشاره می کند. یک بار دیگر روی Manage Jenkins کلیک کنید و اکنون روی دکمه Manage Clouds and Nodes در وسط کلیک کنید. اکنون روی Configure Clouds در سمت چپ کلیک کنید.

این به شما امکان می‌دهد به شبکه پل که قبلاً ایجاد کرده‌اید دسترسی داشته باشید و به کانتینری که در حال اجرا است Docker متصل شوید.

برای نام، از چیزی که می‌شناسید مانند «Docker» استفاده کنید. روی Docker Cloud Details کلیک کنید تا فیلد Docker Host URI نمایش داده شود و “tcp://docker:2375” را در آنجا وارد کنید.

ذخیره کنید و به داشبورد جنکینز برگردید.

پروژه جنکینز را راه اندازی کنید

اکنون یک پروژه جنکینز راه‌اندازی می‌کنیم که از دو مرحله ساخت استفاده می‌کند – یکی که آخرین کد را از یک مخزن Git می‌کشد و برنامه را می‌سازد، و دیگری که تصویر را می‌سازد و آن را به Docker Hub می‌برد. این عمداً بسیار ساده است. در یک موقعیت واقعی، برنامه ممکن است در داخل Dockerfile یا ابزار دیگری “زیرساخت به عنوان کد” (IaC) ساخته شود.

در منوی اصلی روی New Item کلیک کنید و Freestyle Project را انتخاب کنید. نامی را که دوست دارید به آن بدهید.

در جزئیات پروژه، به بخش Build بروید، Execute Shell Script را انتخاب کنید و محتوای فهرست ۴ را وارد کنید.

فهرست ۴. اسکریپت شل برای دانلود و ساختن ساده جاوا

#!/bin/sh

REPOSRC=https://github.com/MTyson/simple-java.git
LOCALREPO=idg-java-docker

# We do it this way so that we can abstract if from just git later on
LOCALREPO_VC_DIR=$LOCALREPO/.git

if [ ! -d $LOCALREPO_VC_DIR ]
then
    git clone $REPOSRC $LOCALREPO
else
    cd $LOCALREPO
    git pull $REPOSRC
fi

chmod 777 mvnw

./mvnw clean package

# End

اسکریپت فهرست ۴ آخرین کد منبع پروژه جاوا را که در یافت می‌شود بررسی می‌کند یا می‌آورد. https://github.com/MTyson/simple-java.git. این فقط یک برنامه ساده “Hello world” Spring Boot است. هنگامی که اسکریپت جدیدترین را دریافت کرد، مجوز فرمان Maven را تغییر می‌دهد (در استفاده واقعی، ۷۷۷ بسیار مجاز است)، و سپس ساخت Maven را اجرا می‌کند.

Intro to Extism: یک کتابخانه WebAssembly برای برنامه ها و افزونه های قابل ارتقا

از افزونه Docker برای ساخت و انتشار تصویر استفاده کنید

حالا یک مرحله ساخت بعد از اسکریپت پوسته اضافه کنید و Build/Publish Docker Image را انتخاب کنید. در قسمت Directory for Dockerfile، «./idg-java-docker» را تایپ کنید. این با نام مخزن که در مرحله قبل استفاده کردید مطابقت دارد.

در قسمت Cloud، ابر “Docker” را که قبلا ایجاد کرده‌اید انتخاب کنید.

باکس Push Image را انتخاب کنید.

در قسمت Image، می‌خواهید نام کاربر یا سازمان را در Docker Hub (در مورد من، matttyson) و به دنبال آن یک اسلش و نام تصویر را که “simple-java” است، قرار دهید. بنابراین فرم username/simple-java است. در مورد من، matttyson/simple-java.

اکنون Registry Credentials را انتخاب کنید. در یک پروژه واقعی، شما قطعاً می خواهید از یک توکن مخفی (قابل ایجاد در Docker.io) استفاده کنید، اما ما آن را در اینجا ساده نگه می داریم و از نام کاربری و رمز عبور شما از داکر هاب استفاده می کنیم. در قسمت Credentials، روی افزودن کلیک کنید. محدوده را به عنوان جهانی رها کنید و از نام کاربری با رمز عبور استفاده کنید. اکنون به سادگی نام کاربری و رمز عبور خود را که برای ورود به برنامه وب Docker استفاده می کنید، اضافه کنید.

بعد از پذیرش اعتبار جدید، مطمئن شوید که در مرحله ساختی که ما در حال پیکربندی آن هستیم، به عنوان کاربر تنظیم شده است. اکنون ساختنی را ذخیره کنید.

بیلد را اجرا کنید

اکنون روی نام پروژه خود در بالا کلیک کنید تا به نمای کلی آن بازگردید، سپس روی دکمه Build Now در سمت چپ کلیک کنید.

بعد از یک لحظه، می‌بینید که ساخت در لیست پایین سمت چپ ظاهر می‌شود. روی آن کلیک کنید و Console Output را در سمت چپ انتخاب کنید تا پیشرفت گزارش‌ها را در ادامه ساخت مشاهده کنید.

وقتی ساخت کامل شد، می‌توانید از طریق مرورگر به فهرست مخازن خود در Docker Hub بروید تا تصویر جدید تازه پخته شده خود را مانند شکل ۱ ببینید.

شکل ۱. تصویر جدید در Docker Hub

تصویر داکر هاب

به رجیستری بروید

Devops یک منطقه وسیع و پیچیده است. این مقاله ابزارهایی را برای مدیریت یک عنصر حیاتی در اختیار شما قرار می دهد: گرفتن یک برنامه خام از کنترل نسخه و تبدیل آن به یک تصویر موجود در رجیستری Docker Hub.

شاید به این مطالب علاقمند باشید