【问题标题】:Skip Jenkins Stage for "ng test" if no .spec file changes fetched from GIT如果没有从 GIT 获取 .spec 文件更改,则跳过 Jenkins 阶段进行“ng 测试”
【发布时间】:2020-03-13 15:10:32
【问题描述】:

我的 Angular 应用程序在 Jenkins 上运行良好,所有阶段都已定义。它有近 600 个单元测试用例在构建阶段之前使用无头 chrome 作为 Jenkins 阶段运行。一切正常。

现在测试阶段需要 6-10 分钟,这取决于服务器负载,即使规范文件没有更改。现在测试在管道语法中是强制性的。我想让它成为有条件的。

我只想在测试阶段添加条件,而不是在构建阶段。条件是,如果 .spec 文件没有更改,Jenkins 应该跳过该阶段并执行 Build 阶段。

stage('Test') {
            steps {
                sh 'npm run test:headless'
            }
        }

然后是构建阶段:

stage('Build') {
            steps {
                sh 'npm run build:dev'
            }
        }

提前感谢您的帮助。

【问题讨论】:

  • @DanielHabenicht 看起来很有希望,但是为目录名称提供的解决方案,这里的规范文件在每个目录中,一个目录可能包含 TS 和 SPEC 两个文件更改或一个,有什么可能找到差异使用 SRC 文件夹下的文件扩展名,在我的情况下仅 .spec 文件
  • 另外,只想获取 .spec 文件更改的结果,而不是 .ts 或 .scss 或 .html 文件更改。
  • 可能有多个提交,仅最后两个提交比较在我的情况下不起作用。 “立即构建”是手动的,我们会在需要时触发操作。

标签: angular jenkins jenkins-plugins


【解决方案1】:

您可以浏览自上次合并提交以来所做的所有提交(应该是您分支的地方)并搜索在其路径中使用spec.ts 更改的文件:

lastMerge() {
    git rev-list origin..HEAD --max-parents=1 --max-count=1
}

changes() {
  git diff --name-only --diff-filter=AMR --cached $(lastMerge)..HEAD | grep spec.ts
}

if [ changes ] 
    then
        echo "start expensive operation"
fi

归功于: Determine If Any File Changed In Directory For Latest Git CommitHow to find last git commit before a merge

【讨论】:

  • 如果我得到想要的结果,肯定会尝试你的方法并接受。谢谢。
猜你喜欢
  • 2018-09-29
  • 2018-08-15
  • 2014-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-08
  • 1970-01-01
相关资源
最近更新 更多