You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Backstage模板发布Create React App到GitLab遇400错误求助

Backstage发布Create React App到GitLab时400错误排查

问题描述

在本地Backstage环境使用模板发布Create React App到自有GitLab实例时,持续返回400错误:

22022-10-21T22:36:25.000Z HTTPError: Response code 400 (Bad Request)

已完成app-config.yaml中的GitLab集成配置,能正常建立连接,曾因遗漏合并请求标题触发过类似错误,现需明确发布到GitLab所需的全部必填属性。

使用的模板配置代码如下:

apiVersion: scaffolder.backstage.io/v1beta3
kind: Template
metadata:
  name: create-react-app-template
  title: Create React App Template
  description: Create a new React website project
  tags:
    - react
    - cra
spec:
  owner: web@example.com
  type: website
  parameters:
    - title: Provide some simple information
      required:
        - component_id
        - owner
      properties:
        component_id:
          title: Name
          type: string
          description: Unique name of the component
          ui:field: EntityNamePicker
        description:
          title: Description
          type: string
          description: Help others understand what this website is for.
        owner:
          title: Owner
          type: string
          description: Owner of the component
          ui:field: OwnerPicker
          ui:options:
            allowedKinds:
              - Group
    - title: Choose a location
      required:
        - repoUrl
      properties:
        repoUrl:
          title: Repository Location
          type: string
          ui:field: RepoUrlPicker
          ui:options:
            allowedHosts:
              - gitlab.example.com

  steps:
    - id: template
      name: Fetch Skeleton + Template
      action: fetch:template
      input:
        url: ./skeleton
        copyWithoutRender:
          - .github/workflows/*
        values:
          component_id: ${{ parameters.component_id }}
          description: ${{ parameters.description }}
          destination: ${{ parameters.repoUrl | parseRepoUrl }}
          owner: ${{ parameters.owner }}

    - id: publish
      name: Publish
      action: publish:gitlab
      input:
        allowedHosts:
          - gitlab.example.com
        description: This is ${{ parameters.component_id }}
        repoUrl: ${{ parameters.repoUrl }}
        title: Creating catalog-info.yaml ${{ parameters.name }} for backstage

    - id: register
      name: Register
      action: catalog:register
      input:
        repoContentsUrl: ${{ steps.publish.output.repoContentsUrl }}
        catalogInfoPath: "/catalog-info.yaml"

  output:
    links:
      - title: Repository
        url: ${{ steps.publish.output.remoteUrl }}
      - title: Open in catalog
        icon: catalog
        entityRef: ${{ steps.register.output.entityRef }}

模板生成的Repo Url示例:

Repo Url -> gitlab.example.com?owner=maxbojorquez&repo=template

必填属性及错误修复

核心必填属性

Backstage publish:gitlab 动作(v1beta3版本)的必填属性包括:

  • repoUrl:GitLab仓库地址,需符合RepoUrlPicker生成的标准格式(如示例中的格式)
  • title:合并请求/提交标题,不能为空
  • description:合并请求描述,建议填写有效内容,避免为空

你的配置中的明显问题

在publish步骤的title字段中,你引用了${{ parameters.name }},但模板参数里仅定义了component_id,并没有name参数,这会导致标题内容缺失,直接触发400错误。需修改为:

title: Creating catalog-info.yaml ${{ parameters.component_id }} for backstage

可选但建议补充的属性

部分GitLab实例可能要求额外属性,否则返回400:

  • branchName:指定推送的分支名,如main或master,匹配GitLab实例的默认分支设置
  • visibility:设置仓库可见性,如private、internal或public,部分实例不允许使用默认值,需明确指定

修正后的publish步骤示例:

- id: publish
  name: Publish
  action: publish:gitlab
  input:
    allowedHosts:
      - gitlab.example.com
    description: This is ${{ parameters.component_id }}
    repoUrl: ${{ parameters.repoUrl }}
    title: Creating catalog-info.yaml ${{ parameters.component_id }} for backstage
    branchName: main
    visibility: private

其他排查点

  1. 确认Backstage使用的GitLab Token拥有创建仓库、推送代码、创建合并请求的权限
  2. 检查GitLab实例是否开启了相关限制(如不允许空标题的MR、必须指定仓库可见性等)

内容的提问来源于stack exchange,提问作者Max Bojorquez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 22:50:40