У меня есть следующие действия GitHub, я хочу передать lastNotificationMessage
из задания развертывания в следующее задание (подробности см. на скриншотах):
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Get last notification
if: always()
id: notification
timeout-minutes: 1
run: |
LAST_NOTIFICATION=$(app get-last-notification)
echo "$LAST_NOTIFICATION"
echo "CUSTOM_LAST_NOTIFICATION=$LAST_NOTIFICATION" >> $GITHUB_ENV
outputs:
lastNotificationMessage: ${{ env.CUSTOM_LAST_NOTIFICATION }}
# otherVariable: other value
# otherVariable: other value
# otherVariable: other value
# otherVariable: other value
# otherVariable: other value
# otherVariable: other value
notification:
runs-on: ubuntu-latest
needs: deploy
if: always()
steps:
- name: Notification
timeout-minutes: 1
run: |
app send-notification \
--last-message "$LAST_NOTIFICATION_MESSAGE"
env:
LAST_NOTIFICATION_MESSAGE: ${{ needs.deploy.outputs.lastNotificationMessage }}
Когда я повторяю его при первом задании, он уже имеет значение (оно находится в формате с кодировкой base64url, чтобы убедиться, что оно не содержит каких-либо опасных символов).
Но при следующем задании, когда я проверяю его в результатах задания, оно всегда пусто. Я вижу, что другие переменные также имеют правильное значение.
В чем здесь проблема и как ее исправить?
Ниже приведен скриншот:
развернуть задание:
задание по уведомлению:
Другой метод, предложенный @Shayki, который я пробовал, но безуспешно:
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Deploy
id: deployToCloud
timeout-minutes: 1
run: |
echo "deploymentId=$DEPLOYMENT_ID" >> $GITHUB_OUTPUT
- name: Get last notification
if: always()
id: lastNotification
timeout-minutes: 1
run: |
LAST_NOTIFICATION=$(app get-last-notification)
echo "$LAST_NOTIFICATION"
echo "lastNotificationMessage=$LAST_NOTIFICATION" >> $GITHUB_OUTPUT
outputs:
deploymentId: ${{ steps.deployToCloud.outputs.deploymentId }}
lastNotificationMessage: ${{ steps.lastNotification.outputs.lastNotificationMessage }}
notification:
runs-on: ubuntu-latest
needs: deploy
if: always()
steps:
- name: Notification
timeout-minutes: 1
run: |
app send-notification \
--last-message "$LAST_NOTIFICATION_MESSAGE"
env:
DEPLOYMENT_ID: ${{ needs.deploy.outputs.deploymentId }}
LAST_NOTIFICATION_MESSAGE: ${{ needs.deploy.outputs.lastNotificationMessage }}
шаг развертывания:
следующий шаг:
Логика вашего рабочего процесса выглядит правильно. Я попробовал запустить его с некоторым упрощением и смог увидеть значение обоих заданий, напечатанное в журналах GitHub.
name: output
on:
workflow_dispatch
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Get last notification
if: always()
id: notification
timeout-minutes: 1
run: |
LAST_NOTIFICATION=1234567890
echo "$LAST_NOTIFICATION"
echo "CUSTOM_LAST_NOTIFICATION=$LAST_NOTIFICATION" >> $GITHUB_ENV
outputs:
lastNotificationMessage: ${{ env.CUSTOM_LAST_NOTIFICATION }}
notification:
runs-on: ubuntu-latest
needs: deploy
if: always()
steps:
- name: Notification
timeout-minutes: 1
run: |
echo "$LAST_NOTIFICATION_MESSAGE"
env:
LAST_NOTIFICATION_MESSAGE: ${{ needs.deploy.outputs.lastNotificationMessage }}
развернуть выходные данные задания:
Run LAST_NOTIFICATION=1234567890
LAST_NOTIFICATION=1234567890
echo "$LAST_NOTIFICATION"
echo "CUSTOM_LAST_NOTIFICATION=$LAST_NOTIFICATION" >> $GITHUB_ENV
shell: /usr/bin/bash -e {0}
1234567890
вывод задания уведомления:
Run echo "$LAST_NOTIFICATION_MESSAGE"
echo "$LAST_NOTIFICATION_MESSAGE"
shell: /usr/bin/bash -e {0}
env:
LAST_NOTIFICATION_MESSAGE: 1234567890
1234567890
Я нашел причину:
Значение, хранящееся в переменной, содержит base64url, закодированный одним секретным ключом. Я думал, что github не будет достаточно умен, чтобы это обнаружить, но он это обнаружил.
GitHub не позволяет передавать переменную, содержащую секретное значение, из одного задания в другое. Это уже указано в резюме, но я пропустил это:
Skip output 'lastNotificationMessage' since it may contain secret.
Поскольку я не могу передать переменную следующим заданиям, я вывожу ее на консоль только для проверки, мой окончательный код не будет содержать этих отголосков.