Semaphore CI/CD流水线:仅docs目录变更时跳过任务配置求助
解决方案:仅/docs目录变更时跳过Semaphore CI/CD流程
要实现仅修改docs目录时不执行任何CI/CD步骤,你需要调整semaphore.yml的执行条件配置,以下是两种可行方案:
方案1:为每个任务块添加执行条件
给每个block的run.when设置条件,确保只有当变更涉及docs之外的内容时才执行任务:
blocks: - name: Linting dependencies: [] run: when: "change_in('**', {exclude: ['docs/**']})" task: agent: machine: type: e1-standard os_image: ubuntu containers: # 你的容器配置内容 # 构建、部署等其他block也需要添加相同的when条件
关键说明:
**用于匹配项目内所有文件和目录,exclude: ['docs/**']会排除docs目录下的所有内容(包括子目录)- 路径不要以
/开头,Semaphore的路径规则是相对项目根目录的,直接写docs/**即可正确匹配目标目录
方案2:全局跳过整个工作流(推荐)
如果希望仅docs目录变更时直接跳过整个CI流程,可在workflow层面设置全局条件:
version: v1.0 name: 你的工作流名称 agent: machine: type: e1-standard os_image: ubuntu # 全局条件:仅当存在docs之外的变更时才执行整个工作流 when: "change_in('**', {exclude: ['docs/**']})" blocks: - name: Linting dependencies: [] task: # 你的任务配置内容 # 其他任务块配置
原配置失效的原因
你之前的配置change_in('/', {exclude: ['/docs']})存在两个问题:
- 路径写法错误:
/和/docs是绝对路径写法,Semaphore要求使用相对项目根目录的路径,即docs或docs/** change_in('/')仅匹配根目录下的文件变更,不会递归检测子目录,无法正确识别其他目录的修改
内容的提问来源于stack exchange,提问作者Mag
相关产品推荐
相关产品推荐

