NoMethodError undefined method `filename' for nil:NilClass audit_download(latest_build, latest_build.artifacts_file.filename)
Summary
When using the GitLab SaaS API to download an artifact, it fails with a 500 error. Retring a while later worked for two customers, hence not easily reproducible.
The error seems to be originating from this MR that introduced "Add audit event for downloading CI artifacts".
Kibana logs - json.correlation_id - b4f1ab643d704b3e044863b7d12ef2c9
Sentry issue - https://new-sentry.gitlab.net/organizations/gitlab/issues/951761/events/131a5dda3bf046f385fcbabf54b8757c/
Error:
undefined method `filename' for nil:NilClass
audit_download(latest_build, latest_build.artifacts_file.filename)
^^^^^^^^^
[lib/api/ci/job_artifacts.rb:49:in `block (2 levels) in <class:JobArtifacts>', ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call', lib/gitlab/ip_address_state.rb:11:in `with', ee/lib/gitlab/middleware/ip_restrictor.rb:13:in `call', lib/api/api_guard.rb:219:in `call', 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/sidekiq_shard_awareness_validation.rb:20:in `block in call', lib/gitlab/sidekiq_sharding/validator.rb:42:in `enabled', lib/gitlab/middleware/sidekiq_shard_awareness_validation.rb:20: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/etag_caching/middleware.rb:21: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/middleware/go.rb:24:in `call', lib/gitlab/middleware/query_analyzer.rb:11:in `block in call', lib/gitlab/database/query_analyzer.rb:40: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/unauthenticated_session_expiry.rb:18:in `call', lib/gitlab/middleware/same_site_cookies.rb:27:in `call', lib/gitlab/middleware/path_traversal_check.rb:34: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:15: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:44: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:79:in `call', lib/gitlab/middleware/release_env.rb:13:in `call']
Steps to reproduce
- Reproduceed in .com, retrying in Self-Managed and two customers reported this as well; both mentioned using Semgrep SAST - Internal ticket 1, Internal ticket 2
- From a project with artifacts, try downloading artifacts with https://docs.gitlab.com/ee/api/job_artifacts.html#download-the-artifacts-archive
- The only common thing from the two customer tickets was that there was a security policy being referenced.
What is the expected correct behavior?
Downloading artifacts should work the first time successfully without throwing a 500 error if all other conditions are correct.
Relevant logs and/or screenshots
Possible fixes
Edited by 🤖 GitLab Bot 🤖