איך להעביר מידע בין שלבים ב Github Action
קובץ yml של גיטהאב אקשן מחולק לשלבים, וכל שלב עושה דברים - לדוגמה יהיה לנו שלב אחד שמושך את הפרויקט מהריפו, שלב אחר שמתקין את התלויות, שלב נוסף שבונה, שלב שמריץ בדיקות ואם הכל עבר כמו שצריך שלב שמתקין את הגירסה החדש לשרת.
הבעיה מתחילה כשצריך להעביר מידע בין השלבים - לדוגמה בשביל להשתמש בפלט משלב אחד כדי לעשות משהו חדש בשלב אחר, או כדי להשתמש בתוצאה של שלב אחד בתור ערך של פרמטר (בתוך with) של שלב אחר.
הדרך שבחרו בגיטהאב לממש את זה היא באמצעות קובץ שכל שלב יכול להוסיף אליו שורות, וכל שלב יכול לקרוא ממנו מידע. התנאי היחיד הוא שכל שורה צריכה להיות בפורמט:
KEY=value
את שם הקובץ הם לא מספרים לכם, אבל מעבירים ל yml בתור משתנה סביבה שנקרא GITHUB_OUTPUT
. בשביל לקרוא מהקובץ משתמשים במשתנה המיוחד ${{steps.STEP_ID.outputs.KEY}}
. דוגמה? ברור בשביל זה באנו-
# This is a basic workflow to help you get started with Actions
name: CI
on:
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run a one-line script
id: start
run: |
echo ONE=1 >> $GITHUB_OUTPUT
echo TWO=1 >> $GITHUB_OUTPUT
- name: Run a multi-line script
run: |
echo one is ${{steps.start.outputs.ONE}}
echo two is ${{steps.start.outputs.TWO}}
השלב השני ב yml כותב לסוף הקובץ GITHUB_OUTPUT
שורות בפורמט הדרוש, והשלב השלישי קורא את המידע ומדפיס אותו עם echo למסך.