GitLab CI:如果只有特定文件发生更改,如何跳过任务

12

如果我commit/merge request中的改变仅涉及到*.md、eslintrc.json 或 jsconfig.json文件,我需要跳过GitLab CI流水线中的一个任务。

举个例子:

  • 如果这些文件已经被修改了,但是其他像*.js文件也发生了变化:任务应该运行。
  • 如果这些文件根本没有被修改,但是其他*.js文件有所改动:任务应该运行。
  • 如果README.md和eslintrc.json已经被修改了并且没有其他任何的改变:任务不应该运行。

我已经尝试过使用except:changes或者rules:when:never,但是目前还没有发现它们对我有用。我该怎么做呢?


你最后解决了这个问题吗?你是如何解决的? - dingo
2个回答

3
如果我理解正确,您需要在CI文件中使用except:changes约定。请看下面的例子。如果*.md、eslintrc.json和jsconfig.json发生了变化,作业将以任何条件运行。在这种情况下,管道不会运行。请查看下面示例的except-changes阶段。
另一方面,您可以设置在任何js文件发生更改时运行管道。请查看下面示例的*only-changes*阶段。
stages:
  - except-changes
  - only-changes

ignore-file-changes:
  stage: except-changes
  script:
    - echo "Skip running the pipeline if *.md, eslintrc.json and jsconfig.json has any kind of change."
  except: 
    changes:
      - "**/*.md"
      - eslintrc.json
      - jsconfig.json
      - README.md
  
pass-the-pipeline:
  stage: only-changes
  script:
    - echo "Run only *.js and Dockerfile files has any kind of change."
  only:
    changes:
      - Dockerfile
      - "**/*.js"


2
在您的示例中,如果 README.md 更改且 *.js 文件也更改,则作业不会运行,因为有 except 语句。我想知道如何使其在这种情况下运行。 - Gabriel Serrano Salas
我在思考这个问题,突然想到如果我们只对*.js文件运行管道,问题就解决了。只要README.md文件和*.js文件发生变化,管道就会运行。如果除了我们在管道中设置的文件之外的任何其他文件发生了更改,管道将不会运行。 - Numb95
3
*.js文件只是一个例子。该作业应该运行于存储库中的所有其他文件,除了我提到的那3个文件。它们有数百个,所以我无法列出它们全部。因此,我的问题是。 - Gabriel Serrano Salas

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接