GitLab API设置CICD独立缓存失败,请求排查问题
问题排查:GitLab API设置独立缓存返回400错误
背景
尝试通过GitLab API为项目配置两项CI/CD设置:
- 跳过过时部署(对应参数
ci_forward_deployment_enabled) - 为受保护分支使用独立缓存(对应参数
ci_separated_caches)
其中跳过过时部署的请求已成功,但设置独立缓存的请求返回400错误,需排查原因。
GitLab环境信息
GitLab Enterprise Edition 14.10.4-ee
成功请求(跳过过时部署)
curl -vs -X PUT -H 'PRIVATE-TOKEN: redacted' \ --url 'https://gitlab.<redacted>/api/v4/projects/2934' \ --data 'ci_forward_deployment_enabled=false'
响应结果:成功返回项目信息
{"id":2934,"description":"","name":....}
失败请求(独立缓存设置)
curl -vs -X PUT -H 'PRIVATE-TOKEN: redacted' \ --url 'https://gitlab.<redacted>/api/v4/projects/2934' \ --data 'ci_separated_caches=false'
响应结果:400 Bad Request
< HTTP/1.1 400 Bad Request < Date: Sat, 14 Oct 2023 20:40:29 GMT < Content-Type: application/json < Content-Length: 1723 < Connection: keep-alive < Cache-Control: no-cache < Vary: Origin < X-Content-Type-Options: nosniff < X-Frame-Options: SAMEORIGIN < X-Request-Id: 01HCQYPHD4DZJX77FRG845VTD6 < X-Runtime: 0.031690 < Strict-Transport-Security: max-age=15724800; includeSubDomains{"error":"allow_merge_on_skipped_pipeline, analytics_access_level, autoclose_referenced_issues, auto_devops_enabled, auto_devops_deploy_strategy, auto_cancel_pending_pipelines, build_coverage_regex, build_git_strategy, build_timeout, builds_access_level, ci_config_path, ci_default_git_depth, ci_forward_deployment_enabled, container_registry_access_level, container_expiration_policy_attributes, default_branch, description, emails_disabled, forking_access_level, issues_access_level, lfs_enabled, merge_pipelines_enabled, merge_requests_access_level, merge_requests_template, merge_trains_enabled, merge_method, name, only_allow_merge_if_all_discussions_are_resolved, only_allow_merge_if_pipeline_succeeds, operations_access_level, pages_access_level, path, printing_merge_request_link_enabled, public_builds, remove_source_branch_after_merge, repository_access_level, request_access_enabled, resolve_outdated_diff_discussions, restrict_user_defined_variables, security_and_compliance_access_level, squash_option, shared_runners_enabled, snippets_access_level, tag_list, topics, visibility, wiki_access_level, avatar, suggestion_commit_message, merge_commit_template, squash_commit_template, repository_storage, compliance_framework_setting, packages_enabled, service_desk_enabled, keep_latest_artifact, mr_default_target_self, issues_enabled, jobs_enabled, merge_requests_enabled, wiki_enabled, snippets_enabled, container_registry_enabled, approvals_before_merge, external_authorization_classification_label, fallback_approvals_required, import_url, issues_template, merge_requests_template, merge_pipelines_enabled, merge_trains_enabled, requirements_access_level are missing, at least one parameter must be provided"}
原因分析与解决方法
参数名称错误:
GitLab 14.10版本中,"为受保护分支使用独立缓存"对应的正确API参数是ci_separated_caches_for_protected_branches,而非你使用的ci_separated_caches。因参数名称不存在,API无法识别该字段,进而判定未提供有效参数,返回400错误。修正后的请求命令:
修改参数名称后重新发起请求即可:
curl -vs -X PUT -H 'PRIVATE-TOKEN: redacted' \ --url 'https://gitlab.<redacted>/api/v4/projects/2934' \ --data 'ci_separated_caches_for_protected_branches=false'
- 额外注意事项:
- 确保参数名称与对应GitLab版本的API文档完全匹配,不同版本的参数可能存在差异。
- 若需同时配置多个CI/CD参数,可在同一条PUT请求中用
&拼接多个参数,减少请求次数。
内容的提问来源于stack exchange,提问作者jlim
相关产品推荐
相关产品推荐

