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 판이 같은 단계를 만든다. 이름 표기만 다르므로(소문자 대 대문자) 여기서는 표시용 표기를 쓴다.
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 은 스캐폴딩 렌더 요청이다.
Click to show internal directories.
Click to hide internal directories.