logoalt Hacker News

locknitpicker • yesterday at 6:01 PM • 2 replies • view on HN

GitLab has a top of the class CICD system that is leaps and bounds over GitHub Actions. That alone makes it worth using GitLab.


Replies

jesse_faden • today at 3:12 AM

I don't understand why GitLab CI is praised so much when it is the most limited and unintuitive ones of all the CI systems I've worked with.

I have hit so many issues and limitations on GitLab which is just simply possible on GitHub. Here's a few of my rants with GitLab

1. The smallest unit of action on GitLab is a whole job, on GitHub, that's a task. So all of the actions or templated files can perform a single task instead of a whole job. This granularity is incredibly useful and lets my team create a catalog of actions that our downstream teams can simply include and compose it over a variety of tools and frameworks.

2. You cannot share secrets between jobs. This was just outright ridiculous when it meant that in each new job you have to fetch an STS token even though the token from a previous job would suffice. So much repetition. When you have a template like fetching AWS credentials using OIDC, that's the only thing you can do. Hence proving point 1.

3. Multiple workflow files instead of a single `.gitlab.yml` with a scrambled mess of rules

4. Dynamic services, in GitHub it is effortless to build a matrix AND have services spun up from it. The amount of duplication this reduces is insane.

    name: Test Actions

    on:
      push:
        branches:
        - main

    jobs:
        preTest: 
            runs-on: ubuntu-latest
            outputs:
              services: ${{ steps.services.outputs.serviceJson }}
            steps:
              - uses: actions/checkout@v3
              - run: echo "serviceJson=$(cat .github/workflows/demo.json | jq -c)" >> "$GITHUB_OUTPUT"
                id: services
                shell: bash
              
                
        test: 
            runs-on: ubuntu-latest
            needs: [preTest]
            services: ${{ fromJson(needs.preTest.outputs.services ) }}
            steps:
            - run: echo "Hello"
              shell: bash
➕ show 1 reply
otterley • yesterday at 6:26 PM

What’s so much better about it? I use both and I don’t see significant differences, but I’m happy to be enlightened.

➕ show 2 replies