استفاده از فایلهای محیطی GitHub برای خروجیهای گردش کار Actions

برای یکی از پروژه های جانبی خود، از GitHub Actions برای ساخت و استقرار میکروسرویس های مختلف خود در Azure استفاده می کنم. در گردش کار، من اغلب یک مقدار را بازیابی می کنم (مانند دریافت نام یک رجیستری کانتینر) و از set-output
در خط لوله من دستور دهید تا بتوانم از مقدار آن خروجی در خط لوله خود استفاده کنم.
این نمونه ای از آنچه با استفاده از set-output
دستور در گردش کار GitHub Action شما به نظر می رسد:
# Abbreviated file
- name: Get ACR Server
id: getacrserver
run: |
loginServer=$(az acr list --resource-group ${{ secrets.resource-group-name }} --query "[0].loginServer" -o tsv)
echo "::set-output name=loginServer::$loginServer"
- name: Login to Azure Container Registry
run: az acr login --name ${{ steps.getacrname.outputs.acrName }}
- name: Build Docker image
run: |
docker build -t ${{ steps.getacrserver.outputs.loginServer }}/${{ inputs.app-name }}:${{ github.sha }} .
# Rest of workflow file
با این حال، در طول اجرای گردش کار، ممکن است برخی از اخطارها را در خروجی مشاهده کرده باشید که شبیه به این هستند:
The `set-output` command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/
من از set-output
همه جا در گردش های کاری Actions من فرمان دهید، بنابراین این هشدار زیاد آمد!
GitHub در اکتبر 2022 اعلام کرد که دستورات save-state و set-output را در GitHub Actions منسوخ خواهد کرد. بسیاری از افراد هنوز از این دستورات استفاده می کنند، بنابراین آنها این تغییر را در ژوئیه 2023 به تعویق انداختند، اما در این پست وبلاگ، در مورد اینکه فایل های GitHub Environment چیست و چگونه می توانید از آنها در گردش های کاری GitHub Actions خود برای مدیریت وضعیت استفاده کنید، صحبت خواهم کرد. و خروجی
فایل های محیطی در GitHub Actions چیست؟
در طول اجرای یک گردش کاری GitHub Action، رانر فایل های موقتی را تولید می کند که می توانیم از آنها برای انجام اقدامات خاصی استفاده کنیم. با استفاده از متغیرهای محیط پیش فرض GitHub می توان به مسیر این فایل ها دسترسی پیدا کرد و ویرایش کرد.
متغیرهای محیطی مورد علاقه ما هستند GITHUB_OUTPUT
متغیر این متغیر مسیر فایل موقت در رانر GitHub است که میتوانیم از آن برای تنظیم خروجی مرحله فعلی از دستورات گردش کار استفاده کنیم.
برای اطلاعات بیشتر در مورد متغیرهای محیطی در GitHub Actions، مستندات را بررسی کنید.
در حال تغییر گردش کار برای استفاده از GITHUB_OUTPUT برای تنظیم یک پارامتر خروجی
برای تنظیم خروجی با استفاده از GITHUB_OUTPUT
، می توانیم این کار را در گردش کار خود با استفاده از موارد زیر انجام دهیم:
echo "{name}={value}" >> "$GITHUB_OUTPUT"
با اعمال این تغییر در گردش کار ما در بالا، اکنون به شکل زیر خواهد بود:
# Abbreviated file
- name: Get ACR name
id: getacrname
run: |
acrName=$(az acr list --resource-group ${{ secrets.resource-group-name }} --query "[0].name" -o tsv)
echo "acrName=$acrName" >> "$GITHUB_OUPUT"
- name: Get ACR Server
id: getacrserver
run: |
loginServer=$(az acr list --resource-group ${{ secrets.resource-group-name }} --query "[0].loginServer" -o tsv)
echo "loginServer=$loginServer" >> "$GITHUB_OUTPUT"
# Rest of workflow file
توجه داشته باشید که ما هنوز به یک id
در ما getacrname
مرحله ای را انجام دهید تا بعداً بتوانیم مقدار خروجی را بازیابی کنیم. تنها چیزی که در اینجا تغییر می کند این است که به جای استفاده از set-output
دستور، ما گردش کار خود را برای استفاده تغییر داده ایم $GITHUB_OUTPUT
در عوض
اکنون که متغیر محیطی خود را در آن نوشتیم $GITHUB_OUTPUT
، می توانیم از آن در هر مرحله بعدی در یک کار گردش کار استفاده کنیم، مانند:
# Abbreviated file
- name: Get ACR name
id: getacrname
run: |
acrName=$(az acr list --resource-group ${{ secrets.resource-group-name }} --query "[0].name" -o tsv)
echo "acrName=$acrName" >> "$GITHUB_OUPUT"
- name: Get ACR Server
id: getacrserver
run: |
loginServer=$(az acr list --resource-group ${{ secrets.resource-group-name }} --query "[0].loginServer" -o tsv)
echo "loginServer=$loginServer" >> "$GITHUB_OUTPUT"
- name: Login to Azure Container Registry
run: az acr login --name ${{ steps.getacrname.outputs.acrName }}
- name: Build Docker image
run: |
docker build -t ${{ steps.getacrserver.outputs.loginServer }}/${{ inputs.app-name }}:${{ github.sha }} .
# Rest of workflow file
با اجرای این، ما هشدارهایی را که هنگام استفاده دریافت کردیم مشاهده می کنیم set-output
اکنون ناپدید شده اند
بسته شدن
همانطور که می بینید، این یک تغییر نسبتاً ساده است. با استفاده از $GITHUB_OUTPUT
، می توانیم متغیرهایی را که به آنها نیاز داریم در مراحل بعدی گردش کار GitHub Actions بنویسیم، درست مانند زمانی که از set-output
فرمان
فعالیت زیادی از GitHub در مورد آن انجام نشده است چه زمانی آنها مستهلک خواهند شد set-output
، اما من دوست دارم در مورد این موارد فعال باشم، بنابراین توصیه می کنم شما نیز فعال باشید (فقط قبل از ادغام به اصلی، تغییرات در گردش کار خود را آزمایش کنید.)
اگر در این مورد سؤالی دارید، لطفاً در BlueSky با من تماس بگیرید!
تا دفعه بعد، کد نویسی مبارک! 🤓🖥️