Cloud & DevOps/CICD

[Jenkins] JCasC로 프로젝트(job) 이름 규칙 정하기

백곰곰 2023. 2. 18. 15:13
728x90
반응형

개요

Jenkins를 관리할 때 프로젝트 이름에 규칙을 지정하고 준수가 필요하다면 Jenkins 관리 > 시스템 설정 > Restrict project naming 메뉴에서 정규식으로 지정할 수 있다. 하지만 helm으로 k8s 클러스터에 배포한 경우 JCasC로 설정을 하지 않으면 pod 재생성 시 설정이 지워져 다시 설정이 필요하다. 매번 설정을 다시 하는 것이 번거롭기 때문에 JCasC에 포함하여 helm으로 함께 배포하고자 한다.


JCasC 란?

Jenkins Configuration as Code의 약자로 Jenkins 설정을 UI가 아닌 코드로 지정하는 기능이다. ldap, 보안 설정 등 다양한 설정을 지정할 수 있으며, 설정이 코드에 남기 때문에 동일한 설정으로 여러 서버를 생성하거나 복구하는데 활용할 수 있다.


helm values.yaml  파일에 JCasC 설정 추가하기

configScripts 아래에 원하는 설정을 추가하고 helm을 재배포한 뒤 master pod를 재생성한다.

[수정 전]

  JCasC:
    defaultConfig: true
    configUrls: []
    # - https://acme.org/jenkins.yaml
    # Remote URL:s for configuration files.
    configScripts: {}
    #  welcome-message: |
    #    jenkins:
    #      systemMessage: Welcome to our CI\CD server.  This Jenkins is configured and managed 'as code'.
    # Allows adding to the top-level security JCasC section. For legacy,  default the chart includes apiToken configurations

[수정 후]

  JCasC:
    defaultConfig: true
    configUrls: []
    # - https://acme.org/jenkins.yaml
    # Remote URL:s for configuration files.
    configScripts:
      naming-strategy-settings: |
	    jenkins:
	  	  projectNamingStrategy:
		    pattern: 
			  description: "설명 기재"
			  forceExistingJobs: false
			  namePattern: "[a-z0-9-]+"

 

naming-strategy-settings는 원하는 값으로 수정해도 되며 배포 후 master jenkins pod에 들어가 보면 /home/jenkins/casc_configs 폴더 아래에 같은 이름의 파일이 생성되어 있는 것을 볼 수 있다.

defaultConfigjcasc-default-config.yaml 파일 포함 여부를 지정하는데, 해당 설정을true로 하면 이런 오류가 생긴다.

        pattern:
        ^
	at io.jenkins.plugins.casc.yaml.ErrorOnConflictMergeStrategy.merge(ErrorOnConflictMergeStrategy.java:21)

이는 jcasc-default-config.yaml 파일에 기본적으로 아래와 같은 설정이 포함되어 있기 때문에 두 개의 설정이 충돌되어 발생하는 것이므로 false로 설정이 필요하다.

  projectNamingStrategy: "standard"

 

728x90