scaffold

package
v0.5.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 31, 2026 License: Apache-2.0 Imports: 6 Imported by: 0

Documentation

Overview

Package scaffold 는 앱 프로젝트에 커밋할 초기 파일들을 만든다.

소스와 배포 매니페스트가 한 저장소에 함께 산다. CI 가 이미지를 만들어 레지스트리에 올린 뒤 deploy/ 의 태그를 갱신해 되쓰면, Argo CD 가 그 커밋을 감지해 배포한다.

이미지 저장 위치는 이 패키지가 정하지 않는다 — port.ImageTarget 으로 받는다. GitLab 프로젝트 레지스트리를 전제하면 Harbor 스택에서 엉뚱한 곳에 올린다.

Index

Constants

View Source
const (
	// GitUsernameVar / GitPasswordVar 는 매니페스트 되커밋에 쓰는 자격증명이다.
	// ESO 가 만든 파이프라인 Secret 에서 환경변수로 들어온다.
	//
	// 자격증명을 채우는 쪽(cicd/usecase 의 configureGiteaPipeline)이 같은
	// 이름을 써야 한다 — 갈라지면 push 가 인증 실패로 죽는다.
	GitUsernameVar = "GIT_USERNAME"
	GitPasswordVar = "GIT_PASSWORD" // #nosec G101 -- CI 변수 이름
)
View Source
const (
	// InitialImageTag 는 첫 커밋 시점의 태그다. 아직 빌드된 이미지가 없으므로
	// CI 가 첫 실행에서 실제 커밋 SHA 로 치환한다.
	InitialImageTag = "bootstrap"

	// DeployTokenVar 는 GitLab CI 가 매니페스트를 되쓰기 위해 쓰는 토큰 변수다.
	// CI_JOB_TOKEN 은 저장소 push 권한이 없어 별도 토큰이 필요하다.
	//
	// GitHub 에는 대응물이 없다 — 내장 GITHUB_TOKEN 이 contents:write 로 push 한다.
	DeployTokenVar = "NULLUS_DEPLOY_TOKEN" // #nosec G101 -- CI 변수 이름

	// GitLabPipelinePath / GitHubWorkflowPath 는 각 플랫폼이 파이프라인 정의를
	// 읽는 위치다. 경로가 틀리면 파일은 커밋되지만 CI 가 영영 돌지 않는다.
	GitLabPipelinePath = ".gitlab-ci.yml"
	GitHubWorkflowPath = ".github/workflows/nullus-ci.yml"
	// JenkinsfilePath 는 Jenkins multibranch job 이 파이프라인 정의를 찾는
	// 위치다. 리포 루트가 아니면 job 이 "Jenkinsfile not found" 로 브랜치를
	// 통째로 건너뛴다.
	JenkinsfilePath = "Jenkinsfile"
)

Variables

This section is empty.

Functions

func PipelineStageNames

func PipelineStageNames() []string

PipelineStageNames 는 스캐폴딩이 만드는 파이프라인의 단계 이름이다.

템플릿이 선언하는 stages 의 출처다. 손으로 적으면 실제와 어긋나고, 어긋나면 화면이 돌지도 않은 단계를 보여준다 — 실제로 템플릿은 Build/Test/ImageBuild/ Deploy 4단계를 선언했지만 스캐폴딩은 2단계만 만들었다.

GitLab 판과 Jenkins 판이 같은 단계를 만든다. 이름 표기만 다르므로(소문자 대 대문자) 여기서는 표시용 표기를 쓴다.

func Render

func Render(in Input) ([]port.CommitFile, error)

Render 는 앱 프로젝트에 커밋할 파일들을 만든다.

같은 입력이면 같은 결과다 — 재스캐폴딩이 의미 없는 diff 를 만들지 않도록 파일 경로를 정렬해 돌려준다.

Types

type Input

type Input struct {
	AppName string
	// AppType 은 어떤 앱을 만들지다. web 이면 바로 도는 React 앱을 스캐폴딩한다.
	// 비면 예전처럼 자리만 잡는 nginx Dockerfile 을 만든다.
	AppType   domain.AppType
	Namespace string
	Port      int32
	Replicas  int32
	// Platform 은 소스 저장소 플랫폼이다. 비면 GitLab 으로 본다.
	Platform port.SCMPlatform
	// CIPlatform 은 파이프라인 정의를 어느 형식으로 쓸지 정한다.
	//
	// SCM 과 별개의 축이다 — Gitea 는 소스만 담당하고 빌드는 Jenkins 가 한다.
	// 비면 Platform 이 함의하는 기본 CI 를 쓴다.
	CIPlatform port.CIPlatform
	// ImageTarget 은 resolver 가 정한 이미지 저장 위치다.
	ImageTarget *port.ImageTarget
	// AccessDomain / GatewayName / GatewayNamespace 가 모두 있으면
	// 외부 접근용 HTTPRoute 를 함께 만든다. 없으면 클러스터 내부에서만
	// 접근 가능한 Service 까지만 만든다.
	AccessDomain     string
	GatewayName      string
	GatewayNamespace string
	// StackID 는 배포된 워크로드가 어느 스택 소속인지 클러스터에서 알아보게 한다.
	// 네임스페이스로는 판별할 수 없다 — 파이프라인이 default 에 깔 수도 있고
	// 여러 스택이 한 네임스페이스를 공유할 수도 있다. 비면 라벨을 붙이지 않는다.
	StackID string
	// TemplateID 는 어느 CI/CD 템플릿에서 나온 앱인지 알아보게 한다.
	// 템플릿별 자원 사용 비교나 템플릿 단위 조회에 쓴다. 비면 라벨을 붙이지 않는다.
	TemplateID string
}

Input 은 스캐폴딩 렌더 요청이다.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL