Rescue TCP connection refused error while viewing the `.gitlab-ci.yml` file
What does this MR do and why?
This MR is to fix the following bug:
When gitlab-ci.yml
contains an include:
which points to an unreachable url ("Connection refused") the application throws a 500 error.
Just a minor change to rescue the Errno::ECONNREFUSED
to prevent the 500 errors.
rescue Errno::ECONNREFUSED, Gitlab::HTTP::BlockedUrlError => e
errors.push("Remote file could not be fetched because #{e}!")
end
Logs:
lib/gitlab/net_http_adapter.rb:21:in `connect', lib/gitlab/http.rb:54:in `perform_request', lib/gitlab/ci/config/external/file/remote.rb:48:in `block in fetch_remote_content', lib/gitlab/ci/pipeline/logger.rb:33:in `instrument', lib/gitlab/ci/config/external/file/remote.rb:47:in `fetch_remote_content', lib/gitlab/ci/config/external/file/remote.rb:18:in `block in content', lib/gitlab/utils/strong_memoize.rb:34:in `strong_memoize', lib/gitlab/ci/config/external/file/remote.rb:18:in `content', lib/gitlab/ci/config/external/file/base.rb:108:in `block in fetch_and_validate_content!', lib/gitlab/ci/pipeline/logger.rb:33:in `instrument', lib/gitlab/ci/config/external/file/base.rb:107:in `fetch_and_validate_content!', lib/gitlab/ci/config/external/file/base.rb:53:in `validate!', lib/gitlab/ci/config/external/mapper.rb:130:in `verify!', lib/gitlab/ci/config/external/mapper.rb:52:in `each', lib/gitlab/ci/config/external/mapper.rb:52:in `process_without_instrumentation', lib/gitlab/ci/config/external/mapper.rb:33:in `block in process', lib/gitlab/ci/pipeline/logger.rb:33:in `instrument', lib/gitlab/ci/config/external/mapper.rb:32:in `process', lib/gitlab/ci/config/external/processor.rb:14:in `initialize', lib/gitlab/ci/config.rb:135:in `new', lib/gitlab/ci/config.rb:135:in `block in build_config', lib/gitlab/ci/pipeline/logger.rb:33:in `instrument', lib/gitlab/ci/config.rb:134:in `build_config', ee/lib/ee/gitlab/ci/config_ee.rb:18:in `build_config', lib/gitlab/ci/config.rb:118:in `expand_config', lib/gitlab/ci/config.rb:39:in `block in initialize', lib/gitlab/ci/pipeline/logger.rb:33:in `instrument', lib/gitlab/ci/config.rb:38:in `initialize', lib/gitlab/ci/yaml_processor.rb:31:in `new', lib/gitlab/ci/yaml_processor.rb:31:in `parse_config', lib/gitlab/ci/yaml_processor.rb:20:in `block in execute', lib/gitlab/ci/yaml_processor/feature_flags.rb:24:in `with_actor', lib/gitlab/ci/yaml_processor.rb:19:in `execute', lib/gitlab/ci/lint.rb:80:in `block in yaml_processor_result', lib/gitlab/ci/pipeline/logger.rb:33:in `instrument', lib/gitlab/ci/lint.rb:76:in `yaml_processor_result', lib/gitlab/ci/lint.rb:62:in `static_validation', lib/gitlab/ci/lint.rb:38:in `validate', app/models/blob_viewer/gitlab_ci_yml.rb:20:in `validation_message', app/models/blob_viewer/gitlab_ci_yml.rb:24:in `valid?', app/helpers/blob_helper.rb:314:in `show_suggest_pipeline_creation_celebration?', app/views/projects/blob/show.html.haml:16, app/controllers/application_controller.rb:142:in `render', app/controllers/projects/blob_controller.rb:242:in `show_html', app/controllers/projects/blob_controller.rb:67:in `block (2 levels) in show', app/controllers/projects/blob_controller.rb:65:in `show', app/controllers/application_controller.rb:582:in `block in allow_gitaly_ref_name_caching', lib/gitlab/gitaly_client.rb:324:in `allow_ref_name_caching', app/controllers/application_controller.rb:581:in `allow_gitaly_ref_name_caching', ee/lib/gitlab/ip_address_state.rb:10:in `with', ee/app/controllers/ee/application_controller.rb:46:in `set_current_ip_address', app/controllers/application_controller.rb:533:in `set_current_admin', lib/gitlab/session.rb:11:in `with_session', app/controllers/application_controller.rb:524:in `set_session_storage', lib/gitlab/i18n.rb:107:in `with_locale', lib/gitlab/i18n.rb:113:in `with_user_locale', app/controllers/application_controller.rb:512:in `set_locale', app/controllers/application_controller.rb:506:in `set_current_context', ee/lib/omni_auth/strategies/group_saml.rb:41:in `other_phase', lib/gitlab/metrics/elasticsearch_rack_middleware.rb:16:in `call', lib/gitlab/middleware/memory_report.rb:13:in `call', lib/gitlab/middleware/speedscope.rb:13:in `call', lib/gitlab/database/load_balancing/rack_middleware.rb:23: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/web_transaction.rb:46:in `run', lib/gitlab/metrics/rack_middleware.rb:16: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/query_analyzer.rb:11:in `block in call', lib/gitlab/database/query_analyzer.rb:37:in `within', lib/gitlab/middleware/query_analyzer.rb:11:in `call', lib/gitlab/middleware/multipart.rb:173: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', lib/gitlab/middleware/webhook_recursion_detection.rb:15:in `call', config/initializers/fix_local_cache_middleware.rb:11:in `call', lib/gitlab/middleware/compressed_json.rb:37:in `call', lib/gitlab/middleware/rack_multipart_tempfile_factory.rb:19:in `call', lib/gitlab/middleware/sidekiq_web_static.rb:20:in `call', lib/gitlab/metrics/requests_rack_middleware.rb:77:in `call', lib/gitlab/middleware/release_env.rb:13:in `call'
Screenshots or screen recordings
Before:
After:
How to set up and validate locally
- Checkout the feature branch
- Add a CI file with an include statement pointing to a URL which points to server without https service(as shown below).
include: https://62.153.82.25/elito/gitlab-ci/raw/next/yml/oe-ci.yml
- Commit the changes and navigate to
Repository
->Files
->.gitlab-ci.yml
and notice that the UI shows the exception instead of throwing a 500 error.
MR acceptance checklist
This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.
-
I have evaluated the MR acceptance checklist for this MR.
Edited by sameer shaik