首页 > 解决方案 > 仅在合并到 master 时运行任务

问题描述

我使用以下配置按预期工作,它在每个 PR 上运行命令或合并到 master,现在我想做一些我只想在合并到 master 时运行的集成测试,所有 PR 应该保持不变(并像以前一样运行以下配置)。这里的细微差别是,对于集成测试,我需要执行其他 docker 映像和不同的运行命令(仅在合并到主服务器时才应执行),是否可以使用 CircleCI 来完成?

# Golang CircleCI 2.0 configuration file
version: 2
jobs:
  build:
    docker:
      # specify the version
      - image: circleci/golang:1.11
    working_directory: /go/src/sbr
    steps:
      - checkout
      - run: go version
      - run: go env
      - run: go get -v -t -d ./...
      - run: go test -v ./...

我尝试在现有图像下添加另一个 docker 图像,但出现错误

更新:

version: 2
jobs:
  build:
    docker:
      - image: circleci/golang:1.11
    working_directory: /go/src/sbr
    steps:
      - checkout
      - run: go version
      - run: go env
      - run: go get -v -t -d ./...
      - run: go test -v ./...

  test-integration:
    docker:
      - image: other-image

workflows:
  version: 2
  builds:
    jobs:
      - build

  integration-test:
    jobs:
      - test-integration:
          requires:
            - build
          filters:
            branches:
              only: master

添加到第二个工作流程时出现错误的问题require

  requires:
    - build 

我希望测试之前test-integration它也将build作为 per-requiste 运行该作业。我做错了什么?

错误是:

requires job \"build\" but \"build\" is not part of this workflow.
# At least one job in the workflow must have no dependencies.
# The following jobs are unreachable: integration
# 
# -------

# Don't rerun this job. Rerunning will have no effect.
false

标签: gocircleci

解决方案


您的配置有一个名为的作业build并且没有工作流。听起来您想要的是为集成测试运行第二个作业,并且仅在分支为 master 时才运行第二个作业。要完成这两个任务,您将使用包含两个作业的工作流。

请参阅https://circleci.com/docs/2.0/configuration-reference/#workflows

一个可能看起来像的例子:

jobs:
  build:
    docker:
     - image: circleci/golang:1.11
    ...

  test-integration:
    docker:
      - image: other-image
    ...

workflows:
  version: 2
  workflow-name:
    jobs: 
      - build
      - test-integration:
          filters:
            branches:
              only: master

推荐阅读