GitHub Enterprise带附件邮件发送及workflow_dispatch输入限制咨询
GitHub Enterprise下的两个Actions问题解决办法
一、发送带附件和报告路径的邮件
你在GitHub Enterprise里无法使用dawidd6/action-send-mail@v3,大概率是因为GHE无法访问外部GitHub公共仓库的动作。可以用以下两种方案解决:
方案1:将动作镜像到自己的GHE仓库
- 把
dawidd6/action-send-mail仓库fork到你的GitHub Enterprise实例中 - 在工作流里引用自己GHE仓库的动作路径,同时配置附件参数:
- name: Send mail with attachments uses: [你的GHE用户名]/action-send-mail@v3 with: server_address: smtp.yourcompany.com server_port: 587 username: ${{ secrets.MAIL_USER }} password: ${{ secrets.MAIL_PWD }} subject: 构建报告通知 body: 请查收附件中的构建报告 to: dev-team@yourcompany.com from: GitHub Actions <actions@yourcompany.com> attachments: ./build/report.pdf, ./logs/run.log # 多个附件用逗号分隔
注意:确保报告文件在当前工作流的运行目录中存在,若报告是之前步骤生成的,同job内直接写相对路径即可,跨job则需先通过actions/upload-artifact上传再下载。
方案2:用Shell命令直接发送(无需第三方动作)
通过安装邮件客户端(如mutt),用命令行发送邮件,完全不依赖外部动作:
- name: 安装mutt邮件客户端 run: sudo apt-get update && sudo apt-get install -y mutt - name: 发送带附件的邮件 run: | echo "本次构建的报告已生成,详情见附件" | mutt -s "构建完成通知" \ -a ./build/report.pdf \ -- dev-team@yourcompany.com
如果是Windows runner,可改用PowerShell的Send-MailMessage命令,参数逻辑类似。
二、workflow_dispatch输入项仅显示10个的问题
GitHub Enterprise和公共GitHub一致,workflow_dispatch的inputs字段最多支持10个输入项,这是官方硬限制。解决办法是合并输入项:
方法1:用逗号分隔合并同类输入
把多个同类型的输入(比如多个报告路径)合并成一个输入,在工作流里拆分处理:
on: workflow_dispatch: inputs: report_paths: description: "报告路径(多个用逗号分隔)" required: true default: "./build/report1.pdf,./build/report2.pdf"
然后在步骤中拆分路径:
- name: 处理报告路径 run: | IFS=',' read -ra PATH_LIST <<< "${{ github.event.inputs.report_paths }}" for path in "${PATH_LIST[@]}"; do echo "准备处理报告:$path" # 这里添加处理每个报告的逻辑 done
方法2:用JSON格式打包多个参数
如果输入项类型多样(路径、环境、收件人等),可以把所有参数打包成一个JSON字符串,在工作流里用jq解析:
on: workflow_dispatch: inputs: workflow_config: description: "工作流配置(JSON格式)" required: true default: '{"report_path": "./build/report.pdf", "deploy_env": "prod", "notify_users": ["user1@yourcompany.com", "user2@yourcompany.com"]}'
然后在步骤中解析参数:
- name: 解析配置参数 run: | REPORT_PATH=$(echo "${{ github.event.inputs.workflow_config }}" | jq -r '.report_path') DEPLOY_ENV=$(echo "${{ github.event.inputs.workflow_config }}" | jq -r '.deploy_env') NOTIFY_USERS=$(echo "${{ github.event.inputs.workflow_config }}" | jq -r '.notify_users | join(",")') echo "报告路径:$REPORT_PATH" echo "部署环境:$DEPLOY_ENV" echo "通知用户:$NOTIFY_USERS"
内容的提问来源于stack exchange,提问作者Murali
相关产品推荐
相关产品推荐

