Rodbot plugin – GitLab webhook
Pipeline event announcements from self-hosted GitLab or managed services like gitlab.com
Pipeline event announcements from GitLab
Preparation
The Rodbot app binds to localhost by default which cannot be reached from GitLab. Make sure this connection is possible by setting a different IP in config/rodbot.rb:
app do
host '0.0.0.0'
end
To authenticate the webhook calls from GitLab, create a new random secret token:
ruby -r securerandom -e "puts SecureRandom.alphanumeric(20)"
Configure this plugin in config/rodbot.rb:
plugin :gitlab_webhook do
secret_tokens '<TOKEN>'
end
You can set any number of secure tokens here separated with colons.
Activation
Set up a webhook to every GitLab repository you'd like to see pipeline event announcements for. Go to https://gitlab.com/<USER>/<REPO>/-/hooks and create a new webhook with the following properties:
- URL:
https://<RODBOT-APP>/gitlab_webhook - Secret token:
<TOKEN> - Trigger: [x] Pipeline events
- SSL verification: [x] Enable SSL verification
Use the test tool to verify your setup and to see what the JSON payloads look like in case you'd like to customize the handler.
Customization
You can change how the plugin reacts to which webhook requests by configuring a custom handler proc. Here's the default one:
plugin :gitlab_webhook do
handler ->(request) do
json = JSON.parse(request.body.read)
if json['object_kind'] == 'pipeline'
project = json.dig('project', 'path_with_namespace')
status = json.dig('object_attributes', 'detailed_status')
emoji = case status
when 'running' then '🟡'
when 'passed' then '🟢'
when 'failed' then '🔴'
else '⚪️'
end
[emoji, project, status.gsub('_', ' ')].join(' ')
end
end
end