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

مقدمه
در یک گردش کار پیچیده 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 خود را بهتر بهینه کنید!
انتقال داده های حساس بین مشاغل
گاهی اوقات، شما می خواهید برخی از اطلاعات محرمانه را بین کارها، اعم از کلیدهای 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، مقادیر پویا، یا ساخت مصنوعات هستید، خروجیهای کار راههای انعطافپذیر و ایمن را برای مدیریت دادهها در میان مشاغل به شما ارائه میدهند. با پیروی از بهترین شیوهها، ویژگیهای افزودن ماسک، و استراتژیهای ماتریس، در موقعیتی خواهید بود که گردشهای کاری امن، قابل نگهداری و کارآمد ایجاد کنید.