无法将Workflow输入变量传递至Action的问题求助
解决GitHub Action邮件步骤无法获取workflow_dispatch输入参数的问题
以下是三种可靠的解决方案,任选其一即可:
方法1:直接引用github.event.inputs上下文
你之前的邮件步骤存在语法错误,修正后可直接使用${{ github.event.inputs.site_name }}。注意用双引号或多行字符串包裹body内容,避免解析异常:
- name: Send mail if: always() uses: dawidd6/action-send-mail@v3 with: server_address: smtp_server.mydomain.com subject: ${{ github.repository }} deployment status ${{ job.status }} to: me.mydomain.com from: repo@mydomain.com body: "${{ github.event.inputs.site_name }} has status of ${{ job.status }}"
若需多行内容,改用管道符定义:
body: | 部署站点:${{ github.event.inputs.site_name }} 部署结果:${{ job.status }}
方法2:通过步骤输出变量传递
在部署步骤中将参数写入步骤输出,后续邮件步骤读取该输出:
steps: - run: | site_name="${{ github.event.inputs.site_name }}" ansible-playbook playbook1.yml -e "site_name=$site_name" ansible-playbook playbook2.yml -e "site_name=$site_name" ansible-playbook playbook3.yml -e "site_name=$site_name" # 将参数写入步骤输出 echo "site_name=$site_name" >> $GITHUB_OUTPUT id: site_deployment shell: bash - name: Send mail if: always() uses: dawidd6/action-send-mail@v3 with: server_address: smtp_server.mydomain.com subject: ${{ github.repository }} deployment status ${{ job.status }} to: me.mydomain.com from: repo@mydomain.com body: "${{ steps.site_deployment.outputs.site_name }} has status of ${{ job.status }}"
方法3:使用Job级环境变量
将输入参数设为整个Job的环境变量,所有步骤均可直接访问:
jobs: deploy_new_website: runs-on: self-hosted # 定义Job级环境变量 env: SITE_NAME: ${{ github.event.inputs.site_name }} steps: - run: | # 直接使用环境变量 ansible-playbook playbook1.yml -e "site_name=$SITE_NAME" ansible-playbook playbook2.yml -e "site_name=$SITE_NAME" ansible-playbook playbook3.yml -e "site_name=$SITE_NAME" id: site_deployment shell: bash - name: Send mail if: always() uses: dawidd6/action-send-mail@v3 with: server_address: smtp_server.mydomain.com subject: ${{ github.repository }} deployment status ${{ job.status }} to: me.mydomain.com from: repo@mydomain.com body: "${{ env.SITE_NAME }} has status of ${{ job.status }}"
内容的提问来源于stack exchange,提问作者JimmyLlama
相关产品推荐
相关产品推荐

