Accelerate Your Development and CI/CD Pipelines with Dagger

Márk Sági-Kazár


2025-06-19 @ Cloud Native Timişoara

whoami

Márk Sági-Kazár

Cloud Native Ambassador

Dagger Commander


YAML engineer for life 😭



@sagikazarmark

https://sagikazarmark.com

hello@sagikazarmark.com

📋 Agenda

  • 🗣️ The Problem and the Solution
  • 📚 Demo
  • ❓Q&A
  • 🎁 Surprise (if time allows)

📈 Accelerate

= room for improvement

🔀 Environment drift

Developer environment

brew install go
nix-env -i gotestsum
sudo apt-get install golangci-lint

make build
just test
task lint

What version of Go did you just install?

Consistent onboarding experience?

CI/CD environment

- uses: actions/setup-go@v5
  with:
    go-version: "1.24.0"

- run: go build .
- run: go test -race -v ./…

- uses: golangci/golangci-lint-action@v8
  with:
    version: "v2.1.0"- uses: actions/setup-go@v5
  with:
    go-version: "1.24.0"

- run: go build .
- run: go test -race -v ./…

- uses: golangci/golangci-lint-action@v8
  with:
    version: "v2.1.0"
  • custom, vendor-specific format
  • different from dev scripts

Artifacts

FROM golang:1.23 AS go

RUN go build -o app .


FROM alpine

COPY --from=go /app /usr/local/bin/FROM golang:1.23 AS go

RUN go build -o app .


FROM alpine

COPY --from=go /app /usr/local/bin/
  • different from dev and CI scripts

Why is this a problem?

  • Maintenance burden
  • Hidden bugs
  • Undermines trust in processes 1
  • Onboarding friction

  1. “it always fails, just ignore it”

💡 Unified environments

Dev + CI/CD + Artifacts = software delivery pipelines/workflows

CI becomes a quality gate

I wish there was…

Is docker run the answer?

It gives you containers…

…but not workflows.

There is a missing piece.

🙏 Push’n’Pray

💡 Portable workflows

Run the same workflow:

  • in dev
  • in CI
  • anywhere

No more Push’n’Pray

  • ⌛ Shorter feedback loop
  • 💸 Less CI resources wasted 1
  • 🤯 You maintain your sanity
  1. Planet Earth sends her regards

✍️ YAML

Day 1…

name: CI

on:
  push:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - run: |
          build
          test
          lint

Day 101

700+ lines of YAML & Bash chaos

# Foobar pipeline
# Include the Common CI pipeline parameters.
include:
  - project: 'foo/bar/foobarproject/cicdtemplate'
    file: '/Common.gitlab-ci.yml'
  #- /force-app/ui-tests/pipeline.yml

stages:
  - build-metadata-package
  - run-js-tests
  - validate-package
  - deploy-package
  - run-unit-tests
  - run-api-tests
  - run-ui-tests
  - integration

####################################################
# Builds the Metadata Package, builds the Package
# files and Destructive changes
####################################################
build-metadata-package:
  stage: build-metadata-package
  except:
    ...

🤔 How did we end up in this mess?

  • YAML is a data serialization language
  • Workflows are not strictly declarative

YAML…

  • is not reusable 1
  • is not composable
  • provides poor control flow
  • is not portable (vendor lock-in)

YAML is a poor choice of language for software delivery workflows.

  1. Anchors don’t count

How about using a real programming language?

Stop treating software pipelines as configuration.

How about using a programming language you already know?

Example (pseudo code)

func build() Binary {
    return go.Build(".")
}

func push() {
    ctr := newContainer().
        copy("/app", build())

    pushContainer(ctr)
}

👍 Ideal solution

🔀 Environment drift

🙏 Push’n’Pray

✍️ YAML

→ Unified environments

→ Portable workflows

→ Programmable workflows

Dagger Functions

  • Write your workflows as code
  • Orchestrate containers
  • Run them anywhere 1
  1. Where you can run containers

Demo

Let’s see some code already!!!

Demo repository

https://github.com/sagikazarmark/demo-cloud-native-timisoara-2025

🔭 Dagger in the Wild

github.com/openmeterio/openmeter

github.com/twirphp/twirp

👋 Thank you

Any questions?

Stay in touch!



@sagikazarmark

https://sagikazarmark.com

hello@sagikazarmark.com

🎮 Game

Guess which image is AI generated.

AI generated

AI generated

Original

AI generated

AI generated

Original

AI generated

Original

🎮 Thanks for playing!

Accelerate Your Development and CI/CD Pipelines with Dagger Márk Sági-Kazár 2025-06-19 @ Cloud Native Timişoara

  1. Slides

  2. Tools

  3. Close
  • Accelerate Your Development and CI/CD Pipelines with Dagger
  • whoami
  • 📋 Agenda
  • 📈 Accelerate
  • 🔀 Environment drift
  • Developer environment
  • CI/CD environment
  • Artifacts
  • Why is this a problem?
  • 💡 Unified environments
  • I wish there was…
  • Slide 12
  • Is docker run the answer?
  • 🙏 Push’n’Pray
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • 💡 Portable workflows
  • No more Push’n’Pray
  • ✍️ YAML
  • Day 1…
  • Day 101
  • 🤔 How did we end up in this mess?
  • YAML…
  • How about using a real programming language?
  • How about using a programming language you already know?
  • Example (pseudo code)
  • 👍 Ideal solution
  • Slide 34
  • Dagger Functions
  • Slide 36
  • Demo
  • Demo repository
  • 🔭 Dagger in the Wild
  • 👋 Thank you
  • 🎮 Game
  • AI generated...
  • AI generated Original...
  • AI generated...
  • AI generated Original...
  • AI generated Original...
  • 🎮 Thanks for playing!
  • f Fullscreen
  • s Speaker View
  • o Slide Overview
  • e PDF Export Mode
  • ? Keyboard Help