Support CI job definition outside repository (external `.gitlab-ci.yml`)
## Problem to Solve The `.gitlab-ci.yml` must currently exist inside of the project repository. It's possible to set a custom path within the repo, but that custom path can't point into other projects or arbitrary URLs. Customer wants a way to configure CI jobs other than the `.gitlab-ci.yml` in the repo. There are some cases, such as when you're working in GitLab and contributing to a open source project that is external to GitLab it can cause problems because the `.gitlab-ci.yml` can not go forward to the upstream (Zendesk: https://gitlab.zendesk.com/agent/tickets/19465). It can also be used for numerous types of workflows where you have a variety of small code-bases that all need to be processed in the same way and either a) do not want the individual repos to be able to change the CI setup, and/or b) do not want to have to maintain in hundreds of repos. This is helpful for users coming from Jenkins who are using the https://github.com/jenkinsci/job-dsl-plugin plugin to solve the same use case, and makes migrating to GitLab easier. ## Proposal We will allow for configuring the path to the `.gitlab-ci.yml` to an arbitrary URL: * This would work for users that have a service that generates the config file dynamically * This would work if the URL points to a file on a different repository (any GitLab instance), as long as the file is publicly accessible. Owners of the project hosting the config file should be able to restrict write access, providing a way to control access to the configuration in a scalable way. * This would also let companies organize their `.gitlab-ci.yml`s in a central repository if that was desirable. ### Alternative Approach We also discussed limiting this to only repository paths, for example `/path/to/.gitlab-ci.yml@another-group/another-project`. This has advantages that don't seem to be relevant for the moment, such as: * pointing to a config file in a project that doesn't allow read by default * knowing when the config file changes in order to trigger dependent pipelines * knowing the version of the config file We could expand on this in the future if it becomes relevant, but for now we can work on a simpler (and more flexible) scope.
issue