`功能标志`页面无法正常打开,在14.5.0版本返回500错误

当我尝试打开“功能标志”页面时,它返回了“500”错误。 其他页面没有这个问题。

我正在使用自管型的 docker 镜像来部署 gitlab 实例。 版本是14.5.0-ce.0。 来自 Docker Hub
起初我以为是身份验证问题。 根据 Back up and restore GitLab | GitLab ,我在docker container 中尝试了以下操作。
参考上面的连接,首先是重置CI/CD variables,进入gitlab容器。

root@113:/# gitlab-rails dbconsole --database main
psql (12.7)
Type "help" for help.

gitlabhq_production=> SELECT * FROM public."ci_group_variables";
 id | key | value | encrypted_value | encrypted_value_salt | encrypted_value_iv | group_id | protected | created_at | updated_at | masked 
| variable_type | environment_scope 
----+-----+-------+-----------------+----------------------+--------------------+----------+-----------+------------+------------+--------
+---------------+-------------------
(0 rows)

gitlabhq_production=> SELECT * FROM public."ci_variables";
 id | key | value | encrypted_value | encrypted_value_salt | encrypted_value_iv | project_id | protected | environment_scope | masked | va
riable_type 
----+-----+-------+-----------------+----------------------+--------------------+------------+-----------+-------------------+--------+---
------------
(0 rows)
gitlabhq_production=> DELETE FROM ci_group_variables;
DELETE 0
gitlabhq_production=> DELETE FROM ci_variables;
DELETE 0
gitlabhq_production=> exit
could not save history to file "/var/opt/gitlab/.psql_history": Permission denied

然后重启gitlab容器实例。
再次进入 gitlab 容器的 ssh 窗口,以重置 runner registration tokenspending pipeline jobs,并修复 project integrations

root@113:/# gitlab-rails dbconsole --database main
psql (12.7)
Type "help" for help.

gitlabhq_production=> UPDATE projects SET runners_token = null, runners_token_encrypted = null;
UPDATE 3
gitlabhq_production=> UPDATE namespaces SET runners_token = null, runners_token_encrypted = null;
UPDATE 6
gitlabhq_production=> UPDATE application_settings SET runners_registration_token_encrypted = null;
UPDATE 1
gitlabhq_production=> UPDATE application_settings SET encrypted_ci_jwt_signing_key = null;
UPDATE 1
gitlabhq_production=> UPDATE ci_runners SET token = null, token_encrypted = null;
UPDATE 1
gitlabhq_production=> UPDATE ci_builds SET token = null, token_encrypted = null;
UPDATE 0
gitlabhq_production=> TRUNCATE web_hooks CASCADE;
NOTICE:  truncate cascades to table "web_hook_logs"
NOTICE:  truncate cascades to table "web_hook_logs_202108"
NOTICE:  truncate cascades to table "web_hook_logs_202109"
NOTICE:  truncate cascades to table "web_hook_logs_202110"
NOTICE:  truncate cascades to table "web_hook_logs_202111"
NOTICE:  truncate cascades to table "web_hook_logs_202112"
NOTICE:  truncate cascades to table "web_hook_logs_202201"
NOTICE:  truncate cascades to table "web_hook_logs_202202"
NOTICE:  truncate cascades to table "web_hook_logs_202203"
NOTICE:  truncate cascades to table "web_hook_logs_202204"
NOTICE:  truncate cascades to table "web_hook_logs_202205"
TRUNCATE TABLE
gitlabhq_production=> exit
could not save history to file "/var/opt/gitlab/.psql_history": Permission denied

最后一步是我重新配置了gitlab-runner,此时还是无法进入Feature Flags页面。
通过docker log,我得到了以下日志。


127.0.0.1 - - [25/Nov/2021:08:57:26 +0000] "POST /api/v4/jobs/request HTTP/1.1" 204 0 "" "gitlab-runner 14.5.0 (14-5-stable; go1.13.8; linux/amd64)" -


==> /var/log/gitlab/sidekiq/current <==

{"severity":"INFO","time":"2021-11-25T08:57:27.617Z","message":"Enqueuing scheduled jobs","status":"start","sorted_set":"retry","retry":0}

{"severity":"INFO","time":"2021-11-25T08:57:27.617Z","message":"Enqueuing scheduled jobs","status":"done","sorted_set":"retry","jobs_count":0,"redundant_jobs_count":0,"duration_s":0.0008484319987474009,"retry":0}

{"severity":"INFO","time":"2021-11-25T08:57:27.618Z","message":"Enqueuing scheduled jobs","status":"start","sorted_set":"schedule","retry":0}

{"severity":"INFO","time":"2021-11-25T08:57:27.619Z","message":"Enqueuing scheduled jobs","status":"done","sorted_set":"schedule","jobs_count":0,"redundant_jobs_count":0,"duration_s":0.0012072810022800695,"retry":0}


==> /var/log/gitlab/gitlab-rails/production.log <==

Started GET "/linghengqian/test-springboot/-/feature_flags" for 127.0.0.1 at 2021-11-25 08:57:29 +0000

Processing by Projects::FeatureFlagsController#index as HTML

  Parameters: {"namespace_id"=>"linghengqian", "project_id"=>"test-springboot"}

  Rendered layout layouts/project.html.haml (Duration: 24.2ms | Allocations: 2811)

Completed 500 Internal Server Error in 74ms (ActiveRecord: 11.1ms | Elasticsearch: 0.0ms | Allocations: 12711)


==> /var/log/gitlab/gitlab-rails/production_json.log <==

{"method":"GET","path":"/linghengqian/test-springboot/-/feature_flags","format":"html","controller":"Projects::FeatureFlagsController","action":"index","status":500,"time":"2021-11-25T08:57:29.230Z","params":[{"key":"namespace_id","value":"linghengqian"},{"key":"project_id","value":"test-springboot"}],"correlation_id":"01FNB50S908T6SC75C2C9C3X4C","meta.user":"linghengqian","meta.project":"linghengqian/test-springboot","meta.root_namespace":"linghengqian","meta.caller_id":"Projects::FeatureFlagsController#index","meta.remote_ip":"127.0.0.1","meta.feature_category":"feature_flags","meta.client_id":"user/2","remote_ip":"127.0.0.1","user_id":2,"username":"linghengqian","ua":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36 Edg/96.0.1054.29","queue_duration_s":0.013948,"request_urgency":"default","target_duration_s":1,"redis_calls":8,"redis_duration_s":0.003102,"redis_read_bytes":1294,"redis_write_bytes":1142,"redis_cache_calls":5,"redis_cache_duration_s":0.002181,"redis_cache_read_bytes":1013,"redis_cache_write_bytes":281,"redis_shared_state_calls":3,"redis_shared_state_duration_s":0.000921,"redis_shared_state_read_bytes":281,"redis_shared_state_write_bytes":861,"db_count":14,"db_write_count":0,"db_cached_count":1,"db_replica_count":0,"db_replica_cached_count":0,"db_replica_wal_count":0,"db_replica_wal_cached_count":0,"db_primary_count":14,"db_primary_cached_count":1,"db_primary_wal_count":0,"db_primary_wal_cached_count":0,"db_replica_duration_s":0.0,"db_primary_duration_s":0.015,"cpu_s":0.094044,"mem_objects":21253,"mem_bytes":2368968,"mem_mallocs":5056,"mem_total_bytes":3219088,"pid":650,"exception.class":"ActionView::Template::Error","exception.message":"","exception.backtrace":["lib/gitlab/crypto_helper.rb:28:in `aes256_gcm_decrypt'","app/models/concerns/token_authenticatable_strategies/encryption_helper.rb:18:in `decrypt_token'","app/models/concerns/token_authenticatable_strategies/encrypted.rb:45:in `get_token'","app/models/concerns/token_authenticatable.rb:35:in `block in add_authentication_token_field'","app/models/project.rb:2672:in `feature_flags_client_token'","app/helpers/feature_flags_helper.rb:11:in `unleash_api_instance_id'","app/views/projects/feature_flags/index.html.haml:13","app/controllers/application_controller.rb:136:in `render'","app/controllers/application_controller.rb:504:in `set_current_admin'","lib/gitlab/session.rb:11:in `with_session'","app/controllers/application_controller.rb:495:in `set_session_storage'","lib/gitlab/i18n.rb:105:in `with_locale'","lib/gitlab/i18n.rb:111:in `with_user_locale'","app/controllers/application_controller.rb:489:in `set_locale'","app/controllers/application_controller.rb:483: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/middleware/speedscope.rb:13:in `call'","lib/gitlab/request_profiler/middleware.rb:17:in `call'","lib/gitlab/database/load_balancing/rack_middleware.rb:23: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/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'","config/initializers/fix_local_cache_middleware.rb:11:in `call'","lib/gitlab/middleware/compressed_json.rb:26: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:75:in `call'","lib/gitlab/middleware/release_env.rb:13:in `call'"],"db_duration_s":0.0111,"view_duration_s":0.0,"duration_s":0.07401}


==> /var/log/gitlab/gitlab-rails/production.log <==

  

ActionView::Template::Error ():

    10:   "feature-flags-limit-exceeded" => @project.actual_limits.exceeded?(:project_feature_flags, @project.operations_feature_flags.count),

    11:   "feature-flags-limit" => @project.actual_limits.project_feature_flags,

    12:   "unleash-api-url" => (unleash_api_url(@project) if can?(current_user, :admin_feature_flag, @project)),

    13:   "unleash-api-instance-id" => (unleash_api_instance_id(@project) if can?(current_user, :admin_feature_flag, @project)),

    14:   "can-user-admin-feature-flag" => can?(current_user, :admin_feature_flag, @project),

    15:   "new-feature-flag-path" => can?(current_user, :create_feature_flag, @project) ? new_project_feature_flag_path(@project): nil,

    16:   "rotate-instance-id-path" => can?(current_user, :admin_feature_flags_client, @project) ? reset_token_project_feature_flags_client_path(@project, format: :json) : nil,

  

lib/gitlab/crypto_helper.rb:28:in `aes256_gcm_decrypt'

app/models/concerns/token_authenticatable_strategies/encryption_helper.rb:18:in `decrypt_token'

app/models/concerns/token_authenticatable_strategies/encrypted.rb:45:in `get_token'

app/models/concerns/token_authenticatable.rb:35:in `block in add_authentication_token_field'

app/models/project.rb:2672:in `feature_flags_client_token'

app/helpers/feature_flags_helper.rb:11:in `unleash_api_instance_id'

app/views/projects/feature_flags/index.html.haml:13

app/controllers/application_controller.rb:136:in `render'

app/controllers/application_controller.rb:504:in `set_current_admin'

lib/gitlab/session.rb:11:in `with_session'

app/controllers/application_controller.rb:495:in `set_session_storage'

lib/gitlab/i18n.rb:105:in `with_locale'

lib/gitlab/i18n.rb:111:in `with_user_locale'

app/controllers/application_controller.rb:489:in `set_locale'

app/controllers/application_controller.rb:483: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/middleware/speedscope.rb:13:in `call'

lib/gitlab/request_profiler/middleware.rb:17:in `call'

lib/gitlab/database/load_balancing/rack_middleware.rb:23: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/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'

config/initializers/fix_local_cache_middleware.rb:11:in `call'

lib/gitlab/middleware/compressed_json.rb:26: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:75:in `call'

lib/gitlab/middleware/release_env.rb:13:in `call'


==> /var/log/gitlab/gitlab-workhorse/current <==

{"content_type":"text/html; charset=utf-8","correlation_id":"01FNB50S908T6SC75C2C9C3X4C","duration_ms":115,"host":"gitlab.lingh.com","level":"info","method":"GET","msg":"access","proto":"HTTP/1.1","referrer":"http://gitlab.lingh.com/linghengqian/test-springboot","remote_addr":"127.0.0.1:0","remote_ip":"127.0.0.1","route":"","status":500,"system":"http","time":"2021-11-25T08:57:29Z","ttfb_ms":115,"uri":"/linghengqian/test-springboot/-/feature_flags","user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36 Edg/96.0.1054.29","written_bytes":2926}


==> /var/log/gitlab/nginx/gitlab_access.log <==

127.0.0.1 - - [25/Nov/2021:08:57:29 +0000] "GET /linghengqian/test-springboot/-/feature_flags HTTP/1.1" 500 2926 "http://gitlab.lingh.com/linghengqian/test-springboot" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36 Edg/96.0.1054.29" -


==> /var/log/gitlab/gitlab-workhorse/current <==

{"content_type":"","correlation_id":"01FNB50SWESBB8PR9V886TBPG2","duration_ms":0,"host":"gitlab.lingh.com","level":"info","method":"POST","msg":"access","proto":"HTTP/1.1","referrer":"","remote_addr":"127.0.0.1:0","remote_ip":"127.0.0.1","route":"^/api/v4/jobs/request\\z","status":204,"system":"http","time":"2021-11-25T08:57:29Z","ttfb_ms":0,"uri":"/api/v4/jobs/request","user_agent":"gitlab-runner 14.5.0 (14-5-stable; go1.13.8; linux/amd64)","written_bytes":0}


==> /var/log/gitlab/nginx/gitlab_access.log <==

127.0.0.1 - - [25/Nov/2021:08:57:29 +0000] "POST /api/v4/jobs/request HTTP/1.1" 204 0 "" "gitlab-runner 14.5.0 (14-5-stable; go1.13.8; linux/amd64)" -


==> /var/log/gitlab/gitlab-exporter/current <==

2021-11-25_08:57:30.91522 127.0.0.1 - - [25/Nov/2021:08:57:30 UTC] "GET /database HTTP/1.1" 200 1222

2021-11-25_08:57:30.91539 - -> /database

2021-11-25_08:57:32.10531 Passing 'exists?' command to redis as is; blind passthrough has been deprecated and will be removed in redis-namespace 2.0 (at /opt/gitlab/embedded/lib/ruby/gems/2.7.0/gems/sidekiq-6.2.2/lib/sidekiq/api.rb:959:in `block (3 levels) in each')

2021-11-25_08:57:32.14823 127.0.0.1 - - [25/Nov/2021:08:57:31 UTC] "GET /sidekiq HTTP/1.1" 200 68880

2021-11-25_08:57:32.14839 - -> /sidekiq


==> /var/log/gitlab/sidekiq/current <==

{"severity":"INFO","time":"2021-11-25T08:57:32.626Z","message":"Enqueuing scheduled jobs","status":"start","sorted_set":"retry","retry":0}

{"severity":"INFO","time":"2021-11-25T08:57:32.627Z","message":"Enqueuing scheduled jobs","status":"done","sorted_set":"retry","jobs_count":0,"redundant_jobs_count":0,"duration_s":0.0009575539988873061,"retry":0}

{"severity":"INFO","time":"2021-11-25T08:57:32.627Z","message":"Enqueuing scheduled jobs","status":"start","sorted_set":"schedule","retry":0}

{"severity":"INFO","time":"2021-11-25T08:57:32.628Z","message":"Enqueuing scheduled jobs","status":"done","sorted_set":"schedule","jobs_count":0,"redundant_jobs_count":0,"duration_s":0.0006173080000735354,"retry":0}


==> /var/log/gitlab/gitlab-workhorse/current <==

{"content_type":"","correlation_id":"01FNB50WT6CWVTZ7X80S9A2N2A","duration_ms":0,"host":"gitlab.lingh.com","level":"info","method":"POST","msg":"access","proto":"HTTP/1.1","referrer":"","remote_addr":"127.0.0.1:0","remote_ip":"127.0.0.1","route":"^/api/v4/jobs/request\\z","status":204,"system":"http","time":"2021-11-25T08:57:32Z","ttfb_ms":0,"uri":"/api/v4/jobs/request","user_agent":"gitlab-runner 14.5.0 (14-5-stable; go1.13.8; linux/amd64)","written_bytes":0}


==> /var/log/gitlab/nginx/gitlab_access.log <==

127.0.0.1 - - [25/Nov/2021:08:57:32 +0000] "POST /api/v4/jobs/request HTTP/1.1" 204 0 "" "gitlab-runner 14.5.0 (14-5-stable; go1.13.8; linux/amd64)" -

希望有朋友能提供一些解决的思路.