Movatterモバイル変換


[0]ホーム

URL:


Arash Hatami

استقرار در CaaS ابرآروان با استفاده از Github Actions

در این پست به بررسی انتشار نسخه و استقرار خودکار روی کانتینتر ابری ابرآروان با استفاده از GitHub Actions می پردازیم.

  • آرش حاتمی

آرش حاتمی

2 min read
استقرار در CaaS ابرآروان با استفاده از Github Actions

احتمالا همه شما با سرویس هایCaaS آشنایی دارید ٬ پلتفرمی که با استفاده از آن می توانیم سرویس های خود را به صورت Container هایی مستقل در محیط ابری تعریف کنیم. این روش در کنار استفاده از ابزار های CI/CD در نهایت یک زیرساخت کاملا خودکار را در اختیار ما قرار میده تا کارهای سنتی به روش متفاوت و سریع تری انجام بشه. اگر بخوام روند کلی رو براتون شرح بدم ٬ در این روش با چنین مراحلی سرو کار داریم :

  • توسعه و اعمال تغییرات روی کد پروژه
  • اجرای خودکار تست ها و بررسی های مورد نیاز پروژه توسط ابزار CI
  • ساخت Image جدید از پروژه
  • انتشار نسخه جدید روی سکوی ابری توسط ابزار CD

ابزارهای CI/CD مختلفی وجود داره که روزانه با اون ها سر و کار داریم. یکی از محبوب ترین اون ها Github Actions هست که به راحتی میشه ازش در مخازن عمومی یا حتی شخصی استفاده کرد و یک Pipeline/Workflow خودکار برای انجام امور مختلف داشته باشیم.

ساختار Github Actions

در Github Actions ما با Workflow هایی سر و کار داریم که هرکدوم شامل Action های مختلف میشه. برای هر کار یک Action مشخص نوشته شده که دقیقا همان کار را برای ما انجام میده. برای مثال اگر بخواهید برای یک پروژه پایتون CI ساده ای داشته باشید به این اکشن ها ( همون Step خودمون ) نیاز دارید :

  • Checkout project
  • Setup Python
  • Lint code
  • Run test

استقرار پروژه

همونطور که پیش تر بهش اشاره کردم ٬ شما از پروژه خودتون یک Docker Image ساخته و اون رو روی سکوی ابری ( CaaS ) مستقر میکنید. برای مثال نسخهv1.3.9 از پروژه ای به نام Test. حالا پس از یک ماه کلی تغییر توی اون اعمال کرده ٬ مشکلاتش رو حل میکنید و باقی موارد و در نهایت نسخهv1.4.0 از پروژه آماده میشه. جهت به روزرسانی Container خودتون باید چه کاری انجام بدید؟

در حالت عادی ( فارق از اینکه برای انتشار نسخه از ابزارهای CI/CD استفاده بکنید یا خیر ) باید به پنل کاربری ابرآروان خودتون رفته و در بخش سکوی ابری ٬ پروژه خودتون رو انتخاب کرده و سپس نسخه Image جدید برای App مربوطه معرفی کنید. شاید این کار جوابگوی نیاز شما باشه ولی با تعاریف ما از محیط توسعه و انتشار مدرن و اهداف اصلی خودکار سازی روند و سرعت بخشیدن به کارها از همه نظر در تناقضه.

حل مشکل

برای حل این مشکل و رسیدن به راه های بهینه/معقول تر امکان استفاده از ابزار CLI برای شما وجود داره تا با نصب و استفاده از اون بتونید راه میانبر خوبی برای روش فعلی داشته باشید. برای مثال جهت انتشار آخرین نسخه ای که در موردش صحبت کردیم اجرای چنین دستوری کفایت میکنه:

arvan paas set image deployment Test TestContainer=Org/Test:v1.4.0

بسیار خب ٬ کار ساده و سریع تر شد و دیگه نیاز نیست به پنل برید و خودتون دستی نسخه جدید رو ثبت کنید. ولی آیا تمام مشکلات حل شد؟ مسلما خیر ٬ هنوزم مواردی وجود داره:

  • این ابزار باید روی سیستم یک نفر اجرا بشه. تیم/سازمان نمیتونه یک یا چند نفر رو به طور مشخص برای این کار انتخاب کنه ( به علت دسترسی ها و مسائل امنیتی )
  • نفر مربوطه باید منتظر باشه که نسخه جدید از ابزار توسط CI بررسی و ساخته بشه و روی Registry قرار بگیره
  • همیشه امکان خطای انسانی وجود داره. فرض کنید نتیجه تست ها مشکل داشت ولی کاربر اشتباهی یک Workflow دیگه رو بررسی کرده یا اصلا حواسش نبوده و فرض رو بر موفقیت آمیز بودن اون گرفته. به روزرسانی نسخه رو انجام میده و بوم !!! به راحتی یک سرویس از دست میره

حل اساسی مشکل

ما که داریم یک کاری رو انجام میدیم ٬ چرا درست انجامش ندیم؟ راه حل درست برای مشکلات مطرح شده اینه که کل روند تست ٬ بررسی ٬ ساخت و انتشار به طور خودکار انجام بشه. اینجا است که باید از جاده خاکی خارج بشیم و به راه درست و اصلی برگردیم یعنی استفاده منطقی از روند CI/CD. ما وقتی با استفاده از ابزار CI نسخه جدید از پروژه رو ساخته و روی Registry آپلود میکنیم ٬ چرا همونجا هم به روزرسانی پروژه رو انجام ندیم؟ اینجا است که باید از Action مناسب استفاده کنید.

ArvanCloud PaaS Action

کاری که این Action برای شما انجام میده دقیقا معادل اجرا کردن دستور ذکر شده در مرحله قبل روی یک سیستم خواهد بود. با این تفاوت که مدیریت این سیستم و اجرای دستور به فرد خاصی سپرده نمیشه ٬ نگران دسترسی ها نیستید ٬ خطای انسانی وجود نداره و در نهایت مطمئن هستید که روند استقرار در لحظه انجام میشه. برای این کار کافیه Step زیر رو به Workflow خودتون اضافه کنید:

- name: Deploy new version  uses: hatamiarash7/ar-paas-action@v1.0.0  with:    auth: ${{ secrets.API_TOKEN }}    app: Test    container: TestContainer    image: Org/Test:v1.4.0

نتیجه اجرا به این صورت خواهد بود:

> Run hatamiarash7ar-paas-action@v1.0.0  with:    auth: ***    app: Test    container: TestContainer    image: Org/Test:v1.4.0    version: 1.3.3* * * * * * * * * * * * * * * * * * * * **                                       **   Welcome to ArvanCloud PaaS Action   **                                       ** * * * * * * * * * * * * * * * * * * * *-----> Get data-----> Create directory-----> Download ArvanCloud CLI tool version: 1.3.3-----> LoginSelect arvan region:  [1] ir-thr-ba1Region Number[1]: 1Enter arvan API token: Valid Authorization credentials. Logged in successfully!-----> Deploydeployment.extensions/Test image updated

تنظیمات

جهت استفاده از این Action تنظیمات لازم در اختیار شما قرار داده شده ٬ توجه داشته باشید که تنظیمات هر Action به عنوان ورودی به آن داده میشه:

توضیحپیشفرضنوعنام
توکن اعتبارسنجی حساب کاربری شما در ابرآروان (راهنما )Stringauth
نام پروژه شما درپروژه سکوی ابریdefaultStringnamespace
نام برنامه شما در پروژه سکوی ابریStringapp
نام کانتینر شما در اپلیکیشن مورد نظرStringcontainer
ایمیج جدید جهت استقرارStringimage
نسخه ابزار CLI1.3.3Stringversion

در صورتی کهnamespace خاصی را مشخص نکنید ٬ پروژه پیشفرض شما انتخاب خواهد شد. در حالت عادی اکثر کاربران تنها یک پروژه در سکوی ابری ابرآروان دارند و نیازی به تنظیم این گزینه نیست.

نمونه Workflow

در ادامه یک نمونه Workflow ساده و کامل از CI/CD نهایی مشاهده می کنید:

name: Publishon:  push:    tags: ["v*.*.*"]env:  IMAGE_NAME: org/testjobs:  publish:    runs-on: ubuntu-latest    permissions:      contents: read      packages: write      id-token: write    steps:      - name: Checkout repository        uses: actions/checkout@v3      - name: Setup Node        uses: actions/setup-node@v3        with:          node-version: "16.x"          registry-url: "https://registry.npmjs.org"      - name: Build UI        working-directory: ./ui        run: |          npm install          npm run build      - name: Get version        run: echo "APP_VERSION=${GITHUB_REF##*/}" >> $GITHUB_ENV      - name: Build image        run: docker build -t ${{ env.IMAGE_NAME }}:${{ env.APP_VERSION }} .      - name: Login to Docker Hub        uses: docker/login-action@v2        with:          username: ${{ secrets.DOCKERHUB_USERNAME }}          password: ${{ secrets.DOCKERHUB_TOKEN }}      - name: Push to Dockerhub        run: docker push ${{ env.IMAGE_NAME }}:${{ env.APP_VERSION }}      - name: Publish to ArvanCloud PaaS        uses: hatamiarash7/ar-paas-action@v1.0.0        with:          auth: ${{ secrets.R1C_API }}          namespace: myproject          app: test          container: test-container          image: ${{ env.IMAGE_NAME }}:${{ env.APP_VERSION }}

مشارکت

این اکشن به صورت متن باز بوده و همه میتوانند در توسعه آن مشارکت کنند. اگر مشکلی در استفاده از این اکشن داشتید یا ایده ای برای بهبود آن دارید میتوانید از طریق یکIssue آن را در میان بگذارید.

GitHub - hatamiarash7/ar-paas-action: ArvanCloud PaaS Action
ArvanCloud PaaS Action. Contribute to hatamiarash7/ar-paas-action development by creating an account on GitHub.
GitHubhatamiarash7
Generated by DALL-E 3

استفاده پیشرفته از Type Hint ها در پایتون

در پایتون نسخه ۳.۵ ویژگی جدید به نام Type Hints معرفی شد که راهی برای ایمن بودن Type ها ایجاد کرد. حالا پس از گذشت این همه سال و نسخه های مختلفی که منتشر شده، Type Hint ها بسیار جامع تر شده اند. در این مقاله به بررسی استفاده های حرفه ای از این ویژگی می‌پردازیم.
3 min read
حذف متریک های سنگین در Prometheus

حذف متریک های سنگین در Prometheus

در این مقاله می خواهیم نحوه حذف متریک های سنگین در Prometheus را بررسی کنیم. استفاده از لیبل ها و متریک ها باعث بهبود مانیتورینگ و افزایش سرعت در جستجوی متریک ها می شود. اما در برخی موارد ممکن است متریک هایی وجود داشته باشد که نیازی به آنها نداریم و ممکن است باعث بار سنگینی بر روی Prometheus شوند.
استقرار آبی-سبز با DNS
ویژه

استقرار آبی-سبز با DNS

سیستم نام دامنه یک راه هدایت ترافیک در اینترنت است که میشه ازش برای مسیریابی استفاده کرد. این همون چیزیه که امکان استقرار سبز-آبی را به راحتی فراهم میکنه.
1 min read

[8]ページ先頭

©2009-2025 Movatter.jp