Search code examples
concourseconcourse-git-resource

How to combine triggers in Concourse pipeline: git and time resource?


I'm trying to set up a Concourse pipeline that will trigger a new deployment. The goal is to only let the pipeline run when new values have been pushed to the git repository AND when the time is within a defined time window.

Currently, the triggers seem to work in an OR fashion. When a new version is pushed, the pipeline will run. When the time is within the window, the pipeline will run.
It seems like the only exception is when both triggers have not succeeded at least once, for example on the first day when the time has not yet passed. This caused the pipeline to wait for the first success of the time-window trigger before running. After this, however, the unwanted behavior of running with each update to the git repository continued.

Below is a minimal version of my pipeline. The goal is to run the pipeline between only 9:00 and 9:10 PM, and preferably only when the git repository has been updated.

resource_types:
  - name: helm
    type: docker-image
    source:
      repository: linkyard/concourse-helm-resource

resources:
  - name: cicd-helm-values_my-service
    type: git
    source:
      branch: master
      username: <redacted>
      password: <redacted>
      uri: https://bitbucket.org/myorg/cicd-helm-values.git
      paths:
        - dev-env/my-service/values.yaml
  - name: helm-deployment
    type: helm
    source:
      cluster_url: '<redacted>'
      cluster_ca: <redacted>
      admin_cert: <redacted>
      admin_key: <redacted>
      repos:
        - name: chartmuseum
          url: '<redacted>'
          username: <redacted>
          password: <redacted>
  - name: time-window
    type: time
    source:
      start: 9:00 PM
      stop: 9:10 PM

jobs:
  - name: deploy-my-service
    plan:
    - get: time-window
      trigger: true
    - get: cicd-helm-values_my-service
      trigger: true
    - put: helm-deployment
      params:
        release: my-service
        namespace: dev-env
        chart: chartmuseum/application-template
        values: ./cicd-helm-values_my-service/dev-env/my-service/values.yaml

Any ideas on how to combine the time-window and the cicd-helm-values_my-service would be greatly appreciated. Thanks in advance!


Solution

  • For that kind of precise time scheduling, the time resource is not adapted. What works well is https://github.com/pivotal-cf-experimental/cron-resource. This will solve one part of your problem.

    Regarding triggering with AND, this is not the semantics of a fan-in. The semantics is OR, as you noticed. You might try the gate resource https://github.com/Meshcloud/gate-resource, although I am not sure it would work for your case.

    EDIT: Fixed the URL of the gated resource