백스테이지 소프트웨어 템플릿

18633 단어 backstage
mccricardo.com에 원래 게시되었습니다.

우리의 목표가 우리의 삶과 우리와 함께 일하는 사람들의 삶을 더 쉽고 행복하게 만드는 것이라면 Backstage 소프트웨어 템플릿이 도움이 될 수 있습니다. 이 도구는 Backstage 내에서 코드 스켈레톤을 로드하고 일부 변수를 채우고 해당 템플릿을 어딘가에 게시하는 구성 요소를 만드는 데 도움이 될 수 있습니다.

이 파티를 시작하자



계속 따라오셨다면 Backstage intro에서 Backstage 설치를 로컬로 설정하고 소프트웨어 템플릿을 비롯한 많은 구성 요소를 편리하게 부트스트랩했습니다. 바로 시작합시다.

구성 요소 만들기를 선택하여 시작하겠습니다.


그런 다음 Golang Microservice를 선택합니다.


필요한 정보를 요청하는 양식이 표시됩니다. 입력하고 다음 단계를 클릭합니다.


VCS 통합을 설정할 수 있는 새 양식이 표시됩니다.


마지막으로 리뷰가 표시되고 Create를 진행할 수 있습니다.


그리고 Backstage가 마법을 부릴 것입니다.


새 구성 요소가 생성됩니다.


많은 코드가 포함된 새로운 저장소도 있습니다.



잠시 주변을 둘러보고 가라앉게 합시다.

방금 무슨 일이 일어났나요?



템플릿을 기반으로 Backstage는 코드와 통합으로 가득 찬 새로운 리포지토리를 생성할 수 있었습니다. Backstage intro에서 수행한 설정은 이 모든 것을 무료로 가져왔습니다. app.config.yaml를 살펴보면 다음을 볼 수 있습니다.

catalog:
  rules:
    - allow: [Component, System, API, Group, User, Template, Location]
  locations:
    - type: url
      target: https://github.com/spotify/cookiecutter-golang/blob/master/template.yaml
      rules:
        - allow: [Template]


이는 다음 템플릿을 가리킵니다.

apiVersion: backstage.io/v1alpha1
kind: Template
metadata:
  name: golang-starter
  title: Golang Microservice
  description: Create a Golang repo with this template built by members of the Go community
  tags:
    - experimental
    - go
spec:
  owner: [email protected]
  templater: cookiecutter
  type: service
  path: "."
  schema:
    required:
      - component_id
      - project_short_description
      - docker_image
      - docker_build_image
      - docker_build_image_version
      - use_logrus_logging
      - use_viper_config
      - use_ci
      - use_cobra_cmd
    properties:
      component_id:
        title: Name
        type: string
        description: Unique name of the component
      project_short_description:
        title: Description
        type: string
        description: Description of the component
      docker_image:
        title: Docker Image
        type: string
        description: The docker base image to use when running the service
        default: alpine-base-image:latest
      docker_build_image:
        title: Docker Build Image
        type: string
        description: The docker base image to use when building the service
        default: golang
      docker_build_image_version:
        title: Docker Build Image Version
        description: The image version to use when building the service
        type: string
        enum:
          - alpine
        default: alpine
      use_logrus_logging:
        title: Enable Logrus Logging (https://github.com/sirupsen/logrus)
        type: string
        enum:
          - "y"
          - "n"
        default: "y"
      use_viper_config:
        title: Enable Viper Config (https://github.com/spf13/viper)
        type: string
        enum:
          - "y"
          - "n"
        default: "y"
      use_cobra_cmd:
        title: Enable Cobra CLI Tools (https://github.com/spf13/cobra)
        type: string
        enum:
          - "y"
          - "n"
        default: "y"
      use_ci:
        title: Add CI
        description: Add a CI config to the repo, Gitub Actions, Circle or Travis are the only supported right now
        type: string
        enum:
          - github
          - travis
          - circle
          - none
        default: github


이제 무언가가 이것을 해석하고 마법을 부려야 합니다. 이것은 packages/backend/src/plugins/scaffolder.ts가 작동하는 곳입니다.

import { SingleHostDiscovery } from '@backstage/backend-common';
import { CatalogClient } from '@backstage/catalog-client';
import {
  CookieCutter,
  CreateReactAppTemplater,
  createRouter,
  Preparers,
  Publishers,
  Templaters
} from '@backstage/plugin-scaffolder-backend';
import Docker from 'dockerode';
import { Router } from 'express';
import type { PluginEnvironment } from '../types';

export default async function createPlugin({
  logger,
  config,
  database,
  reader,
}: PluginEnvironment): Promise<Router> {
  const cookiecutterTemplater = new CookieCutter();
  const craTemplater = new CreateReactAppTemplater();
  const templaters = new Templaters();

  templaters.register('cookiecutter', cookiecutterTemplater);
  templaters.register('cra', craTemplater);

  const preparers = await Preparers.fromConfig(config, { logger });
  const publishers = await Publishers.fromConfig(config, { logger });

  const dockerClient = new Docker();

  const discovery = SingleHostDiscovery.fromConfig(config);
  const catalogClient = new CatalogClient({ discoveryApi: discovery });

  return await createRouter({
    preparers,
    templaters,
    publishers,
    logger,
    config,
    dockerClient,
    database,
    catalogClient,
    reader
  });
}

@backstage/plugin-scaffolder-backend ~ CookieCuttercookiecutter-golang을 기반으로 Golang 프로젝트를 부트스트랩하는 방법을 "알고"있습니다. 그리고 그것이 모든 마법이 일어나는 방식입니다.

결국 우리는 add our own templates 도움이 필요할 것입니다 writing them . 그리고 builtin actions 이 충분하지 않으면 쓰기 custom actions 가 포함될 수 있습니다.

Backstage 소프트웨어 템플릿은 표준화를 제공하고 팀이 더 빠르게 생산성을 높일 수 있도록 크게 도약합니다.

좋은 웹페이지 즐겨찾기