如何在CircleCI中创建仅运行测试的夜间定时构建?
CircleCI夜间定时测试流水线配置方案
核心做法
把原有流水线里的测试步骤拆成独立任务,然后用CircleCI的定时触发器来调度这个任务,无需依赖代码提交触发。
具体操作步骤
1. 拆分原有config.yml中的测试任务
假设你原有的config.yml结构如下:
workflows: test-deploy: jobs: - build-app - run-tests: requires: - build-app jobs: build-app: docker: - image: circleci/node:18 steps: - checkout - run: npm install - run: npm run build # 其他构建相关步骤... run-tests: docker: - image: circleci/node:18 steps: - checkout - run: npm install - run: npm run test -- --url=https://你的测试应用地址.com # 原有的测试步骤...
由于我们是直接测试线上URL,run-tests任务无需依赖构建产物,直接改成可独立运行即可。
2. 新增定时工作流
在config.yml中添加一个专属工作流,仅由定时触发器触发,只执行测试任务:
workflows: # 保留原有工作流不变 test-deploy: jobs: - build-app - run-tests: requires: - build-app # 新增夜间定时测试工作流 nightly-test: triggers: - schedule: cron: "0 0 * * *" # 每天凌晨0点执行(UTC时间,按需调整时区) filters: branches: only: - test # 指定使用测试环境分支的配置 jobs: - run-tests
3. 调整测试任务的依赖(按需)
因为是直接测试线上应用,run-tests不需要等待构建完成,确保任务内的步骤不依赖构建产物即可——比如测试需要安装依赖,保留npm install这类步骤就足够。
4. 控制台配置定时触发器(可选)
如果不想修改配置文件,也可以直接登录CircleCI控制台操作:进入项目的Project Settings > Triggers > Add Trigger,选择Schedule类型,设置cron表达式、目标分支,再指定要执行的任务为run-tests即可。这种方式无需改动代码,更灵活。
注意事项
- cron表达式使用UTC时间,需转换为你所在时区的时间,比如国内时区(UTC+8)要在凌晨2点执行,cron应写为
0 18 * * *(UTC18点对应国内凌晨2点)。 - 确保测试环境的Web应用在定时执行时段处于正常运行状态,避免测试失败。
- 如果测试需要环境变量,要保证CircleCI项目已配置好相关变量,定时构建会自动继承这些配置。
内容的提问来源于stack exchange,提问作者Larry
相关产品推荐
相关产品推荐

