Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
CI/CD Con Gitlab
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
David Padilla
June 22, 2017
Technology
150
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CI/CD Con Gitlab
David Padilla
June 22, 2017
More Decks by David Padilla
See All by David Padilla
Translate Rails apps like a pro
dabit
0
190
Tips and Treats for New Developers
dabit
3
580
Procesando millones de imágenes con Elixir
dabit
0
170
Tus primeros pasos con Elasticsearch
dabit
0
700
Desarrollo Lean: no es un cuento de hadas
dabit
1
120
Web applications with Ruby, not Rails
dabit
1
190
From Rails to the Web Server to The Browser
dabit
2
300
Web Applications With Rails (not Ruby)
dabit
3
240
From Rails to the Webserver to the Browser (Ruby Kaigi)
dabit
2
1.2k
Other Decks in Technology
See All in Technology
DORA_Metrics.pdf
wagnerfusca
1
110
ADKで始める業務改善 - AIエージェント開発時の考えと設計
harappa80
2
290
SREへの勘違いに気づいた後の話
tomodakengo
0
170
AI Native Platform Engineering 〜PlatformとAgileで“作る速さ”を“価値”へ〜
uya116
0
220
.NET WebAssemblyで実現するクライアントサイドAI推論:NuGetからViteまで、2つのエコシステムを繋ぐビルド戦略
yamachu
1
950
セルフサービスのオブザーバビリティ基盤をOpenTelemetryで作る / Building a Self-Service Observability Platform with OpenTelemetry
ymotongpoo
3
390
【Findyテック文化祭ワークショップ】新卒エンジニア&採用担当と作る、 なりたい姿と今やるべき一歩
dip_tech
PRO
0
110
企業の現実世界をグラフで写し取る
sansantech
PRO
0
110
地方移住と都心キャリアの両立は「金・時間・人」のリソースをフル活用すれば実現できる!〜Snowflake女子会 vol.8
snowwmn0824
0
120
その Lambda、8分で 管理者権限まで奪われます
k1nakayama
7
3.8k
認知負荷を吸収し、プロダクトをまたぐPR Preview基盤の設計事例
taiki45
2
430
2026-09-18 gotanda.sre Terraformで複数環境作ったり、複数Stateに分割したりそれとTerragrunt / Terraform multi envs and multi states
masasuzu
4
750
Featured
See All Featured
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
530
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
440
Being A Developer After 40
akosma
91
590k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
Test your architecture with Archunit
thirion
2
2.4k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
840
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
Paper Plane
katiecoart
PRO
4
53k
Believing is Seeing
oripsolob
1
230
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
610
Prompt Engineering for Job Search
mfonobong
0
460
Navigating Team Friction
lara
192
16k
Transcript
CI/CD con Gitlab David Padilla @dabit
David Padilla @dabit
@micheladaio
CI/CD con Gitlab
CI/CD
Integración Continua CI
Entrega Continua CD
Despliegue Continuo CD
Pruebas Automatizadas
Test Driven Development
Nuestro proceso
Desarrollo Merge Request Peer Review Review QA Staging Más QA
UAT Producción
Desarrollo Merge Request Peer Review Review QA Staging Más QA
UAT Producción
None
Control de versiones (git) Merge Requests / Retroalimentación Orquesta deploys
Corre pruebas Registry de Docker
None
require 'application_system_test_case' class HomepagesTest < ApplicationSystemTestCase test 'homepage' do visit
root_path assert_content 'SGNext' end end
require 'application_system_test_case' class HomepagesTest < ApplicationSystemTestCase test 'homepage' do visit
root_path assert_content 'SGNext' end end
require 'application_system_test_case' class HomepagesTest < ApplicationSystemTestCase test 'homepage' do visit
root_path assert_content 'SGNext' end end
None
None
Como Usuario cuando voy a la pagina principal quiero ver
el slogan "La mejor conferencia de México"
require 'application_system_test_case' class HomepagesTest < ApplicationSystemTestCase test 'homepage' do visit
root_path assert_content 'SGNext' end end
require 'application_system_test_case' class HomepagesTest < ApplicationSystemTestCase test 'homepage' do visit
root_path assert_content 'SGNext' assert_content 'La mejor conferencia de Mexico' end end
None
None
<div class="row align-items-center"> <div class="col-md-12"> <div class="jumbotron"> <h1 class="display-3">SGNext</h1> <p
class="lead"> La mejor conferencia de Mexico </p> </div> </div> </div>
<div class="row align-items-center"> <div class="col-md-12"> <div class="jumbotron"> <h1 class="display-3">SGNext</h1> <p
class="lead"> La mejor conferencia de Mexico </p> </div> </div> </div>
<div class="row align-items-center"> <div class="col-md-12"> <div class="jumbotron"> <h1 class="display-3">SGNext</h1> <p
class="lead"> La mejor conferencia de Mexico </p> </div> </div> </div>
None
None
$ git checkout -b slogan $ git add . $
git commit -m "Nuevo slogan" [slogan d287522] Nuevo slogan 2 files changed, 2 insertions(+)
None
None
None
None
None
None
None
None
None
None
None
require 'application_system_test_case' class HomepagesTest < ApplicationSystemTestCase test 'homepage' do visit
root_path assert_content 'SGNext' assert_content 'La mejor conferencia de México' end end
<div class="row align-items-center"> <div class="col-md-12"> <div class="jumbotron"> <h1 class="display-3">SGNext</h1> <p
class="lead"> La mejor conferencia de México </p> </div> </div> </div>
None
None
None
None
None
None
None
None
None
None
None
None
None
FROM ruby:2.4.1 ENV PHANTOM_JS="phantomjs-2.1.1-linux-x86_64" RUN apt-get update RUN apt-get install
-y software-properties-common apt-transport-https RUN add-apt-repository "deb https://cli-assets.heroku.com/branches/stable/apt ./" RUN curl -L https://cli-assets.heroku.com/apt/release.key | apt-key add - RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list RUN curl -sL https://deb.nodesource.com/setup_6.x | bash - RUN apt-get update && \ apt-get upgrade -y RUN apt-get install -y build-essential chrpath libssl-dev libxft-dev \ libfreetype6 libfreetype6-dev libfontconfig1 libfontconfig1-dev qt5-default \ libqt5webkit5-dev gstreamer1.0-plugins-base gstreamer1.0-tools \ gstreamer1.0-x imagemagick cmake yarn nodejs RUN apt-get install heroku RUN gem install dpl RUN curl -L -O https://bitbucket.org/ariya/phantomjs/downloads/$PHANTOM_JS.tar.bz2 RUN tar xvjf $PHANTOM_JS.tar.bz2 && \ mv $PHANTOM_JS /usr/local/share && \ ln -sf /usr/local/share/$PHANTOM_JS/bin/phantomjs /usr/local/bin
FROM ruby:2.4.1 ENV PHANTOM_JS="phantomjs-2.1.1-linux-x86_64" RUN apt-get update RUN apt-get install
-y software-properties-common apt-transport-https RUN add-apt-repository "deb https://cli-assets.heroku.com/branches/stable/apt ./" RUN curl -L https://cli-assets.heroku.com/apt/release.key | apt-key add - RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list RUN curl -sL https://deb.nodesource.com/setup_6.x | bash - RUN apt-get update && \ apt-get upgrade -y RUN apt-get install -y build-essential chrpath libssl-dev libxft-dev \ libfreetype6 libfreetype6-dev libfontconfig1 libfontconfig1-dev qt5-default \ libqt5webkit5-dev gstreamer1.0-plugins-base gstreamer1.0-tools \ gstreamer1.0-x imagemagick cmake yarn nodejs RUN apt-get install heroku RUN gem install dpl RUN curl -L -O https://bitbucket.org/ariya/phantomjs/downloads/$PHANTOM_JS.tar.bz2 RUN tar xvjf $PHANTOM_JS.tar.bz2 && \ mv $PHANTOM_JS /usr/local/share && \ ln -sf /usr/local/share/$PHANTOM_JS/bin/phantomjs /usr/local/bin
FROM ruby:2.4.1 ENV PHANTOM_JS="phantomjs-2.1.1-linux-x86_64" RUN apt-get update RUN apt-get install
-y software-properties-common apt-transport-https RUN add-apt-repository "deb https://cli-assets.heroku.com/branches/stable/apt ./" RUN curl -L https://cli-assets.heroku.com/apt/release.key | apt-key add - RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list RUN curl -sL https://deb.nodesource.com/setup_6.x | bash - RUN apt-get update && \ apt-get upgrade -y RUN apt-get install -y build-essential chrpath libssl-dev libxft-dev \ libfreetype6 libfreetype6-dev libfontconfig1 libfontconfig1-dev qt5-default \ libqt5webkit5-dev gstreamer1.0-plugins-base gstreamer1.0-tools \ gstreamer1.0-x imagemagick cmake yarn nodejs RUN apt-get install heroku RUN gem install dpl RUN curl -L -O https://bitbucket.org/ariya/phantomjs/downloads/$PHANTOM_JS.tar.bz2 RUN tar xvjf $PHANTOM_JS.tar.bz2 && \ mv $PHANTOM_JS /usr/local/share && \ ln -sf /usr/local/share/$PHANTOM_JS/bin/phantomjs /usr/local/bin
FROM ruby:2.4.1 ENV PHANTOM_JS="phantomjs-2.1.1-linux-x86_64" RUN apt-get update RUN apt-get install
-y software-properties-common apt-transport-https RUN add-apt-repository "deb https://cli-assets.heroku.com/branches/stable/apt ./" RUN curl -L https://cli-assets.heroku.com/apt/release.key | apt-key add - RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list RUN curl -sL https://deb.nodesource.com/setup_6.x | bash - RUN apt-get update && \ apt-get upgrade -y RUN apt-get install -y build-essential chrpath libssl-dev libxft-dev \ libfreetype6 libfreetype6-dev libfontconfig1 libfontconfig1-dev qt5-default \ libqt5webkit5-dev gstreamer1.0-plugins-base gstreamer1.0-tools \ gstreamer1.0-x imagemagick cmake yarn nodejs RUN apt-get install heroku RUN gem install dpl RUN curl -L -O https://bitbucket.org/ariya/phantomjs/downloads/$PHANTOM_JS.tar.bz2 RUN tar xvjf $PHANTOM_JS.tar.bz2 && \ mv $PHANTOM_JS /usr/local/share && \ ln -sf /usr/local/share/$PHANTOM_JS/bin/phantomjs /usr/local/bin
None
.gitlab-ci.yml
image: registry.michelada.io/demos/sgnext/image services: - postgres stages: - test - review
- staging - production variables: DISABLE_SPRING: 'true' before_script: - gem install bundler --no-ri --no-rdoc - rm -rf vendor/ruby/2.4.0/cache/bundler/git || true - ruby -v cache: paths: - vendor/ruby - node_modules build: stage: test script: - bundle install -j $(nproc) --path vendor --full-index --clean - bin/yarn - cp config/database.ci.yml config/database.yml - bundle exec rails db:create RAILS_ENV=test - bundle exec rails db:test:prepare RAILS_ENV=test - bundle exec rails test - bundle exec rails test:system deploy_review: stage: review script: - gem install dpl - heroku apps:fork --from $HEROKU_STAGING_APP --to $CI_ENVIRONMENT_SLUG || true - dpl --provider=heroku --app=$CI_ENVIRONMENT_SLUG --api-key=$HEROKU_API_KEY - heroku run rake db:migrate --app=$CI_ENVIRONMENT_SLUG environment: name: review/$CI_BUILD_REF_NAME url: https://$CI_ENVIRONMENT_SLUG.herokuapp.com only: - branches except: - master staging: stage: staging environment: staging script: - gem install dpl - dpl --provider=heroku --app=$HEROKU_STAGING_APP --api-key=$HEROKU_API_KEY - heroku run rake db:migrate --app=$HEROKU_STAGING_APP only: - master production: stage: production environment: production script: - gem install dpl - dpl --provider=heroku --app=$HEROKU_PROD_APP --api-key=$HEROKU_API_KEY - heroku run rake db:migrate --app=$HEROKU_PROD_APP only: - master when: manual
image: registry.michelada.io/demos/sgnext/image services: - postgres stages: - test - review
- staging - production variables: DISABLE_SPRING: 'true' before_script: - gem install bundler --no-ri --no-rdoc - rm -rf vendor/ruby/2.4.0/cache/bundler/git || true - ruby -v cache: paths: - vendor/ruby - node_modules build: stage: test script:
image: registry.michelada.io/demos/sgnext/image services: - postgres stages: - test - review
- staging - production variables: DISABLE_SPRING: 'true' before_script: - gem install bundler --no-ri --no-rdoc - rm -rf vendor/ruby/2.4.0/cache/bundler/git || true - ruby -v cache: paths: - vendor/ruby - node_modules build: stage: test script:
image: registry.michelada.io/demos/sgnext/image services: - postgres stages: - test - review
- staging - production variables: DISABLE_SPRING: 'true' before_script: - gem install bundler --no-ri --no-rdoc - rm -rf vendor/ruby/2.4.0/cache/bundler/git || true - ruby -v cache: paths: - vendor/ruby - node_modules build: stage: test script:
image: registry.michelada.io/demos/sgnext/image services: - postgres stages: - test - review
- staging - production variables: DISABLE_SPRING: 'true' before_script: - gem install bundler --no-ri --no-rdoc - rm -rf vendor/ruby/2.4.0/cache/bundler/git || true - ruby -v cache: paths: - vendor/ruby - node_modules build: stage: test script:
- gem install bundler --no-ri --no-rdoc - rm -rf vendor/ruby/2.4.0/cache/bundler/git
|| true - ruby -v cache: paths: - vendor/ruby - node_modules build: stage: test script: - bundle install -j $(nproc) --path vendor --full-index --clean - bin/yarn - cp config/database.ci.yml config/database.yml - bundle exec rails db:create RAILS_ENV=test - bundle exec rails db:test:prepare RAILS_ENV=test - bundle exec rails test - bundle exec rails test:system deploy_review: stage: review script: - gem install dpl - heroku apps:fork --from $HEROKU_STAGING_APP --to $CI_ENVIRONMENT_SLUG || true - dpl --provider=heroku --app=$CI_ENVIRONMENT_SLUG --api-key=$HEROKU_API_KEY - heroku run rake db:migrate --app=$CI_ENVIRONMENT_SLUG environment: name: review/$CI_BUILD_REF_NAME url: https://$CI_ENVIRONMENT_SLUG.herokuapp.com
- gem install bundler --no-ri --no-rdoc - rm -rf vendor/ruby/2.4.0/cache/bundler/git
|| true - ruby -v cache: paths: - vendor/ruby - node_modules build: stage: test script: - bundle install -j $(nproc) --path vendor --full-index --clean - bin/yarn - cp config/database.ci.yml config/database.yml - bundle exec rails db:create RAILS_ENV=test - bundle exec rails db:test:prepare RAILS_ENV=test - bundle exec rails test - bundle exec rails test:system deploy_review: stage: review script: - gem install dpl - heroku apps:fork --from $HEROKU_STAGING_APP --to $CI_ENVIRONMENT_SLUG || true - dpl --provider=heroku --app=$CI_ENVIRONMENT_SLUG --api-key=$HEROKU_API_KEY - heroku run rake db:migrate --app=$CI_ENVIRONMENT_SLUG environment: name: review/$CI_BUILD_REF_NAME url: https://$CI_ENVIRONMENT_SLUG.herokuapp.com
staging: stage: staging environment: staging script: - gem install dpl
- dpl --provider=heroku --app=$HEROKU_STAGING_APP --api-key=$HEROKU_API_KEY - heroku run rake db:migrate --app=$HEROKU_STAGING_APP only: - master production: stage: production environment: production script: - gem install dpl - dpl --provider=heroku --app=$HEROKU_PROD_APP --api-key=$HEROKU_API_KEY - heroku run rake db:migrate --app=$HEROKU_PROD_APP only: - master when: manual rubocop: stage: test script: - bundle install -j $(nproc) --path vendor - bundle exec rubocop
staging: stage: staging environment: staging script: - gem install dpl
- dpl --provider=heroku --app=$HEROKU_STAGING_APP --api-key=$HEROKU_API_KEY - heroku run rake db:migrate --app=$HEROKU_STAGING_APP only: - master production: stage: production environment: production script: - gem install dpl - dpl --provider=heroku --app=$HEROKU_PROD_APP --api-key=$HEROKU_API_KEY - heroku run rake db:migrate --app=$HEROKU_PROD_APP only: - master when: manual rubocop: stage: test script: - bundle install -j $(nproc) --path vendor - bundle exec rubocop
Agnóstico
- gem install bundler --no-ri --no-rdoc - rm -rf vendor/ruby/2.4.0/cache/bundler/git
|| true - ruby -v cache: paths: - vendor/ruby - node_modules build: stage: test script: - bundle install -j $(nproc) --path vendor --full-index --clean - bin/yarn - cp config/database.ci.yml config/database.yml - bundle exec rails db:create RAILS_ENV=test - bundle exec rails db:test:prepare RAILS_ENV=test - bundle exec rails test - bundle exec rails test:system deploy_review: stage: review script: - gem install dpl - heroku apps:fork --from $HEROKU_STAGING_APP --to $CI_ENVIRONMENT_SLUG || true - dpl --provider=heroku --app=$CI_ENVIRONMENT_SLUG --api-key=$HEROKU_API_KEY - heroku run rake db:migrate --app=$CI_ENVIRONMENT_SLUG environment: name: review/$CI_BUILD_REF_NAME url: https://$CI_ENVIRONMENT_SLUG.herokuapp.com
iOS build_project: stage: build script: - xcodebuild clean -project ProjectName.xcodeproj
-scheme SchemeName | xcpretty - xcodebuild test -project ProjectName.xcodeproj -scheme SchemeName -destination 'platform=iOS Simulator,name=iPhone 6s,OS=9.2' | xcpretty -s
php image: php:5.6 before_script: # Install dependencies - bash ci/docker_install.sh
> /dev/null test:app: script: - phpunit --configuration phpunit_myapp.xml
Instalación
gitlab.com
None
None
None
TATFT
Prueba todo el bendito tiempo
Gracias @dabit