[Jenkins] CI/CD 파이프라인 구축 중 .gitIgnore 처리된 Config 파일 관리 본문
CI/CD Pipeline Architecture
개발자가 Github에 변경된 코드를 Push 하게 되면, 홈서버에 위치한 Jenkins로 HTTP POST 요청이 전달된다.
Jenkins에서는 해당 요청을 트리거로 지정된 Job을 수행하게 된다. 이번 프로젝트에서 설정한 Jenkins의 파이프라인은 Github의 Repository를 클론하여 해당 프로젝트의 이미지를 build 한 후 해당 이미지를 DockerHub로 Push 하는 것이다.
사용한 백엔드 프레임워크는 Spring Boot로 Gradle을 통해 bootJar된 jar 파일을 이미지화 시켜 DockerHub에 Push 하는 것이 주된 목표다.
Spring Boot & yaml file
Spring Boot의 경우 데이터베이스에 대한 정보, OAuth 사용을 위한 Key 값과 같이 노출을 피해야 하는 정보들을 application.yaml
혹은 application.properties
파일에 작성한다.
개발자들은 노출되서는 안되는 해당 파일들이 Github 같은 공용 저장소에 올라가지 않도록 주의해야 하는데, Git을 사용할 경우 .gitIgnore
파일을 통해 형상 관리의 범위에서 제외할 수 있다.
필자 또한 .gitIgnore
를 통해 application-local.yaml
, application-oauth.yaml
파일을 관리하고 있었다. .gitIgnore
에 지정한 파일들은 형상 관리의 범위에서 제외되기 때문에 Github에도 업로드 되지 않는다.
하지만 필자가 작성한 CI/CD 파이프라인은 Github의 리포지토리를 클론하여 동작하기 때문에 해당 파일들이 없다면 Spring Boot가 정상적으로 구동이 되지 않아 파이프라인이 실패하게 된다.
어떻게 해당 파일들을 공개된 저장소에 올리지 않으면서도 CI/CD 시에 적용할 수 있을까?
Jenkins Credentials
필자는 Jenkins에서 제공하는 Credentials에 각 파일을 등록하여, 파이프라인 스크립트 작성 시 변수로 불러와 사용하는 방법을 사용했다.
[Jenkins 관리] -> [Credentials] -> [Add Credentials] 를 통해 Credential을 생성할 수 있는 폼으로 이동할 수 있다.
위의 사진과 같이 파일 자체를 Credential로 등록할 때는 Kind를 Secret file로 선택하고 등록하고자 하는 파일을 지정하면 된다.
ID의 경우 파이프라인 스크립트에서 사용되기 때문에 명확하게 구분이 가능한 이름으로 지어주고, Description은 해당 Credential에 대한 간단한 설명글을 작성해두면 된다. 성공적으로 등록했다면 아래와 같이 Credentials 목록에서 확인이 가능하다.
이렇게 등록된 Credentials는 Jenkins의 파이프라인 스크립트를 통해 불러올 수 있다.
CI/CD Pipeline Script
이번 포스팅의 주요 목적은 Credentials로 등록된 config 파일을 파이프라인 스크립트에서 사용하는 것이기 때문에 이외의 스크립트에 대한 추가적인 설명은 진행하지 않는다.
...
stage('copy yaml') {
steps {
withCredentials([file(credentialsId: 'Animealth-Application-Local', variable: 'LOCAL_YAML'),
file(credentialsId: 'Animealth-Application-Oauth', variable: 'OAUTH_YAML')]) {
script {
sh 'cp $LOCAL_YAML /var/jenkins_home/workspace/Animealth_Backend/src/main/resources/application-local.yml'
sh 'cp $OAUTH_YAML /var/jenkins_home/workspace/Animealth_Backend/src/main/resources/application-oauth.yml'
}
}
echo 'copy yaml success!'
}
}
...
위의 스크립트는 Docker 이미지를 빌드하기 전에 Credentials로 등록된 파일을 클론한 프로젝트 내부의 경로로 복사하는 스크립트다.
CredentialsId
에는 아까전 등록한 Credential의 ID를 입력하고, variable
에는 해당 스크립트에서 사용하게 될 Credential을 담게 될 변수명을 원하는대로 입력하면 된다.
아래의 sh
명령어는 $LOCAL_YAML
이라는 변수로 등록된 Animealth-Application-Local
Credential을 /var/jenkins_home/workspace/Animealth_Backend/src/main/resources
경로에 위치한 application-local.yaml
파일로 내용을 복사하라는 의미다.
아래쪽의 sh
명령어 또한 동일한 의미의 명령어로 application-oauth.yaml
에 대한 내용을 담고 있다.
성공적으로 copy yaml
스테이지가 종료되면 copy yaml success! 라는 문구를 콘솔에 출력한다.
Result
작성된 파이프라인을 통해 CI/CD를 진행하면 Jenkins의 Item Console Output을 통해 결과를 실시간으로 확인할 수 있다.
yaml 파일에 대한 Credentials 등록과 파이프라인 스크립트 작성이 잘 이루어졌다면, 아래와 같이 copy yaml success! 라는 문구가 콘솔에 출력되는 것을 확인할 수 있다.
Jenkins에서 제공하는 GUI를 통해 전체적인 파이프라인 공정이 성공적으로 수행된 것을 볼 수 있다.
'DevOps' 카테고리의 다른 글
[Terraform] 테라폼 기초 (3) (1) | 2024.08.28 |
---|---|
[Terraform] 테라폼 기초 (2) (0) | 2024.08.19 |
[Helm] Helm Quick Start (0) | 2024.08.10 |
[Terraform] 테라폼 반복문 (0) | 2024.08.09 |
[Terraform] 테라폼 기초 (1) (0) | 2024.08.03 |