Skip to content

Rescue TCP connection refused error while viewing the `.gitlab-ci.yml` file

sameer shaik requested to merge rescue-remote into master

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:

Screenshot_2022-12-11_at_1.34.38_PM

After:

Screenshot_2022-12-11_at_1.35.20_PM

How to set up and validate locally

  1. Checkout the feature branch
  2. 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
  1. 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.

Edited by sameer shaik

Merge request reports

Loading