본문 바로가기

JCasC에서 Jenkins 계정 관리 방법

JCasC(Jenkins Configuration as Code)환경에서 계정을 제대로 관리하지 않으면
Jenkins admin 등 계정의 비밀번호가 계속 초기화될 수 있다.

# 기존 설정 (문제)

controller:
admin:
  username: "admin"
  createSecret: true  # Helm upgrade마다 새 Secret 생성 → 비밀번호 초기화

해결 방법을 크게 두 가지 제안한다.

  • secret으로 관리 (JCasC를 통한 계정 관리)
  • Jenkins 자체 관리 (JCasC 포기)

Secret으로 관리

JCasC를 통한 계정 관리 방법

JCasC를 통한 Jenkins 계정 관리 방법을 안내한다.

비밀번호 관리를 위한 secret을 생성한다.

apiVersion: v1
kind: Secret
metadata:
  name: jenkins-credentials
  namespace: jenkins
type: Opaque
stringData:
  # 사용자 계정
  admin-password: "비밀번호"
  developer-password: "비밀번호"
  readonly-password: "비밀번호"

  # CI/CD 연동 (GitHub, OCIR 등)
  github-token: "발급한 github 토큰"

  ...(그 외 기타 필요한 환경변수)

JCasC에 적용하기 위해 values.yaml을 수정한다.

controller:
  # Secret 마운트 설정
  existingSecret: "jenkins-credentials"

  additionalExistingSecrets:
    - name: jenkins-credentials
      keyName: admin-password
    - name: jenkins-credentials
      keyName: developer-password
    - name: jenkins-credentials
      keyName: readonly-password
    - name: jenkins-credentials
      keyName: github-token
    - name: jenkins-credentials
      keyName: ocir-username
    - name: jenkins-credentials
      keyName: ocir-password

  JCasC:
    defaultConfig: false  # 기본 설정 비활성화, 직접 정의
    securityRealm: |-
      local:
        allowsSignup: false
        enableCaptcha: false
        users:
          - id: "admin"
              name: "Administrator"
              password: "${jenkins-credentials-admin-password}"
          - id: "developer"
              name: "Developer"
              password: "${jenkins-credentials-developer-password}"
          - id: "readonly"
            name: "Read Only User"
            password: "${jenkins-credentials-readonly-password}"

    authorizationStrategy: |-
      roleBased:
        roles:
        global:
          - name: "admin"
            permissions:
              - "Overall/Administer"
            entries:
              - user: "admin"
          - name: "developer"
            permissions:
              - "Overall/Read"
              - "Job/Build"
              - "Job/Cancel"
              - "Job/Read"
              - "Job/Workspace"
              - "Run/Replay"
              - "Run/Update"
            entries:
              - user: "developer"
          - name: "readonly"
            permissions:
              - "Overall/Read"
              - "Job/Read"
            entries:
              - user: "readonly"

    configScripts:
      welcome-message: |
        jenkins:
            systemMessage: "Welcome to Jenkins CI/CD Server"
    credentials: |
      credentials:
        system:
          domainCredentials:
            - credentials:
              - usernamePassword:
                id: "github-credentials"
                description: "GitHub PAT"
                username: "계정명"
                password: "${jenkins-credentials-github-token}"
                scope: GLOBAL

필요한 플러그인들을 추가한다.

controller:
  installPlugins:
    - kubernetes:latest
    - workflow-aggregator:latest
    - git:latest
    - github:latest
    - github-branch-source:latest
    - docker-workflow:latest
    - pipeline-utility-steps:latest
    - configuration-as-code:latest
    - credentials-binding:latest
    - job-dsl:latest
    - role-strategy:latest  # RBAC 권한 관리

이후 운영 방법

계정/비밀번호 변경

  1. Secret 업데이트

    kubectl edit secret jenkins-credentials -n jenkins
    
    # 또는
    
    kubectl patch secret jenkins-credentials -n jenkins \
       -p '{"stringData":{"developer-password":"변경할비밀번호"}}'
  2. Jenkins 재시작 (JCasC 재적용)

    kubectl rollout restart statefulset jenkins -n jenkins

계정 추가

  1. Secret에 새 키 추가

    kubectl patch secret jenkins-credentials -n jenkins \
       -p '{"stringData":{"newuser-password":"비밀번호"}}'
  2. values.yaml 수정
    (additionalExistingSecrets, securityRealm, authorizationStrategy)

  3. Helm upgrade

    helm upgrade jenkins jenkins/jenkins -n jenkins -f jenkins/values.yaml
NORMAL j/k: 이동 · Enter: 열기 · /: 검색 · ?: 도움말