برنامه نویسی

نحوه انتقال اطلاعات بین مشاغل در GitHub Actions

cicube.io

مقدمه

در یک گردش کار پیچیده CI/CD، داده های مختلف اغلب باید در بین مشاغل رد و بدل شوند. هر چیزی از متغیرهای محیطی تولید شده تا مصنوعات مهم ساخت بازی منصفانه خواهد بود. GitHub Actions از طریق چیزی که نامیده می شود از این کار پشتیبانی می کند خروجی های شغلی، که می تواند گردش کار شما را بسیار ماژولارتر و انعطاف پذیرتر کند. اعم از اعتبار API، شناسه پایگاه داده، چیزی که به صورت پویا تولید می‌شود، خروجی‌های کار راهی ساختاریافته برای انتقال اطلاعات بین مشاغل وابسته ارائه می‌کنند.

تعریف خروجی های شغلی

خروجی های یک کار در GitHub Actions در داخل کار با استفاده از آن تعریف می شوند outputs زمینه اینها به نتایج مراحل در همان کار نگاشت می شوند و می توانند با استفاده از کلمه کلیدیdependentOn از مشاغل دیگر ارجاع داده شوند. خروجی ها همیشه رشته ای هستند و در پایان اجرای کار ارزیابی می شوند. خروجی ها به ویژه برای زمانی که می خواهید بتوانید اطلاعات پویا مانند نشانه ها، شناسه ها یا شماره نسخه ها را در جریان کاری خود ارسال کنید مفید هستند.



jobs:
  job1:
    runs-on: ubuntu-latest
    outputs:
      output1: ${{ steps.step1.outputs.result }}
    steps:
      - id: step1
        run: echo "result=hello" >> "$GITHUB_OUTPUT"
  job2:
    runs-on: ubuntu-latest
    needs: job1
    steps:
      - run: echo "Job 1 output: ${{ needs.job1.outputs.output1 }}"


وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در مثال بالا، job1 خروجی را با نام تعریف می کند output1 که بر روی نتیجه مرحله اول تنظیم شده است. سپس در job2 می توانید از مقدار آن خروجی با استفاده از زمینه نیازها استفاده کنید تا مقدار را بین کارها به طور یکپارچه منتقل کنید.

استفاده از خروجی ها در کارهای ماتریسی

اگر از رویکرد ماتریسی استفاده می کنید، چیزها تا حدودی جالب تر می شوند. کارهای ماتریسی برای هر نمونه از کار یک خروجی ایجاد می کنند. بهتر است مطمئن شوید که نام این خروجی ها منحصر به فرد است، به خصوص اگر از ترکیبی از چندین نسخه یا پیکربندی استفاده می کنید زیرا ترتیب اجرا برای کارهای ماتریسی تضمین نشده است.



jobs:
  job1:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        version: [1, 2, 3]
    outputs:
      output_${{ matrix.version }}: ${{ steps.generate_output.outputs.version }}
    steps:
      - id: generate_output
        run: echo "version=${{ matrix.version }}" >> "$GITHUB_OUTPUT"

  job2:
    runs-on: ubuntu-latest
    needs: job1
    steps:
      - run: echo "Matrix outputs: ${{ toJSON(needs.job1.outputs) }}"


وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در اینجا ماتریس سه نسخه ای را تعریف می کنیم. هر یک از کارهای ماتریسی یک کار را خروجی می دهد که شماره نسخه خود را نشان می دهد. job2 سپس می تواند از تمام خروجی های ماتریس بصورت بلوک استفاده کند needs زمینه


نظارت بر گردش‌های کاری GitHub Actions

CICube یک ابزار نظارت بر GitHub Actions است که برای بهینه‌سازی بیشتر خط لوله CI/CD خود، بینش‌های دقیقی را در مورد گردش کارتان در اختیار شما قرار می‌دهد. با CICube، می‌توانید گردش کار خود را ردیابی کنید، گلوگاه‌ها را درک کنید و بهترین‌ها را از زمان‌های ساخت خود به دست آورید. اکنون به cicube.io بروید و یک حساب کاربری رایگان ایجاد کنید تا گردش کار GitHub Actions خود را بهتر بهینه کنید!

نظارت بر مدت زمان گردش کار اقدامات GitHub CIcube


انتقال داده های حساس بین مشاغل

گاهی اوقات، شما می خواهید برخی از اطلاعات محرمانه را بین کارها، اعم از کلیدهای API، رمزهای عبور یا توکن ها، منتقل کنید. GH Actions عملکردی را برای مدیریت اسرار، مانند ویرایش آنها در گزارش‌ها، خارج از جعبه ایجاد می‌کند. همچنین می‌توانید اطلاعات حساسی را که به عنوان خروجی کار ارسال می‌کنید با استفاده از add-mask فرمان



jobs:
  job1:
    runs-on: ubuntu-latest
    outputs:
      api_key: ${{ steps.generate_key.outputs.key }}
    steps:
      - id: generate_key
        run: |
          key="my-sensitive-api-key"
          echo "::add-mask::$key"
          echo "key=$key" >> "$GITHUB_OUTPUT"
  job2:
    runs-on: ubuntu-latest
    needs: job1
    steps:
      - run: echo "Using API key: ${{ needs.job1.outputs.api_key }}"


وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در اینجا، در مثال بالا، کلید API ایجاد شده در job1 قبل از عبور به ماسک می شود job2 تا در لاگ ها نمایش داده نشود.

گذراندن اعتبار پایگاه داده -مورد استفاده در دنیای واقعی

یک نمای کاربردی را در نظر بگیرید – یک مثال در دنیای واقعی – فقط یک پایگاه داده را در خط لوله CI یکپارچه می کند. در یک کار، پایگاه داده ایجاد می‌کنید و سپس اعتبار یا رشته اتصال را برای هدف آزمایش به کار دیگری منتقل می‌کنید.



jobs:
  create-db:
    runs-on: ubuntu-latest
    outputs:
      db_id: ${{ steps.db_setup.outputs.db_id }}
      db_password: ${{ steps.db_setup.outputs.db_password }}
    steps:
      - id: db_setup
        run: |
          db_id=$(uuidgen)
          db_password=$(openssl rand -base64 32)
          echo "db_id=$db_id" >> "$GITHUB_OUTPUT"
          echo "db_password=$db_password" >> "$GITHUB_OUTPUT"

  test-db:
    runs-on: ubuntu-latest
    needs: create-db
    steps:
      - run: |
          echo "Testing database with ID: ${{ needs.create-db.outputs.db_id }}"
          echo "Using password: ${{ needs.create-db.outputs.db_password }}"


وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اینجا، create-db شناسه پایگاه داده و رمز عبور را خروجی می دهد. سپس اینها به عنوان استدلال ارائه می شوند test-db، که می تواند از آنها در انجام تست های ادغام استفاده کند.

نتیجه گیری

انتقال اطلاعات بین کارها در GitHub Actions می تواند واقعاً گردش کار CI/CD شما را تمیز و ساده کند. چه در حال ارسال کلیدهای API، مقادیر پویا، یا ساخت مصنوعات هستید، خروجی‌های کار راه‌های انعطاف‌پذیر و ایمن را برای مدیریت داده‌ها در میان مشاغل به شما ارائه می‌دهند. با پیروی از بهترین شیوه‌ها، ویژگی‌های افزودن ماسک، و استراتژی‌های ماتریس، در موقعیتی خواهید بود که گردش‌های کاری امن، قابل نگهداری و کارآمد ایجاد کنید.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا