Concourse call job from another job with parameters

Viewed 4242

I have a job with many tasks like this:

- name: main-job
  serial: true
  plan:
  - aggregate:
    - get: <git-resource>
      passed: [previous-job]
      trigger: true
    - get: <git-resource-3>
  - task: <task-1>
    file: <git-resource>/<path>/<task-1-no-db>.yml
  - task: <task-2>
    tags: ['<specific-tag>']
    file: <git-resource>/<path>/<task-1>.yml
    params:
      DATABASE_HOST: <file>
      DATABASE: <my-db-1>
  - task: <task-2>
    tags: ['<specific-tag>']
    file: <git-resource>/<path>/<task-1>.yml
    params:
      DATABASE_HOST: <file>
      DATABASE: <my-db-1>

The problem for me is, I have to literally call the same job but instead of DATABASE params being my-db-1, I want it to be my-db-2.

The only way I am able to do this is by having new job and pass the params, literally copy the entire set of lines. My job is too fat, as in has too many tasks in them, so copying it though is the obvious solution, I am wondering if there's a way to re-use by having multiple pipelines and one main pipeline that essentially calls these pipelines with the param for DATABASE passed or have two small jobs that calls this main job with different params something like this:

- name: <call-main-job-with-db-1>
  serial: true
  plan:
  - aggregate:
    - get: <git-resource>
      passed: [previous-job]
      trigger: true
  - task: <call-main-job-task>
    params:
      DATABASE_HOST: <file>
      DATABASE: <my-db-1>



- name: <call-main-job-with-db-2>
  serial: true
  plan:
  - aggregate:
    - get: <git-resource>
      passed: [previous-job]
      trigger: true
  - task: <call-main-job-task>
    params:
      DATABASE: <my-db-2>

I am not sure if this is even possible since I didn't find any example of this.

3 Answers
Related