يتكون فريقنا من مطور واحد ومهندس DevOps واحد. أنا مسؤول عن نشر التطبيق على نظام Amazon ECS. كخادم CI / CD ، أستخدم Bamboo. في هذه المقالة ، سوف أصف بالتفصيل كيف أنشر تطبيقًا في بيئة مطورة.


بناء صورة عامل الميناء
أنا هنا اتبع الخطوات التالية:
- الخطوة 1: تثبيت وتكوين عامل الميناء ؛
- الخطوة 2: تكوين القطع الأثرية في الخيزران ؛
- الخطوة 3: تكوين مستودع Amazon ECR ؛
- الخطوة 4: بناء صورة عامل الميناء في الخيزران.
الخطوة 1: تثبيت وتكوين Docker
أولاً ، أقوم بترقية الخادم حيث تم تثبيت Bamboo ، وتثبيت الحزم اللازمة ، وإعداد مستودع Docker. تجدر الإشارة إلى أنني قمت بتثبيت Bamboo على نظام التشغيل CentOS 7. يمكن العثور على معلومات حول تثبيت عامل ميناء على أنظمة التشغيل الأخرى على
www.docker.com .
$ sudo yum update $ sudo yum install -y yum-utils device-mapper-persistent-data lvm2 $ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
ثم أقوم بتثبيت تطبيق Docker وبدء الخدمة:
$ sudo yum install docker-ce docker-ce-cli containerd.io $ sudo systemctl enable docker $ sudo systemctl start docker
ثم أضفت مستخدم الخيزران إلى مجموعة Docker:
$ sudo usermod -aG docker bamboo $ sudo su - bamboo $ docker run hello-world
إذا ، بعد تشغيل هذه الأوامر ، يستجيب عامل التشغيل برسالة "Hello from Docker!" ، فهذا يعني أن التثبيت يعمل بشكل صحيح.
الخطوة 2. تكوين القطع الأثرية في الخيزران
تطوير التطبيق قيد التنفيذ في
Grails . عند ترجمة التطبيق ، يتم إنشاء ملف به حرب التمديد. هذا الملف ، في مصطلحات الخيزران ، هو قطعة أثرية. تكوين Bamboo لاستخدام هذا الملف في المهام اللاحقة. للقيام بذلك ، انتقل إلى علامة التبويب "
المهام" :

وأعدت مهمة Grails ، كما هو موضح أدناه:

نرى أن Grails يمسح مجلد التصميم أولاً ، ثم يقوم بإجراء الاختبارات ، ويقوم أخيرًا بإنشاء ملف حرب لبيئة dev.
بعد ذلك ، انقر فوق علامة التبويب
Artifacts والزر "
إنشاء قطعة أثرية" :

أعرّف قطعة أثرية كما هو موضح أدناه:

يضع Grails ملف الحرب في دليل
build / libs . سوف أتحقق من المعلمة
المشتركة ، حيث سأحتاج إلى هذه الأداة لاحقًا.
أقوم الآن بإنشاء مشروع نشر وتحديد قطعة أثرية لاستخدامها في خطة الإنشاء الخاصة بي:


قمت أيضًا بإعداد مهمة
تنزيل Artifact في مشروع النشر:

وهكذا ، تم تكوين Bamboo الآن لاستخدام ملف حرب.
الخطوة 3. تكوين مستودع Amazon ECR
Amazon ECR هي خدمة تخزين وإدارة Docker للصور. لتكوين ، افتح وحدة التحكم AWS وحدد ECR:

بعد إنشاء المستودع ، أحصل على العنوان التالي:
aws_account_id.dkr.ecr.us-east-2.amazonaws.com/onboard
بعد الانتهاء من الإعداد ، يمكنك أيضًا العثور على إرشادات حول كيفية تسجيل الدخول ، وكيفية تنزيل صورة من المستودع وتحميل الصورة إلى المستودع.
الخطوة 4: بناء صورة عامل الميناء في الخيزران
أحتاج الآن إلى تكوين المشغل لبدء بناء صورة Docker. للقيام بذلك ، انتقل إلى علامة التبويب
المشغلات وانقر على زر "
إضافة مشغل" :

هنا ، حدد الخيار
Build بعد إنشاء مخطط الخطة بنجاح حتى يتم إنشاء صورة Docker بعد تجميع المشروع.
الآن نحن بحاجة إلى إضافة مهمة بناء صورة Docker. للقيام بذلك ، انتقل إلى علامة التبويب "
المهام" ، انقر فوق "
إضافة مهمة" ، وحدد نوع
عامل التشغيل . أدخل وصفًا وحدد
إنشاء صورة Docker من القائمة المنسدلة. في حقل
المستودع ، أدخل
aws_account_id.dkr.ecr.us-east-2.amazonaws.com/onboard:latest.
بالنسبة إلى Dockerfile ، يمكن أن يكون كما هو موضح أدناه:
FROM openjdk:8-jre COPY *.war /usr/src/onboard.war WORKDIR /usr/src CMD ["/bin/bash", "-c", "java -DdataSource.url=$DATASOURCE_URL -DdataSource.username=$DATASOURCE_USERNAME -DdataSource.password=$DATASOURCE_PASSWORD -jar onboard.war"]
عند بدء تشغيل التطبيق ، يجب عليك تحديد قاعدة البيانات. تستخدم متغيرات البيئة DATASOURCE_URL و DATASOURCE_USERNAME و DATASOURCE_PASSWORD لنقل هذه المعلومات إلى التطبيق ، ولكن يتم تعيين قيمها عند بدء تشغيل الحاوية.
هذا يكمل عملية الإعداد لتجميع صورة Docker مع التطبيق. الخطوة التالية هي تهيئة تنزيل هذه الصورة إلى مستودع Amazon ECR.

قم بتحميل الصورة على حاوية التسجيل المرنة
يمكنك استخدام تطبيق Container Container Registry لتخزين الصور المجمعة باستخدام Bamboo. لتحقيق ذلك ، اتبع الخطوات التالية:
- الخطوة 1. تثبيت Amazon ECR Docker Credential Helper
- الخطوة 2. قم بتوصيل دور IAM بخادم الخيزران
- الخطوة 3: تكوين مهمة تمهيد صورة Docker
الخطوة 1. تثبيت Amazon ECR Docker Credential Helper
لتنزيل صور Docker إلى Amazon ECR ، يجب أن يكون لديك بيانات اعتماد. يمكن الحصول على بيانات الاعتماد هذه عن طريق تشغيل الأمر
aws ecr get-login
ومع ذلك ، فإن أوراق الاعتماد هذه صالحة فقط لمدة 12 ساعة. لذلك ، يمكنك إما تشغيل الأمر أعلاه في كل مرة قبل تحميل الصورة إلى ECR ، أو تثبيت ECR Docker Credential Helper ، والتي تحافظ على بيانات الاعتماد المؤقتة محدثة وتسجيل الدخول إلى ECR. اتبع هذه الخطوات لتثبيت ECR Docker Credential Helper.
تحتاج أولاً إلى تثبيت
git ثم استنساخ مستودع github:
$ sudo yum install git $ sudo su - bamboo $ git clone https://github.com/awslabs/amazon-ecr-credential-helper.git $ make docker
ثم تحتاج إلى وضع الأسطر التالية في ملف /
home/bamboo/.docker/config.json :
{ "credsStore": "ecr-login" }
وانسخ التطبيق المترجم إلى دليل
/ usr / bin :
$ exit $ sudo cp /home/bamboo/docker-credential-ecr-login /usr/bin/
الخطوة 2. قم بتوصيل دور IAM بخادم الخيزران
لكي يتمكن خادم Bamboo من استخدام ECR ، تحتاج إلى إنشاء دور ، وإضافة سياسة
AmazonEC2ContainerRegistryPowerUser إلى هذا الدور ، ثم إرفاق هذا الدور بمثيل EC2 Bamboo. افتح وحدة التحكم AWS وحدد IAM. بعد ذلك ، انقر فوق الزر "
إنشاء دور" ، وحدد
خدمة AWS و
EC2 ، كما هو موضح أدناه:

ثم
نضغط على زر
التالي: أذونات وعلى الشاشة التالية نجد وحدد سياسة
AmazonEC2ContainerRegistryPowerUser . بعد ذلك ، ننتهي من إنشاء الدور وإرفاقه بخادم Bamboo الخاص بنا.
الخطوة 3: تكوين مهمة تمهيد صورة Docker
تطبيق قمنا ببناء ووضع صورة عامل ميناء مع ملف حرب. أنت الآن بحاجة إلى تحميل هذه الصورة إلى المستودع. للقيام بذلك ، أقوم بإضافة مهمة Docker أخرى ، هذه المرة لتحميل الصورة إلى مستودع ECR. أذهب إلى علامة التبويب "
المهام" ، ثم انقر فوق "
إضافة مهمة" ، وحدد نوع
Docker . أقوم بإدخال وصف وحدد
دفع صورة Docker إلى سجل Docker من القائمة المنسدلة. حدد
السجل المخصص وأدخل عنوان المستودع في حقل
السجل . بالنسبة
لنوع المصادقة ، حدد
استخدام بيانات اعتماد الوكيل الأصلية .
هذا يكمل عملية الإعداد لتحميل صورة Docker إلى مستودع Amazon ECR. تصف الخطوات التالية عملية تكوين نظام مجموعة وتشغيل تطبيق حاوية. ولكن قبل ذلك ، تحتاج إلى تكوين خيارات التشغيل للحاوية. هذا هو ما سنفعله الآن.

إنشاء تعريف مهمة ECS من Amazon
تعريف المهمة - مكتوبة معلمات تنفيذ الحاوية هنا. يستخدم تطبيقنا قاعدة بيانات يتم تحديد معلماتها عند بدء تشغيل الحاوية ، لذلك في هذا القسم سنقوم أيضًا بإنشاء قاعدة بيانات. أستخدم
Amazon RDS كقاعدة بيانات ، وأقوم بتخزين كلمة المرور للوصول إلى قاعدة البيانات في شكل مشفر في
متجر معلمات AWS Systems Manager . الخطوات التالية التي أتبعها لإنشاء تعريف المهمة:
- الخطوة 1. إنشاء قاعدة بيانات على مثيل Amazon RDS ؛
- الخطوة 2. تكوين AWS Systems Manager Parameter Store؛
- الخطوة 3. إنشاء تعريف المهمة.
الخطوة 1. إنشاء قاعدة بيانات على مثيل Amazon RDS
يستخدم تطبيقنا قاعدة بيانات PostgreSQL. لإنشاء قاعدة بيانات ، افتح وحدة التحكم AWS ، حدد خدمة Amazon RDS ، وانقر فوق الزر
إنشاء قاعدة بيانات ، ثم حدد
PostgreSQL كمحرك قاعدة البيانات. في الصفحة التالية ، حدد
Dev / Test كبيئة عمل وانقر فوق
التالي . ثم أقوم بتعيين
معرف مثيل قاعدة البيانات كـ onboard-dev-db ، وقم
بإدخال اسم المستخدم الرئيسي كـ
devdbadmin . ثم أذهب إلى الصفحة التالية لتكوين VPC ومجموعة الشبكة الفرعية ومجموعة الأمان. سيتم استخدام قاعدة البيانات هذه على شبكة خاصة ، لذا حدد
لا لمعلمة
إمكانية الوصول العامة . أقوم بإدخال
devdb في
حقل اسم قاعدة البيانات وانقر فوق الزر "
إنشاء قاعدة بيانات" .
الخطوة 2. تكوين AWS Systems Manager Parameter Store
أقوم بتخزين كلمة مرور قاعدة البيانات في شكل مشفر. للقيام بذلك ، افتح وحدة التحكم AWS وانتقل إلى AWS Systems Manager → الموارد المشتركة → متجر المعلمات → إنشاء معلمة. أقوم بإدخال
devdbpassword كاسم للمعلمة وحدد
SecureString لنوع المعلمة ، ثم أقوم بإدخال كلمة مرور قاعدة البيانات في حقل
القيمة .
الخطوة 3. إنشاء تعريف المهمة
Amazon ECS هو نظام المجموعة حيث يتم تشغيل تطبيقات الحاوية. يستخدم "تعريف المهمة" لتحديد معلمات التنفيذ لتطبيق حاوية. لتعيين هذه المعلمات ، انقر فوق الزر "
إنشاء تعريف مهمة جديد" . ثم حدد
Fargate كنوع بدء التشغيل
وانتقل إلى الخطوة التالية. أنا هنا تعيين اسم
onboard-dev-taskdef . لمعلمة
مجال دور IAM الخاص بتنفيذ المهام ، حدد
تكوين وظيفة جديدة . بالنسبة إلى الموارد المخصصة لهذا التطبيق ، أقوم بتعيين ٢ غيغابايت من الذاكرة و ١ وحدة معالجة فردية. الآن تحتاج إلى إضافة خيارات إطلاق الحاوية. سأقوم بتسمية الحاوية الموجودة
على ظهر
الحاوية . سوف اسم اسم الصورة مثل هذا:
aws_account_id.dkr.ecr.us-east-2.amazonaws.com/onboard:latest . ستهتم مساعد اعتماد ECR Docker من Amazon بمصادقة ECR ، لذلك أترك خيار
مصادقة المستودع الخاص بدون تحديد. في بيئة dev ، يكون التطبيق متاحًا على المنفذ 8080 ، لذلك بالنسبة لمعلمة تعيينات المنفذ ، اكتب
8080 وحدد بروتوكول
tcp . يتم تمرير معلمات عنوان URL لقاعدة البيانات واسم المستخدم وكلمة المرور إلى الحاوية باستخدام متغيرات البيئة. أنا وضعت هذه المعلمات في قسم متغيرات البيئة. من أجل الحصول على قيمة المعلمة
devdbpassword من "متجر المعلمات" ، حدد نوع
ValueFrom . آخر ما أقوم بتكوينه هو تكوين
السجل ، وهنا أقوم بتحديد
التكوين التلقائي لسجلات CloudWatch . الآن اكتمل إنشاء تعريف المهمة.
ومع ذلك ، يحتاج دور ecsTaskExecutionRole إلى سياسة للحصول على devdbpassword من "متجر المعلمات". للقيام بذلك ، انتقل إلى أدوار IAM وحدد ecsTaskExecutionRole ، انقر فوق
إضافة سياسة مضمّنة . في هذه الحالة ، أقوم بإضافة باستخدام محرر مرئي. لذلك ، في مجال الخدمة ، أدخل
مدير الأنظمة ، في حقل الإجراءات -
GetParameters . ثم انقر فوق
إضافة ARN لحقل الموارد وملء القيم الخاصة بي:

في النهاية ، أنظر إلى قيم المعلمات التي تم تعيينها من خلال النقر على مراجعة السياسة ، ومنحها اسمًا والانتهاء من العمل مع تكوين ecsTaskExecutionRole.
هذا يكمل تكوين إعدادات تطبيق حاوية الإطلاق. أنت الآن بحاجة إلى إنشاء مجموعة وخدمة ECS.

إنشاء خدمة Amazon ECS
يعمل تطبيق الحاوية الخاص بنا كخدمة في مجموعة ECS. لتكوين ، يجب عليك تنفيذ الخطوات التالية:
- الخطوة 1. إنشاء مجموعة Amazon ECS ؛
- الخطوة 2: إنشاء خدمة
الخطوة 1. إنشاء مجموعة أمازون ECS
لإنشاء كتلة ECS ، انتقل إلى وحدة التحكم AWS وحدد خدمة ECS. ثم انقر فوق "
إنشاء الكتلة" وحدد قالب كتلة
الشبكة فقط . في الصفحة التالية ، اسم المجموعة
على أنها
onboard-dev-cluster وأكمل المجموعة. الآن لدي كتلة ECS مقرها
Fargate .
الخطوة 2: إنشاء خدمة
لإنشاء خدمة ، انقر فوق الارتباط
onboard-dev-cluster ، ثم انتقل إلى علامة التبويب "
الخدمات" وانقر فوق الزر "
إنشاء" . بالنسبة
لنوع الإطلاق الأول ، حدد Fargate ، ولتحديد
Task Task ( تحديد
المهام) ، حدد onboard-dev-taskdef. بالإضافة إلى ذلك ، حددت onboard-dev-cluster في حقل الكتلة. في مجال
اسم الخدمة ، أكتب على متن dev-dev. قمت بتعيين المعلمة "
عدد المهام" على صفر ، حيث أنني لا أريد بدء التطبيق الآن. أترك معلمات
النسبة المئوية الدنيا الصحيحة تساوي 100 ،
والنسبة المئوية القصوى تساوي 200. لمعلمة
نوع النشر ، حدد
تحديث رولينج وانتقل إلى الخطوة التالية.
في صفحة
"تكوين الشبكة" ، بالنسبة إلى معلمة
الكتلة VPC ، حددت VPC تم إنشاؤه مسبقًا يسمى
تطوير VPC . التطبيق قيد التطوير متاح فقط على الشبكة الخاصة ، لذلك اخترت شبكتين فرعيتين خاصتين. لتكوين مجموعات الأمان ، انقر فوق الزر "
تحرير" ، ثم حدد "
تحديد مجموعة الأمان الحالية" ، ثم مجموعة الأمان
الافتراضية وانقر فوق الزر "
حفظ" . بالنسبة إلى معلمة
IP العامة للتخصيص التلقائي ، حدد
معطل . بعد ذلك ، بالنسبة إلى معلمة
نوع موازن التحميل ، حددت بلا ، واترك خيار
تمكين تكامل اكتشاف الخدمة دون تحديد . ثم انقر فوق
التالي ، التالي وإنشاء الخدمة .
لدي الآن خدمة يكون فيها عدد الوظائف قيد التشغيل صفرًا. سنقوم بتهيئة تشغيل التطبيق في الخطوة التالية.

تحديث الخدمة
بمجرد أن يقوم المطور بتحديث رمز التطبيق ، يمضي نشرنا في إنشاء صورة Docker ، وتحميلها إلى Elastic Container Registry ، ثم تشغيل تطبيق الحاوية أخيرًا في مجموعة ECS Fargate. في الوقت الحالي ، عدد الوظائف التي تعمل في الكتلة هو صفر. لكي يبدأ التطبيق ، تحتاج إلى تحديث الخدمة ، مع الإشارة إلى الكمية المساوية للكمية. أتبع هذه الخطوات لتحقيق ذلك:
- الخطوة 1. تثبيت المهام ل AWS Bamboo plugin ؛
- الخطوة 2. تحديث خدمة ECS
الخطوة 1. تثبيت المهام ل AWS Bamboo plugin
مهام AWS Bamboo هي مكون إضافي يعمل على تبسيط عملية إعداد موارد AWS وتشغيلها من مشاريع إنشاء ونشر Bamboo. لتثبيت هذا المكون الإضافي ، انتقل إلى مشروع النشر ، وانقر فوق
إضافة مهمة ، وانتقل إلى موقع أتلاسيان ، وقم بتثبيت
مهام لـ AWS (Bamboo) .
الخطوة 2. تحديث خدمة ECS
الآن في مشروع النشر ، أقوم بإضافة وظيفة
Amazon ECS Service . ثم أكتب في حقل الوصف الوظيفي
Update Service لـ onBoard-dev . في مجال الإجراء ، حدد
تحديث الخدمة وفرض
النشر الجديد . ثم اخترت شرق الولايات المتحدة (أوهايو) كمنطقة الإطلاق. ثم أكتب في الحقول المناسبة ARN (اسم مورد الأمازون) لمهمة التعريفة ، العنقودية والخدمة. في هذه المهمة ، أقوم بتحديث العدد المطلوب من مهام التشغيل إلى واحدة. بعد ذلك ، أملأ مربع النص الخاص بتكوين النشر بالقيم التالية:
{ "maximumPercent": 200, "minimumHealthyPercent": 100 }
أقوم بإعداد شبكة بدون عنوان IP عام كما يلي:
{ "awsvpcConfiguration": { "assignPublicIp": "DISABLED", "subnets": ["subnet-ID1", "subnet-ID2"], "securityGroups": ["sg-ID"] } }
في قسم
المصدر لبيانات اعتماد أمان AWS ، حدد
IAM Role لـ EC2 .
يجب أن أكون قادرًا على تحديث ECS ، لذلك أرفق سياسة
AmazonECS_FullAccess بمثيلتي Bamboo EC2. للقيام بذلك ، افتح وحدة التحكم AWS ، حدد IAM. ثم حدد الدور الذي أستخدمه لخادم Bamboo الخاص بي. انقر فوق الزر "
إرفاق السياسات" ، وأجد سياسة AmazonECS_FullAccess ، وحدد مربع الاختيار الموجود على اليسار وإنهاء إرفاق السياسة.
هذا يخلص من إعداد CI / CD باستخدام AWS و Bamboo. وبالتالي ، عندما يقوم المطور بتحديث رمز التطبيق ، يتم تحميل هذا الرمز إلى مستودع التخزين ، ويتم تشغيل اختبار وتجميع التطبيق. ثم يتم إنشاء صورة Docker مع ملف الحرب للتطبيق ، ويتم نسخ هذه الصورة إلى مستودع Amazon ECR. بعد ذلك ، في نظام Amazon ECS ، يتم تشغيل تطبيق الحاوية كخدمة ، والتي تقوم بتحديث التطبيق الحالي إذا لم يتم إيقافه. إذا تم إيقاف التطبيق لتوفير الموارد ، فسيبدأ التطبيق ببساطة. بعد التحقق من التطبيق في بيئة التطوير ، يمكنك إيقاف التطبيق عن طريق تحديد عدد المهام التي تعمل في الكتلة إلى الصفر.
إذا أعجبك المقال ولديك أفكار للتحسين ، فاكتب في التعليقات.