3 ms·
I highly agree with inappropriateness of YAML for GitLab CI/CD configuration. It does work for simple use cases and/or in small repositories - however, doing so
by arkadiytehgraet 8y ago
I highly agree with inappropriateness of YAML for GitLab CI/CD configuration. It does work for simple use cases and/or in small repositories - however, doing something slightly more complicated than a simple build/test/deploy pipeline takes an immense effort, with a range of hacks and workarounds.
Even the simplest things, like passing some data (e.g. a link) from one job to another requires quite an overhead (either using artifacts, storing it somewhere in KV or even something worse).
Moreover, .gitlab-ci.yml is one and only entry-point for the CI configuration, so everything goes into it. Yes, it does have concept of includes, but even that is quite limited and not sufficient for any reasonable workflow.
- boleary-gl 8y agoGitLab PM for Verify (CI) here. I agree that a lot of complex pipelines can be tough to express in YAML. One of our key focuses this year is to make advanced use cases for GitLab CI/CD more lovable. Specifically, you can see the overall direction here: https://about.gitlab.com/direction/verify/ https://about.gitlab.com/direction/verify/. Some specific issues I'd love feedback from the community on that I'm thinking about are: * Directed acyclic graphs (DAG) for pipelines: https://gitlab.com/gitlab-org/gitlab-ce/issues/47063 https://gitlab.com/gitlab-org/gitlab-ce/issues/47063 * Make it possible to use any language to generate `.gitlab-ci.yml` and pipelines: https://gitlab.com/gitlab-org/gitlab-ce/issues/45828 https://gitlab.com/gitlab-org/gitlab-ce/issues/45828 * First class support for multiple pipelines: https://gitlab.com/gitlab-org/gitlab-ce/issues/28592 https://gitlab.com/gitlab-org/gitlab-ce/issues/28592 * Self-modifying pipelines: https://gitlab.com/gitlab-org/gitlab-ce/issues/44199 https://gitlab.com/gitlab-org/gitlab-ce/issues/44199 (edited for readability)
- bmurphy1976 8y agoDAG's are good. Let me define a DAG in imperative code (any language I want) using any techniques I want, then I hand the DAG off to you and you execute it. Anything else is introducing complexity for complexities sake.