Documentation
¶
Overview ¶
Package registry 는 스택이 선택한 이미지 레지스트리에 맞춰 이미지 저장 위치를 결정한다.
GitLab 스택에서는 앱 프로젝트 자신의 Container Registry 를 쓰지만, Harbor 를 고른 스택에서는 Harbor 프로젝트를 써야 한다. CI 스크립트가 특정 레지스트리를 전제하지 않도록 이 결정을 한곳에 모은다.
Index ¶
Constants ¶
const (
// GHCRHost 는 GitHub Container Registry 의 호스트다.
GHCRHost = "ghcr.io"
)
Variables ¶
This section is empty.
Functions ¶
func ResolverFor ¶
func ResolverFor(cfg Config) (port.ImageRegistryResolver, error)
ResolverFor 는 스택 구성에 맞는 resolver 를 고른다.
어디에 올릴지 정할 수 없으면 실패한다 — 기본값으로 조용히 흘리면 CI 가 엉뚱한 곳에 이미지를 올리고, 배포는 존재하지 않는 이미지를 집게 된다.
Types ¶
type Config ¶
type Config struct {
// ToolName 은 스택이 고른 도구 이름이다 (예: "GitLab Registry", "Harbor").
ToolName string
// HarborHost 는 Harbor 를 고른 경우의 호스트다.
HarborHost string
// NexusDockerHost 는 Nexus 를 고른 경우의 Docker 커넥터 호스트다.
//
// Nexus 는 웹 UI 와 Docker 레지스트리를 다른 포트로 연다. UI 주소로 push
// 하면 이미지 대신 HTML 을 받아 원인을 알기 어려운 실패가 나므로 별도 값이다.
NexusDockerHost string
// ExternalRepositoryPrefix 는 외부 레지스트리의 저장소 접두사다
// (예: "ghcr.io/acme"). 알 수 없는 도구의 폴백으로도 쓴다.
ExternalRepositoryPrefix string
// GitHubOwner 는 GHCR 을 고른 경우의 organization/사용자다.
// GHCR 경로가 ghcr.io/{owner}/{repo} 라서 소유자를 알아야 한다.
GitHubOwner string
}
Config 는 스택 구성에서 온 레지스트리 선택 정보다.
type ExternalResolver ¶
type ExternalResolver struct {
// contains filtered or unexported fields
}
ExternalResolver 는 클러스터 밖 레지스트리를 쓴다.
func NewExternalResolver ¶
func NewExternalResolver(prefix string) *ExternalResolver
NewExternalResolver 는 저장소 접두사(예: "ghcr.io/acme")로 resolver 를 만든다.
func (*ExternalResolver) Resolve ¶
func (r *ExternalResolver) Resolve(_ context.Context, spec port.ImageTargetSpec) (*port.ImageTarget, error)
Resolve 는 {prefix}/{app} 경로를 만든다.
type GHCRResolver ¶
type GHCRResolver struct {
// contains filtered or unexported fields
}
GHCRResolver 는 GitHub Container Registry 를 쓴다.
다른 레지스트리와 달리 자격증명을 등록받지 않는다 — GitHub Actions 잡은 내장 GITHUB_TOKEN 으로 자기 리포의 패키지에 push 할 수 있다(packages: write). 사용자에게 시크릿을 요구하면 쓸데없이 PAT 가 워크플로에 노출된다.
func NewGHCRResolver ¶
func NewGHCRResolver(owner string) *GHCRResolver
NewGHCRResolver 는 organization/사용자 이름으로 resolver 를 만든다.
func (*GHCRResolver) Resolve ¶
func (r *GHCRResolver) Resolve(_ context.Context, spec port.ImageTargetSpec) (*port.ImageTarget, error)
Resolve 는 ghcr.io/{owner}/{repo} 경로를 만든다.
GitHub 어댑터가 알려준 경로가 있으면 그것을 쓴다 — 리포 이름이 앱 이름과 다를 수 있고(이미 있는 리포를 재사용하는 경우), 그때 앱 이름으로 조립하면 존재하지 않는 패키지를 가리키게 된다.
type HarborResolver ¶
type HarborResolver struct {
// contains filtered or unexported fields
}
HarborResolver 는 독립 설치된 Harbor 를 쓴다.
func NewHarborResolver ¶
func NewHarborResolver(host string) *HarborResolver
NewHarborResolver 는 HarborResolver 를 만든다.
func (*HarborResolver) Resolve ¶
func (r *HarborResolver) Resolve(_ context.Context, spec port.ImageTargetSpec) (*port.ImageTarget, error)
Resolve 는 {harbor}/{org}/{app} 경로를 만든다.
type NexusResolver ¶
type NexusResolver struct {
// contains filtered or unexported fields
}
NexusResolver 는 Nexus 의 Docker 커넥터를 쓴다.
Harbor 와 달리 프로젝트 개념이 없다. 이미지는 커넥터 호스트 바로 아래에 놓이므로 조직 경로를 끼워 넣지 않는다 — 넣으면 존재하지 않는 저장소를 가리키게 되고 push 가 거부된다.
func NewNexusResolver ¶
func NewNexusResolver(host string) *NexusResolver
NewNexusResolver 는 Docker 커넥터 호스트(host:port)로 resolver 를 만든다.
func (*NexusResolver) Resolve ¶
func (r *NexusResolver) Resolve(_ context.Context, spec port.ImageTargetSpec) (*port.ImageTarget, error)
Resolve 는 {nexus-docker-host}/{app} 경로를 만든다.
type SCMProjectResolver ¶
type SCMProjectResolver struct{}
SCMProjectResolver 는 SCM 프로젝트에 딸린 레지스트리를 쓴다.
func NewSCMProjectResolver ¶
func NewSCMProjectResolver() *SCMProjectResolver
NewSCMProjectResolver 는 SCMProjectResolver 를 만든다.
func (*SCMProjectResolver) Resolve ¶
func (r *SCMProjectResolver) Resolve(_ context.Context, spec port.ImageTargetSpec) (*port.ImageTarget, error)
Resolve 는 SCM 이 알려준 프로젝트 레지스트리 경로를 그대로 쓴다.