Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
How can automation help with development practices
Search
PaulRbr
December 06, 2017
Programming
0
15
How can automation help with development practices
PaulRbr
December 06, 2017
Tweet
Share
More Decks by PaulRbr
See All by PaulRbr
A smooth migration to Docker focusing on build pipelines
paulrbr
0
27
Production upgrade of PostgreSQL 9.1 to 9.5
paulrbr
0
35
Other Decks in Programming
See All in Programming
PicoRuby on Rails
makicamel
2
110
C++20 射影変換
faithandbrave
0
540
5つのアンチパターンから学ぶLT設計
narihara
1
120
Deep Dive into ~/.claude/projects
hiragram
9
1.6k
Julia という言語について (FP in Julia « SIDE: F ») for 関数型まつり2025
antimon2
3
980
CursorはMCPを使った方が良いぞ
taigakono
1
190
エラーって何種類あるの?
kajitack
5
320
GoのGenericsによるslice操作との付き合い方
syumai
3
690
deno-redisの紹介とJSRパッケージの運用について (toranoana.deno #21)
uki00a
0
150
データの民主化を支える、透明性のあるデータ利活用への挑戦 2025-06-25 Database Engineering Meetup#7
y_ken
0
320
Google Agent Development Kit でLINE Botを作ってみた
ymd65536
2
200
プロダクト志向ってなんなんだろうね
righttouch
PRO
0
170
Featured
See All Featured
Embracing the Ebb and Flow
colly
86
4.7k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
48
5.4k
We Have a Design System, Now What?
morganepeng
53
7.7k
The Cult of Friendly URLs
andyhume
79
6.5k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
710
Java REST API Framework Comparison - PWX 2021
mraible
31
8.7k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
Code Reviewing Like a Champion
maltzj
524
40k
Making the Leap to Tech Lead
cromwellryan
134
9.4k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Transcript
HOW CAN AUTOMATION HELP WITH DEVELOPMENT PRACTICES
a.k.a LA MÉTHODE DE DEV CHEZ CAPITAINE TRAIN
WHO AM I? ⌨ + ⚙ + ⏸ So ware
Developer ▶ Linux Infra & Ops @paulRb_r
None
autonomy
initiative
empathy
communication
honesty
responsibility
humor
DEVELOPMENT WORKFLOW
Local changes
Pull Request · Merge Request ·
Review
Review
Review
Integration testing ✅
Merge Master
Ship it to Production
TL; DL · Local changes · Pull Request / Merge
Request · Review · ✅ Integration testing · Merge Master · Ship
DUG THE DEVELOPER Willing to contribute code
DUG THE DEVELOPER Working in the 25kv team
DEVELOPMENT WORKFLOW
GIT WORKFLOW
Test Platform
Test Platform Code repository (capitainetrain/25kv)
Test Platform Code repository (capitainetrain/25kv) (dugd/25kv) Local changes
None
Test Platform Code repository (dugd/25kv) (capitainetrain/25kv) Local changes
None
Test Platform Code repository (dugd/25kv) (capitainetrain/25kv) Local changes
None
(dugd/25kv) (capitainetrain/25kv) + Merge Request & Review
None
(dugd/25kv) (capitainetrain/25kv) ✅ Integration testing
None
(dugd/25kv) (capitainetrain/25kv) Merge Master
None
(dugd/25kv) (capitainetrain/25kv) Ship to Production
None
GIT WORKFLOW
BUILD PIPELINE WORKFLOW
BUILD PIPELINE CI WORKFLOW
BUILD PIPELINE CI CD WORKFLOW
BUILD PIPELINE WORKFLOW
None
None
1 commit == 1 pipeline
GITLAB
Open Source ❤
GITLAB · source code · merge request · review ·
CI build pipelines · Artifacts · Docker registry · ...much more
GITLAB CI
Open Source ❤
.gitlab-ci.yml file
versioned within git
declarative
job1: script: make build job2: script: make test
integrated
PIPELINE
1 pipeline == n stages
stages: - build - test - deploy
1 stage == n jobs
job1-unit-test: stage: test job2-acceptance-test: stage: test
1 pipeline == jobs x stages
None
REMEMBER DUG?
None
None
.gitlab-ci.yml image: ruby:2.4
.gitlab-ci.yml image: ruby:2.4 bundle: stage: build script: - bundle install
--deployment artifacts: paths: [ '.bundle/', 'vendor/' ]
.gitlab-ci.yml image: ruby:2.4 bundle: stage: build script: - bundle install
--deployment artifacts: paths: [ '.bundle/', 'vendor/' ] test: stage: test script: - bundle exec rake test
.gitlab-ci.yml image: ruby:2.4 bundle: stage: build script: - bundle install
--deployment artifacts: paths: [ '.bundle/', 'vendor/' ] test: stage: test script: - bundle exec rake test lint: stage: test script: - bundle exec rubocop
.gitlab-ci.yml image: ruby:2.4 # … security: stage: test script: -
bundle exec brakeman
.gitlab-ci.yml image: ruby:2.4 # … security: stage: test script: -
bundle exec brakeman bundle-audit: stage: test script: - bundle exec bundle-audit check --update
+ Merge Request & Review
None
None
None
Review
None
✅
None
.gitlab-ci.yml image: ruby:2.4 deploy:integration: stage: deploy script: - bundle exec
rake deploy env=${CI_COMMIT_REF_NAME} only: - dev
.gitlab-ci.yml image: ruby:2.4 stages: - build - test - deploy
- # Something missing?
.gitlab-ci.yml image: ruby:2.4 stages: - build - test - deploy
- qa
.gitlab-ci.yml image: ruby:2.4 deploy:integration: stage: deploy script: - bundle exec
rake deploy env=${CI_COMMIT_REF_NAME} only: - dev performance: stage: qa script: - bundle exec rake performance \ target="https://${CI_COMMIT_REF_NAME}.test.trainline.eu/" only: - dev
None
None
None
None
None
None
.gitlab-ci.yml image: ruby:2.4 deploy:integration: stage: deploy script: - bundle exec
rake deploy env=${CI_COMMIT_REF_NAME} only: - dev
.gitlab-ci.yml image: ruby:2.4 deploy:integration: stage: deploy script: - bundle exec
rake deploy env=${CI_COMMIT_REF_NAME} only: - dev - master
.gitlab-ci.yml image: ruby:2.4 deploy:integration: stage: deploy script: - bundle exec
rake deploy env=${CI_COMMIT_REF_NAME} only: - dev - master deploy:production: stage: deploy script: - bundle exec rake deploy env=production only: - master when: manual # ← Manual button to trigger Job
None
None
HERITAGE
6 years
None
None
None
mature
None
alive
builds "as code"
for people
Thank you! QUESTIONS? · Slides → · Demo CI →
https://paulrbr.gitlab.io/talks/dev-workflow.html https://gitlab.com/paulrbr/ruby-ci