Set webhook as mailroom default delivery method
What does this MR do?
For gitlab-com/gl-infra/scalability#1462 (closed)
In !5927 (merged), we introduced a new deliveryMethod option of Gitlab. This component receives incoming email and service email, then delivers the email content to Rails web service. The deliveryMethod allows the customers to choose between two supported methods: webhook and sidekiq. GitLab.com has switched to use webhook delivery method for a while. I think it's time to switch the default method to webhook for all self-managed instances.
Testing scenarios
This MR does not introduce a feature change. It sets a default configuration, and contains some refactorings. Therefore, the following scenarios focus on testing the generation of gitlab.yml. Functionality test can be found here: !5927 (merged).
For each case, I updated /etc/gitlab/gitlab.rb
in a virtual machine, ran gitlab-ctl reconfigure
, and compared the result of generated gitlab.yml
file.
Case 1: Minimal configuration, delivery method is not configured
/etc/gitlab/gitlab.rb
external_url 'http://gitlab.external.url'
gitlab_rails['incoming_email_enabled'] = true
gitlab_rails['incoming_email_address'] = "gitlab+%{key}@gmail.com"
gitlab_rails['incoming_email_email'] = "gitlab@gmail.com"
gitlab_rails['incoming_email_password'] = "[REDACTED]"
# incoming_email_delivery_method is not set
gitlab_rails['service_desk_email_enabled'] = true
gitlab_rails['service_desk_email_address'] = "contact_project+%{key}@gmail.com"
gitlab_rails['service_desk_email_email'] = "contact_project@gmail.com"
gitlab_rails['service_desk_email_password'] = "[REDACTED]"
# service_desk_email_delivery_method is not set
/opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
incoming_email:
enabled: true
address: "gitlab+%{key}@gmail.com"
user: "gitlab@gmail.com"
password: "[REDACTED]"
delivery_method: webhook # 👈
gitlab_url: http://gitlab.external.url
secret_file: .gitlab_incoming_email_secret
service_desk_email:
enabled: true
address: "contact_project+%{key}@gmail.com"
user: "contact_project@gmail.com"
password: "[REDACTED]"
delivery_method: webhook # 👈
gitlab_url: http://gitlab.external.url
secret_file: .gitlab_service_desk_email_secret
Case 2: internal_api_url is set
/etc/gitlab/gitlab.rb
external_url 'http://gitlab.external.url'
gitlab_rails['internal_api_url'] = 'http://gitlab.internal.api.url'
gitlab_rails['incoming_email_enabled'] = true
gitlab_rails['incoming_email_address'] = "gitlab+%{key}@gmail.com"
gitlab_rails['incoming_email_email'] = "gitlab@gmail.com"
gitlab_rails['incoming_email_password'] = "[REDACTED]"
# incoming_email_delivery_method is not set
gitlab_rails['service_desk_email_enabled'] = true
gitlab_rails['service_desk_email_address'] = "contact_project+%{key}@gmail.com"
gitlab_rails['service_desk_email_email'] = "contact_project@gmail.com"
gitlab_rails['service_desk_email_password'] = "[REDACTED]"
# service_desk_email_delivery_method is not set
/opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
incoming_email:
enabled: true
address: "gitlab+%{key}@gmail.com"
user: "gitlab@gmail.com"
password: "[REDACTED]"
delivery_method: webhook # 👈
gitlab_url: http://gitlab.internal.api.url # 👈
secret_file: .gitlab_incoming_email_secret
service_desk_email:
enabled: true
address: "contact_project+%{key}@gmail.com"
user: "contact_project@gmail.com"
password: "[REDACTED]"
delivery_method: webhook # 👈
gitlab_url: http://gitlab.internal.api.url # 👈
secret_file: .gitlab_service_desk_email_secret
Case 3: workhorse listen_addr is configured
/etc/gitlab/gitlab.rb
external_url 'http://gitlab.external.url'
gitlab_workhorse['listen_network'] = "tcp"
gitlab_workhorse['listen_addr'] = "127.0.0.1:8181"
gitlab_rails['incoming_email_enabled'] = true
gitlab_rails['incoming_email_address'] = "gitlab+%{key}@gmail.com"
gitlab_rails['incoming_email_email'] = "gitlab@gmail.com"
gitlab_rails['incoming_email_password'] = "[REDACTED]"
# incoming_email_delivery_method is not set
gitlab_rails['service_desk_email_enabled'] = true
gitlab_rails['service_desk_email_address'] = "contact_project+%{key}@gmail.com"
gitlab_rails['service_desk_email_email'] = "contact_project@gmail.com"
gitlab_rails['service_desk_email_password'] = "[REDACTED]"
# service_desk_email_delivery_method is not set
/opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
incoming_email:
enabled: true
address: "gitlab+%{key}@gmail.com"
user: "gitlab@gmail.com"
password: "[REDACTED]"
delivery_method: webhook # 👈
gitlab_url: http://127.0.0.1:8181 # 👈
secret_file: .gitlab_incoming_email_secret
service_desk_email:
enabled: true
address: "contact_project+%{key}@gmail.com"
user: "contact_project@gmail.com"
password: "[REDACTED]"
delivery_method: webhook # 👈
gitlab_url: http://127.0.0.1:8181 # 👈
secret_file: .gitlab_service_desk_email_secret
Case 4: workhorse listen_addr is configured with Unix socket
/etc/gitlab/gitlab.rb
external_url 'http://gitlab.external.url'
gitlab_workhorse['listen_network'] = "unix"
gitlab_workhorse['listen_addr'] = "/var/opt/gitlab/gitlab-workhorse/sockets/socket"
gitlab_rails['incoming_email_enabled'] = true
gitlab_rails['incoming_email_address'] = "gitlab+%{key}@gmail.com"
gitlab_rails['incoming_email_email'] = "gitlab@gmail.com"
gitlab_rails['incoming_email_password'] = "[REDACTED]"
# incoming_email_delivery_method is not set
gitlab_rails['service_desk_email_enabled'] = true
gitlab_rails['service_desk_email_address'] = "contact_project+%{key}@gmail.com"
gitlab_rails['service_desk_email_email'] = "contact_project@gmail.com"
gitlab_rails['service_desk_email_password'] = "[REDACTED]"
# service_desk_email_delivery_method is not set
/opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
incoming_email:
enabled: true
address: "gitlab+%{key}@gmail.com"
user: "gitlab@gmail.com"
password: "[REDACTED]"
delivery_method: webhook # 👈
gitlab_url: http://gitlab.external.url # 👈 Fallback to external url
secret_file: .gitlab_incoming_email_secret
service_desk_email:
enabled: true
address: "contact_project+%{key}@gmail.com"
user: "contact_project@gmail.com"
password: "[REDACTED]"
delivery_method: webhook # 👈
gitlab_url: http://gitlab.external.url # 👈 Fallback to external url
secret_file: .gitlab_service_desk_email_secret
Case 5: incoming mail delivery method is set to Sidekiq
/etc/gitlab/gitlab.rb
external_url 'http://gitlab.external.url'
gitlab_workhorse['listen_network'] = "unix"
gitlab_workhorse['listen_addr'] = "/var/opt/gitlab/gitlab-workhorse/sockets/socket"
gitlab_rails['incoming_email_enabled'] = true
gitlab_rails['incoming_email_address'] = "gitlab+%{key}@gmail.com"
gitlab_rails['incoming_email_email'] = "gitlab@gmail.com"
gitlab_rails['incoming_email_password'] = "[REDACTED]"
gitlab_rails['incoming_email_delivery_method'] = "sidekiq"
gitlab_rails['service_desk_email_enabled'] = true
gitlab_rails['service_desk_email_address'] = "contact_project+%{key}@gmail.com"
gitlab_rails['service_desk_email_email'] = "contact_project@gmail.com"
gitlab_rails['service_desk_email_password'] = "[REDACTED]"
gitlab_rails['service_desk_email_delivery_method'] = "sidekiq"
/opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
incoming_email:
enabled: true
address: "gitlab+%{key}@gmail.com"
user: "gitlab@gmail.com"
password: "[REDACTED]"
delivery_method: sidekiq
service_desk_email:
enabled: true
address: "contact_project+%{key}@gmail.com"
user: "contact_project@gmail.com"
password: "[REDACTED]"
delivery_method: sidekiq
Checklist
See Definition of done.
For anything in this list which will not be completed, please provide a reason in the MR discussion
Required
-
Merge Request Title, and Description are up to date, accurate, and descriptive -
MR targeting the appropriate branch -
MR has a green pipeline on GitLab.com -
Pipeline is green on dev.gitlab.org if the change is touching anything besides documentation or internal cookbooks -
trigger-package
has a green pipeline running against latest commit
Expected (please provide an explanation if not completing)
-
Test plan indicating conditions for success has been posted and passes -
Documentation created/updated -
Tests added -
Integration tests added to GitLab QA -
Equivalent MR/issue for the GitLab Chart opened