Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

ChatOps em Ruby

Slide 3

Slide 3 text

@brodock github.com/brodock blog.gabrielmazetto.eti.br Gabriel Mazetto Full-Stack Developer

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

POPE Team

Slide 6

Slide 6 text

POPE Team

Slide 7

Slide 7 text

# /etc/init.d/daemon stop

Slide 8

Slide 8 text

Alguns números

Slide 9

Slide 9 text

8M+ requests 0.9+ APDEX 50M+ de emails

Slide 10

Slide 10 text

29K+ commits 2.5K+ PRs fechados 1 bot 24/7

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

O que é ChatOps?

Slide 13

Slide 13 text

Conversation Driven Development

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

Reforça a Cultura

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

Todos fazem deploy Até os designers

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

Legal! Devo usar o Hubot então?

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

Lita Robot companion em ruby

Slide 24

Slide 24 text

➔ Escrito em Ruby ➔ Suporta diversos serviços de chat ➔ Plugins (vários deles) ➔ Bundler / Rubygems ➔ Persistência em Redis ➔ Webserver interno (webhooks) ➔ Reativo a eventos (triggers) ➔ Suporta chamadas HTTP externas (acessar apis) ➔ Autorização por Grupos ➔ I18n (sem enrolation) ➔ Rspec (totalmente testável)

Slide 25

Slide 25 text

e primeiros passos Instalação

Slide 26

Slide 26 text

$ gem install lita Successfully installed lita-4.3.2 Parsing documentation for lita-4.3.2 Installing ri documentation for lita-4.3.2 Done installing documentation for lita after 1 seconds 1 gem installed

Slide 27

Slide 27 text

$ lita --help Commands: lita adapter NAME # Generates a new Lita adapter lita extension NAME # Generates a new Lita extension lita handler NAME # Generates a new Lita handler lita help [COMMAND] # Describe available commands or one specific command lita new NAME # Generates a new Lita project (default name: lita) lita start # Starts Lita lita version # Outputs the current version of Lita

Slide 28

Slide 28 text

$ lita new tdcbot create tdcbot create tdcbot/Gemfile create tdcbot/lita_config.rb

Slide 29

Slide 29 text

$ cat Gemfile source "https://rubygems.org" gem "lita" # Uncomment to use the HipChat adapter # gem "lita-hipchat" # Uncomment to use the IRC adapter # gem "lita-irc" # Add handlers to give Lita new functionality. # For example: # gem "lita-google-images" # gem "lita-karma"

Slide 30

Slide 30 text

$ cat lita_config.rb Lita.configure do |config| # The name your robot will use. config.robot.name = "Lita" # The locale code for the language to use. # config.robot.locale = :en # The severity of messages to log. Options are: # :debug, :info, :warn, :error, :fatal # Messages at the selected level and above will be logged. config.robot.log_level = :info ...

Slide 31

Slide 31 text

$ bundle install Fetching gem metadata from https://rubygems.org/........... Resolving dependencies... Using multipart-post 2.0.0 Using bundler 1.7.6 Using i18n 0.7.0 Using rb-readline 0.5.2 Using ice_nine 0.11.1 Using multi_json 1.11.0 Using redis 3.2.1 Using thor 0.19.1 Using faraday 0.9.1 Using redis-namespace 1.5.2 Installing rack 1.6.1 ...

Slide 32

Slide 32 text

executando no terminal

Slide 33

Slide 33 text

$ lita start Type "exit" or "quit" to end the session. TDCBot > TDCBot help TDCBot: help - Lists help information for terms and command the robot will respond to. TDCBot: help COMMAND - Lists help information for terms or commands that begin with COMMAND. TDCBot: info - Replies with the current version of Lita. TDCBot: users find SEARCH_TERM - Find a Lita user by ID, name, or mention name. TDCBot > tem alguem ai? TDCBot >

Slide 34

Slide 34 text

Criando um plugin

Slide 35

Slide 35 text

$ lita handler tdc create lita-tdc/lib/lita/handlers/tdc.rb create lita-tdc/lib/lita-tdc.rb create lita-tdc/spec/lita/handlers/tdc_spec.rb create lita-tdc/spec/spec_helper.rb create lita-tdc/locales/en.yml create lita-tdc/templates/.gitkeep create lita-tdc/Gemfile create lita-tdc/lita-tdc.gemspec create lita-tdc/.gitignore create lita-tdc/Rakefile create lita-tdc/README.md

Slide 36

Slide 36 text

module Lita module Handlers class Tdc < Handler end Lita.register_handler(Tdc) end end

Slide 37

Slide 37 text

module Lita module Handlers class Tdc < Handler route(/palestra$/i, :next_keynote, command: true, help: {"palestra" => "Informa qual será a próxima palestra"}) def next_keynote(message) keynote = Keynote.get_next message.reply "Próxima palestra: #{keynote.title}" end end Lita.register_handler(Tdc) end end

Slide 38

Slide 38 text

Verificando o Status CI

Slide 39

Slide 39 text

module Lita module Handlers class Tdc < Handler route(/status ci (.+)$/i, :check_ci, command: true, help: {"status ci" => "Informa o estado o build informado"}) def check_ci(message) ci = XundaCI.get_status(message.match_data[1]) response.reply "Status do build: #{ci.status}" end end Lita.register_handler(Tdc) end end

Slide 40

Slide 40 text

Como automatizar um deploy?

Slide 41

Slide 41 text

Github Heaven + Heroku

Slide 42

Slide 42 text

github.com/atmos/heaven

Slide 43

Slide 43 text

No content

Slide 44

Slide 44 text

module Lita module Handlers class Tdc < Handler route(/deploy (\w*) (\w*)$/i, :deploy_branch, command: true, help: {"deploy [repo] [branch]" => "Realiza o deploy conforme os parametros"}) def deploy_branch(message) repo, branch = message.match_data[1], message.match_data[2] github.create_deployment(repo, branch) response.reply "Fazendo deploy do #{repo}/#{branch}!" end # continua... end Lita.register_handler(Tdc) end end

Slide 45

Slide 45 text

module Lita module Handlers class Tdc < Handler # continuação… config :token, type: String, required: true def github @github ||= Octokit::Client.new(access_token: config.token) end end Lita.register_handler(Tdc) end end

Slide 46

Slide 46 text

$ lita start Type "exit" or "quit" to end the session. TDCBot > TDCBot deploy xunda-app/xunda-branch TDCBot: Fazendo deploy xunda-app/xunda-branch! TDCBot >

Slide 47

Slide 47 text

github.com/brodock @brodock blog.gabrielmazetto.eti.br QUESTIONS?

Slide 48

Slide 48 text

We are hiring! talk to me shipit.resultadosdigitais.com.br