jenkins

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: 11 Imported by: 0

Documentation

Overview

Package jenkins 는 Jenkins 에 multibranch pipeline job 을 만든다.

GitLab CI·GitHub Actions 와 근본적으로 다른 지점을 흡수하는 자리다. 그쪽은 파이프라인 정의를 푸시하면 자동으로 감지하지만, Jenkins 는 job 이 먼저 존재해야 한다 — Jenkinsfile 만 커밋해서는 아무 일도 일어나지 않는다.

multibranch 를 쓰는 이유는 job 이 Jenkinsfile 을 저장소에서 스스로 찾기 때문이다. 스캐폴딩 결과와 자연스럽게 맞물리고, 브랜치가 늘어도 job 을 다시 만들 필요가 없다.

Index

Constants

View Source
const (
	// SecretProvider 는 자격증명을 보관하는 시크릿 백엔드다.
	SecretProvider = "openbao"

	// AdminUser 는 차트가 만드는 Jenkins 관리자 계정이다.
	// 스택 설치의 provisioning_secrets 가 같은 이름으로 자격증명을 만든다
	// (internal/stack/domain.JenkinsAdminUser). 두 값이 갈라지면 인증이 실패한다.
	AdminUser = "admin"
)

Variables

This section is empty.

Functions

func AdminPasswordPath

func AdminPasswordPath(env, orgID string) string

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

func NewClient(baseURL, user, token string) *Client

NewClient 는 Jenkins 클라이언트를 만든다.

baseURL 은 컨트롤러 주소다 (예: http://jenkins.nullus.svc:8080). user/token 은 관리자 계정과 API 토큰(또는 비밀번호)이다.

func (*Client) DeleteJob

func (c *Client) DeleteJob(ctx context.Context, name string) error

DeleteJob 은 job 을 지운다. 이미 없으면 성공으로 본다 — 삭제의 목표는 "없는 상태" 이고, 404 를 오류로 올리면 재시도가 영영 끝나지 않는다.

func (*Client) EnsureJob

func (c *Client) EnsureJob(ctx context.Context, spec port.CIJobSpec) (*port.CIJob, error)

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

func (c *Client) TriggerBuild(ctx context.Context, jobName, branch string) error

TriggerBuild 는 job 을 지금 실행시킨다.

스택에 묶인 파이프라인의 "배포 실행" 이 여기로 온다. 플랫폼은 빌드하지 않고 러너에게 넘긴다 — 빌드는 CI 가 하고 배포는 Argo CD 가 하며, 플랫폼은 그 결과를 SyncPipelineRuns 로 들여 화면에 보여 준다.

multibranch job 은 브랜치가 하위 job 이다. 브랜치를 빼면 폴더 자체를 실행하려 들고 Jenkins 는 405 로 거절한다 — ListBuilds 와 같은 경로 규칙이다.

func (*Client) WithHTTPClient

func (c *Client) WithHTTPClient(h *http.Client) *Client

WithHTTPClient 는 타임아웃·전송 계층을 교체한다.

쿠키 jar 가 없으면 붙여 준다 — crumb 세션이 유지되지 않으면 모든 POST 가 403 으로 죽는다.

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 관리자 자격증명을 읽는다.

type SecretStore

type SecretStore interface {
	GetTokenForStack(ctx context.Context, provider, stackID, path string) (string, error)
}

SecretStore 는 자격증명 조회에 필요한 최소 동작만 노출한다.

스택 범위 접근을 쓴다 — OpenBao 는 스택마다 배포되므로 전역 주소가 하나일 수 없다. gitea.SecretStore 와 같은 형태지만 각 어댑터가 자기 계약을 소유한다.

Jump to

Keyboard shortcuts

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