رفع مشکل اجرا نشدن ورکفلو از داخل ورکفلوی دیگر در گیت هاب

mohsen1 سال قبل1 سال قبل
ارسال شده در
mohsen

فرض کنید که ما ورکفلویی در گیت های ایجاد کرده ایم که درون آن برای مثال قرار است تگی را ایجاد کنیم یا تغییری را در ریپازیتوری پوش کنیم که خود این کار باعث اجرای ورکفلوی دیگری بشود. در حالت عادی این کار باعث اجرای خودکار ورکفلوی دیگر نمی شود. دلیل این کار این است که به صورت پیش فرض در اکشن از GITHUB_TOKEN برای کار با ریپازیتوری استفاده می شود. برای مثال وقتی می خواهیم در ورکفلو کد را Checkout کنیم  بوسیله این اکسس توکنی که خودکار ایجاد شده انجام می شود.

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

برای حل این مشکل باید یک Personal Access Token یا اکسس توکن شخصی با دسترسی مورد نظر (برای مثال پوش کردن کد) درست کنیم و بوسیله آن عملیات مورد نظر را انجام دهیم. می توانیم PAT تولید شده را در سکرت ها ذخیره کنیم و از آن در زمان Checkout کد استفاده کنیم.

      - name: Check out the code
  uses: actions/checkout@v3
    with:
      fetch-depth: 0
      token: ${{ secrets.GH_PAT }}
    

در مثال بالا که PAT تولید شده در سکرت GH_PAT ذخیره شده است و در زمان checkout به جای GITHUB_TOKEN مورد استفاده قرار می گیرد.

حال اگر برای مثال در ادامه تگی را ایجاد کنیم و آن را پوش کنیم، این کار بوسیله PAT تولید شده ما انجام می شود.

      - name: Create tag
  run: |
    git config user.name "ci-bot"
    git config user.email "ci-bot@example.com"
    git tag -a v1.0.0 -m "Release v1.0.0"
    git push origin v1.0.0
    

و ورکفلوی زیر که در زمان پوش شدن تگ جدید باید اجرا شود نیز اجرا خواهد شد:

      name: Build

on:
  push:
    tags:
      - 'v*'
jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Log GitHub Context
        run: |
          echo "Event name: ${{ github.event_name }}"
          echo "Reference: ${{ github.ref }}"
          echo "Tag name: ${{ github.ref_name }}"
          echo "Push details: ${{ toJson(github) }}"
    
رای
0
ارسال نظر
مرتب سازی:
اولین نفری باشید که نظر می دهید!