如何为GitHub Actions工作流文件设置自定义非根目录路径?
GitHub Actions工作流能否放在非根目录的
.github/workflows? 不行,GitHub Actions只会自动扫描仓库根目录下的.github/workflows目录来加载工作流文件。你放在/foo/bar/.github/workflows/里的文件不会被平台识别,这就是你创建后未生效的原因。
不过可以通过以下两种方式实现类似需求:
1. 用工作流调用(Workflow Call)复用子目录逻辑
你可以在根目录的.github/workflows下创建一个触发用的工作流,然后让它调用子目录中存放的工作流文件(注意子目录里的文件不能放在.github/workflows下,要换个路径,比如/foo/bar/workflows/)。
步骤示例:
根目录创建触发工作流
.github/workflows/trigger.yml:name: 触发子目录工作流 on: [push, pull_request] # 设置你的触发条件 jobs: call-sub-workflow: uses: ./foo/bar/workflows # 可选:传递参数或密钥 # with: # build-environment: production # secrets: # api-token: ${{ secrets.API_TOKEN }}子目录创建可被调用的工作流
/foo/bar/workflows/action.yml:name: 子目录工作流 on: workflow_call: # 可选:定义接收的参数和密钥 # inputs: # build-environment: # type: string # secrets: # api-token: # required: false jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: 执行子目录逻辑 run: echo "从子目录工作流执行任务"
2. 用复合动作(Composite Action)封装子目录逻辑
如果你的逻辑是可复用的步骤集合,可以把它封装成复合动作,存放在子目录中,然后在根目录的工作流里调用这个动作。
步骤示例:
子目录创建复合动作
/foo/bar/actions/my-custom-action/action.yml:name: '自定义复合动作' description: '封装子目录中的执行逻辑' runs: using: "composite" steps: - name: 执行子目录脚本 run: ./foo/bar/scripts/my-task.sh shell: bash根目录工作流调用该动作
.github/workflows/main.yml:name: 主工作流 on: [push] jobs: run-custom-action: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: ./foo/bar/actions/my-custom-action
内容的提问来源于stack exchange,提问作者helpMe
相关产品推荐
相关产品推荐

