'Duplicates CI Jobs and If Condition doesn't work

When I run following Gitlab CI, it invokes duplicate for both jobs(i.e 4 pipelines). What I need here is to invoke only one job if the condition qualifies

default:
  image: 'napp/docker-aws-cli'

variables:
  AWS_BUCKET: ******-docker
  PM_S3_FOLDER: ********_manager
  SNAP_S3_FOLDER: ********_GDAL3_SNAP

********_manager:
  inherit:
    default: [image]
    variables: [PM_S3_FOLDER]
  script:
    - zip -jrm Dockerfile.zip docker_containers/********_manager/redis/Dockerfile docker_containers/********_manager/redis/buildspec.yaml
    - aws s3 cp Dockerfile.zip s3://******-docker/$PM_S3_FOLDER/
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_COMMIT_BRANCH == "master"'
      changes:  # Include the job and set to when:manual if any of the follow paths match a modified file.
        - ********/docker_containers/********_manager/redis/Dockerfile 
        - ********/docker_containers/********_manager/redis/buildspec.yaml
      allow_failure: true
      when: never
    - when: on_success

snap:
  inherit:
    default: [image]
    variables: [SNAP_S3_FOLDER]
  script:
    - zip -jrm Dockerfile.zip docker_containers/********_GDAL3_SNAP/Dockerfile docker_containers/********_GDAL3_SNAP/buildspec.yaml
    - aws s3 cp Dockerfile.zip s3://signaleyes-docker/$SNAP_S3_FOLDER/
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_COMMIT_BRANCH == "master"'
      changes:  # Include the job and set to when:manual if any of the follow paths match a modified file.
        - ********/docker_containers/********_GDAL3_SNAP/Dockerfile
        - ********/docker_containers/********_GDAL3_SNAP/buildspec.yaml
      allow_failure: true



Solution 1:[1]

The issue seems to be with the rules of the inherit job

- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_COMMIT_BRANCH == "master"'
  changes:  # Include the job and set to when:manual if any of the follow paths match a modified file.
    - ********/docker_containers/********_manager/redis/Dockerfile 
    - ********/docker_containers/********_manager/redis/buildspec.yaml
  allow_failure: true
  when: never
- when: on_success

Quoting from https://docs.gitlab.com/ee/ci/jobs/job_control.html#rules-examples

If you use a when clause as the final rule (not including when: never), two simultaneous pipelines may start. Both push pipelines and merge request pipelines can be triggered by the same event (a push to the source branch for an open merge request).

In order to avoid this rewrite the rules to run the job only in very specific cases, and avoid a final when rule. In your case remove

- when: on_success

Or use workflow to specify which types of pipelines can run

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Tolis Gerodimos