Future-Proof Your Platform’s CI/CD Without Developers Noticing a Thing
Except 🦄 and 🌈
We’re glad to be with you
Mark
Head of OSS, OpenMeter�CNCF Ambassador
Jeremy
Head of Ecosystem, Dagger
name: CI
on:
push:
branches: [main]�
jobs:
build:
name: build the software
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: |
build
test
lint
😃 How it starts…�� Day 1
# 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:
...
😟 …760 lines of YAML & Bash�� Day 101
Ah, YAML 🙃
YAML Ain't Markup Language
&
YAML ain’t a programming language
FACTS
Jump to Definition, Modules, Tests, Loops, Conditionals
🙏
😞
5 to 30 mins
Phase 1: Developer interface
brew install go
brew install golangci-lint
make build
make test
make lint
Phase 1: Developer interface
brew install go
brew install golangci-lint
make build
make test
make lint
brew vs nix vs
golang.org vs
...
Phase 1: Developer interface
brew install go
brew install golangci-lint
make build
make test
make lint
versions of
go ?
golangci-lint ?
Phase 1: Developer interface
brew install go
brew install golangci-lint
make build
make test
make lint
BSD make & sed
vs
GNU make & sed
Phase 1: Platform CI interface�uses:actions/setup-go@v4
with:
go-version: "1.21.3"
run: go build .
run: go test -race -v ./…
uses:
golangci/golangci-lint-action@v3
with:
version: "v1.54.2"
versions of
go ?
golangci-lint ?
Phase 1: Platform CI interface�uses:actions/setup-go@v4
with:
go-version: "1.21.3"
run: go build .
run: go test -race -v ./…
uses:
golangci/golangci-lint-action@v3
with:
version: "v1.54.2"
GH Actions vs
Jenkins,Circle,
GitLab CI,...
note: we’re still dealing with DRIFT
in 2023?!
Phase 2: Platform CI interface
New! Security requirement
Add new security scans locally AND in CI!!
Phase 2: Developer interface
Developers don’t really want things to change...
no more shift left! 🙏
Phase 2: Platform CI interface
How do we improve the platform AND keep developers happy?!�🤔
Phase 2: Platform CI interface
we want need:
CI == local dev
CI == code
Runs anywhere
CI/CD as Code that Runs Anywhere!
CI/CD as code in your languages�
Works with existing tools
All in containers��Automatic caching
Cross-language modules
CUElang ⇨�
Multi-language SDKs ⇨
(go, python, node.js, java, rust, elixir, aml, ...)
Zenith (modules/cli)
dagger call, shell, print, download, ...
Less talk...
more code!
Drift in 2023?
Went through config mgmt era
Containers exist!
Kubernetes
name: CI
on:
push:
branches: [main]�
jobs:
dagger:
name: dagger
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: dagger <build/test/deploy>
pipeline { agent { label 'dagger' }
stages {
stage("dagger") {
steps {
sh '''
dagger <build/test/deploy>
'''
}
}
}
}�
$ dagger <build/test/deploy>
CLI
GitHub Actions
Jenkins
MOAR
CODE!!!
DEMO�TIME