برنامه نویسی

استفاده از فایل‌های محیطی 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 با من تماس بگیرید!

تا دفعه بعد، کد نویسی مبارک! 🤓🖥️

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

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

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

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