Setting external_url with underscore results in a broken GitLab CI/CD functionality
### Summary <!-- Describe in short the bug you've encountered --> ### Steps to reproduce - Set the `external_url` with underscore and disable letsencrypt integration by setting `letsencrypt['enable'] = false` in your `/etc/gitlab/gitlab.rb` file - Run `sudo gitlab-ctl reconfigure` - Register some Runners with the new GitLab URL ### What is the current *bug* behavior? `reconfigure` will be completed successfully but some functionality will be broken: - error 500 will be shown when going to project Settings > CI/CD - Runners will not be able to process jobs ### What is the expected *correct* behavior? It should work fine with the underscore. ### Relevant logs There is a known issue with the URLs with underscore in Ruby, see [this Stack Overflow thread](https://stackoverflow.com/questions/5208851/is-there-a-workaround-to-open-urls-containing-underscores-in-ruby). The full error message from the logs is shown below: ```text Completed 500 Internal Server Error in 50ms (ActiveRecord: 4.9ms | Elasticsearch: 0.0ms | Allocations: 17672) URI::InvalidComponentError (bad component(expected host component): gitlab_host.tld): lib/api/helpers/related_resources_helpers.rb:29:in `expose_url' ee/app/controllers/ee/projects/settings/ci_cd_controller.rb:19:in `show' ee/lib/gitlab/ip_address_state.rb:10:in `with' ee/app/controllers/ee/application_controller.rb:44:in `set_current_ip_address' app/controllers/application_controller.rb:486:in `set_current_admin' lib/gitlab/session.rb:11:in `with_session' app/controllers/application_controller.rb:477:in `set_session_storage' lib/gitlab/i18n.rb:73:in `with_locale' lib/gitlab/i18n.rb:79:in `with_user_locale' app/controllers/application_controller.rb:471:in `set_locale' app/controllers/application_controller.rb:464:in `block in set_current_context' lib/gitlab/application_context.rb:63:in `block in use' lib/gitlab/application_context.rb:63:in `use' lib/gitlab/application_context.rb:24:in `with_context' app/controllers/application_controller.rb:455:in `set_current_context' lib/gitlab/metrics/elasticsearch_rack_middleware.rb:16:in `call' lib/gitlab/middleware/rails_queue_duration.rb:33:in `call' lib/gitlab/metrics/rack_middleware.rb:16:in `block in call' lib/gitlab/metrics/transaction.rb:56:in `run' lib/gitlab/metrics/rack_middleware.rb:16:in `call' lib/gitlab/request_profiler/middleware.rb:17:in `call' lib/gitlab/jira/middleware.rb:19:in `call' lib/gitlab/middleware/go.rb:20:in `call' lib/gitlab/etag_caching/middleware.rb:21:in `call' lib/gitlab/middleware/multipart.rb:172:in `call' lib/gitlab/middleware/read_only/controller.rb:50:in `call' lib/gitlab/middleware/read_only.rb:18:in `call' lib/gitlab/middleware/same_site_cookies.rb:27:in `call' lib/gitlab/middleware/handle_malformed_strings.rb:21:in `call' lib/gitlab/middleware/basic_health_check.rb:25:in `call' lib/gitlab/middleware/handle_ip_spoof_attack_error.rb:25:in `call' lib/gitlab/middleware/request_context.rb:21:in `call' config/initializers/fix_local_cache_middleware.rb:11:in `call' lib/gitlab/metrics/requests_rack_middleware.rb:76:in `call' lib/gitlab/middleware/release_env.rb:12:in `call' ``` Also, there was an old related issue on our side: ["Completed 500 Internal Server Error" when enter each git repository's Setting->General](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/52977). ### Details of package version <details> <summary>Provide the package version installation details</summary> ```text ii gitlab-ee 13.10.2-ee.0 amd64 GitLab Enterprise Edition ``` </details> ### Environment details * Operating System: Debian 10 * Installation Target, remove incorrect values: GCP * Installation Type, remove incorrect values: new installation * Is there any other software running on the machine: no * Is this a single or multiple node installation: single-node * Resources * CPU: 2 * Memory total: 8Gb ### Configuration details <details> <summary> Provide the relevant sections of /etc/gitlab/gitlab.rb </summary> ```text external_url 'http://gitlab_server.tld' letsencrypt['enable'] = false ``` </details>
issue