Can I run multiple pipelines in a single GitLab repo using GitLab CI/CD?
Yes, you can use the rules syntax. You can use this in combination with regex for commit message, ci_pipeline_source or any other available CI variables.

job1:
  script: 
    - do something on schedule only
  rules:
    - if: '&quot;$CI_PIPELINE_SOURCE&quot; == &quot;schedule&quot;'
      when: always

job2:
  script: 
    - runs on Merge request pipeline
  rules:
    - if: $CI_MERGE_REQUEST_ID
      when: always
    when: never

job2:
  script: 
    - runs on changes to anything in src directory or Dockerfile
  rules:
    - changes:
        - src/*
        - Dockerfile


Note you can also include multiple CI templates in your gitlab-ci.yml. Additonally, you can include a CI template with &quot;hidden&quot; job templates that you can reference with extends:
# Include ci files 
include:
 - local: '/templates/.scheduled-job-template.yml' # CI template with hidden job (.scheduled_job) that runs on schedule
 - local: '/templates/.lint-and-validate.yml' # contains jobs for linting and validating project

job1:
  extends:
    - .scheduled_job
  rules:
    - if: '&quot;$CI_PIPELINE_SOURCE&quot; == &quot;schedule&quot;'
      when: always

job2:
  script: 
    - runs on Merge request pipeline
  rules:
    - if: $CI_MERGE_REQUEST_ID
      when: always
    when: never

In doing this you can compose the jobs/pipelines you want in its own yml file and then define the jobs using those templates in the gitlab-ci.yml, which will help keep things maintainable and clear if you are running numerous different pipeline/pipeline configurations from the same project.