Documentation
¶
Overview ¶
Package jenkins 는 Jenkins 에 multibranch pipeline job 을 만든다.
GitLab CI·GitHub Actions 와 근본적으로 다른 지점을 흡수하는 자리다. 그쪽은 파이프라인 정의를 푸시하면 자동으로 감지하지만, Jenkins 는 job 이 먼저 존재해야 한다 — Jenkinsfile 만 커밋해서는 아무 일도 일어나지 않는다.
multibranch 를 쓰는 이유는 job 이 Jenkinsfile 을 저장소에서 스스로 찾기 때문이다. 스캐폴딩 결과와 자연스럽게 맞물리고, 브랜치가 늘어도 job 을 다시 만들 필요가 없다.
Index ¶
- Constants
- func AdminPasswordPath(env, orgID string) string
- type Client
- func (c *Client) DeleteJob(ctx context.Context, name string) error
- func (c *Client) EnsureJob(ctx context.Context, spec port.CIJobSpec) (*port.CIJob, error)
- func (c *Client) ListBuilds(ctx context.Context, jobName, branch string, limit int) ([]port.CIBuild, error)
- func (c *Client) TriggerBuild(ctx context.Context, jobName, branch string) error
- func (c *Client) WithHTTPClient(h *http.Client) *Client
- type CredentialResolver
- type SecretStore
Constants ¶
const ( // SecretProvider 는 자격증명을 보관하는 시크릿 백엔드다. SecretProvider = "openbao" // AdminUser 는 차트가 만드는 Jenkins 관리자 계정이다. // 스택 설치의 provisioning_secrets 가 같은 이름으로 자격증명을 만든다 // (internal/stack/domain.JenkinsAdminUser). 두 값이 갈라지면 인증이 실패한다. AdminUser = "admin" )
Variables ¶
This section is empty.
Functions ¶
func AdminPasswordPath ¶
AdminPasswordPath 는 관리자 비밀번호의 시크릿 경로다.
스택 모듈이 쓰는 경로와 정확히 같아야 한다 (helm/secret-provisioning.go 의 managedSecrets → "cicd/jenkins/admin-password"). 갈라지면 설치는 성공하는데 job 생성만 401 로 실패한다.
Types ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client 는 port.CIJobProvisioner 의 Jenkins 구현체다.
func NewClient ¶
NewClient 는 Jenkins 클라이언트를 만든다.
baseURL 은 컨트롤러 주소다 (예: http://jenkins.nullus.svc:8080). user/token 은 관리자 계정과 API 토큰(또는 비밀번호)이다.
func (*Client) DeleteJob ¶
DeleteJob 은 job 을 지운다. 이미 없으면 성공으로 본다 — 삭제의 목표는 "없는 상태" 이고, 404 를 오류로 올리면 재시도가 영영 끝나지 않는다.
func (*Client) EnsureJob ¶
EnsureJob 은 multibranch pipeline job 을 만들거나 이미 있으면 그대로 둔다.
이미 있는 job 을 덮어쓰지 않는다 — 사용자가 Jenkins UI 에서 고친 설정(빌드 보존 기간, 추가 트리거 등)이 재프로비저닝마다 사라지면 안 된다.
func (*Client) ListBuilds ¶
func (c *Client) ListBuilds(ctx context.Context, jobName, branch string, limit int) ([]port.CIBuild, error)
ListBuilds 는 job 의 브랜치 빌드 이력을 읽는다.
GitOps 경로에서는 플랫폼이 배포를 실행하지 않으므로 실행 기록이 여기에만 있다. 들이지 않으면 빌드가 성공해도 화면의 실행 통계가 0 으로 남는다.
func (*Client) TriggerBuild ¶
TriggerBuild 는 job 을 지금 실행시킨다.
스택에 묶인 파이프라인의 "배포 실행" 이 여기로 온다. 플랫폼은 빌드하지 않고 러너에게 넘긴다 — 빌드는 CI 가 하고 배포는 Argo CD 가 하며, 플랫폼은 그 결과를 SyncPipelineRuns 로 들여 화면에 보여 준다.
multibranch job 은 브랜치가 하위 job 이다. 브랜치를 빼면 폴더 자체를 실행하려 들고 Jenkins 는 405 로 거절한다 — ListBuilds 와 같은 경로 규칙이다.
type CredentialResolver ¶
type CredentialResolver struct {
// contains filtered or unexported fields
}
CredentialResolver 는 port.CICredentialResolver 의 Jenkins 구현체다.
토큰을 발급하지 않고 읽기만 한다. Jenkins 관리자 비밀번호는 스택 설치의 provisioning_secrets 가 이미 만들어 OpenBao 에 넣어 두었고, 같은 값을 ESO 가 K8s Secret 으로 동기화해 컨트롤러가 쓴다 — 여기서 새로 발급하면 그 둘과 어긋나 컨트롤러가 자기 비밀번호를 모르게 된다.
func NewCredentialResolver ¶
func NewCredentialResolver(secrets SecretStore) *CredentialResolver
NewCredentialResolver 는 CredentialResolver 를 만든다.
func (*CredentialResolver) ResolveCICredential ¶
func (r *CredentialResolver) ResolveCICredential( ctx context.Context, spec port.SCMTokenSpec, ) (user, secret string, err error)
ResolveCICredential 은 스택의 Jenkins 관리자 자격증명을 읽는다.