카테고리 없음

Spring Boot 프로젝트용 Jenkinsfile 기반 파이프라인 생성

미니대왕님 2022. 9. 19. 21:06

Spring Boot 프로젝트용 Jenkinsfile 기반 파이프라인 생성

편집하다

목적

이 튜토리얼에서는 GitHub 리포지토리에서 Jenkinsfile을 기반으로 파이프라인을 만드는 방법을 보여줍니다. 파이프라인을 사용하여 데모 애플리케이션을 개발 환경과 프로덕션 환경에 각각 배포합니다. 한편, 종속성 캐싱 기능을 테스트하는 데 사용되는 분기를 시연합니다. 이 데모에서는 처음으로 파이프라인을 완료하는 데 비교적 오랜 시간이 걸립니다. 그러나 그 이후로는 매우 빠르게 실행됩니다. 이 분기가 처음에 인터넷에서 많은 종속성을 가져오기 때문에 캐시가 잘 작동함을 증명합니다.

참고: KubeSphere는 두 종류의 파이프라인, 즉 이 문서에서 소개된 SCM의 Jenkinsfile과 SCM의 Jenkinsfile을 지원 합니다 . SCM의 Jenkinsfile에는 SCM(소스 제어 관리)의 내부 Jenkinsfile이 필요합니다. 즉, Jenkfinsfile은 SCM의 일부 역할을 합니다. KubeSphere DevOps 시스템은 코드 저장소의 기존 Jenkinsfile에 따라 CI/CD 파이프라인을 자동으로 빌드합니다. 파이프라인에서 Stage, Step 및 Job과 같은 워크플로를 정의할 수 있습니다.

전제 조건

파이프라인 개요

시연할 파이프라인에는 아래와 같이 8단계가 있습니다.

메모:


  • 1단계. SCM 체크아웃 : GitHub 리포지토리에서 소스 코드를 체크아웃합니다.
  • 2단계. 단위 테스트 : 단위 테스트를 통과한 후 다음 단계를 계속 실행합니다.
  • 3단계. SonarQube 분석 : sonarQube 코드 품질 분석을 처리합니다.
  • 4단계.  스냅샷 이미지 빌드 및 푸시 : 행동 전략에서 선택한 분기를 기반으로 이미지를 빌드합니다. 의 태그 SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER 를 DockerHub에 푸시합니다. 그 중  $BUILD_NUMBER 는 파이프라인의 활동 목록에 있는 작업 일련 번호입니다.
  • 5단계. 최신 이미지 푸시 : 마스터 브랜치를 최신으로 태그 지정하고 DockerHub에 푸시합니다.
  • 6단계. Deploy to dev : 마스터 브랜치를 Dev 환경에 배포합니다. 이 단계에서는 검증이 필요합니다.
  • 7단계. 태그로 푸시 : 태그를 생성하고 GitHub에 릴리스합니다. 그런 다음 태그를 DockerHub에 푸시합니다.
  • 8단계 . 프로덕션 에 배포: 릴리스된 태그를 프로덕션 환경에 배포합니다.

실습 랩

1단계: 자격 증명 생성





참고: 계정이나 비밀번호에 특수 문자가 있는 경우 https://www.urlencoder.org/ 를 사용하여
인코딩한 다음 인코딩된 결과를 아래 자격 증명에 붙여넣습니다.

1.1. 계정으로 KubeSphere에 로그인 project-regular하고 생성된 DevOps 프로젝트에 입력하고 Project Management → Credentials 에서 다음 세 가지 자격 증명을 생성합니다 .

자격 증명 ID유형사용처
dockerhub-id 계정 자격 증명 도커허브
깃허브 아이디 계정 자격 증명 깃허브
데모-kubeconfig kubeconfig 쿠버네티스

1.2. sonar-token위에서 언급한 3단계(SonarQube 분석)에서 사용되는 SonarQube 토큰에 대한 추가 자격 증명을 생성해야 합니다 . SonarQube 콘솔 액세스 및 토큰 생성 을 참조하여 토큰 을 복사하고 여기에 붙여넣습니다. 그런 다음 확인 버튼을 누릅니다.

이 단계에서 총 4개의 자격 증명을 만들었습니다.

2단계: 저장소에서 Jenkinsfile 수정

포크 프로젝트

GitHub에 로그인합니다.  GitHub 저장소에서 자신의 GitHub로 devops-java-sample을 분기합니다  .

젠킨스 파일 편집

2.1. 자신의 GitHub에 리포지토리를 분기한 후  루트 디렉터리에서 Jenkinsfile-online 파일을 엽니다.

2.2. GitHub UI에서 편집 로고를 클릭하여 환경 변수 값을 편집합니다.

항목 편집값설명
DOCKER_CREDENTIAL_ID dockerhub-id DockerHub의 자격 증명 ID를 입력하여 DockerHub에 로그인합니다.
GITHUB_CREDENTIAL_ID 깃허브 아이디 GitHub 자격 증명 ID를 입력하여 태그를 GitHub 리포지토리에 푸시합니다.
KUBECONFIG_CREDENTIAL_ID 데모-kubeconfig kubeconfig 자격 증명 ID는 실행 중인 Kubernetes 클러스터에 액세스하는 데 사용됩니다.
기재 docker.io 이미지 푸시를 위해 기본적으로 docker.io의 웹 이름을 설정합니다.
DOCKERHUB_NAMESPACE 귀하의 dockerhub 계정 DockerHub의 계정 이름으로 바꿉니다. (계정 아래의 조직 이름일 수 있습니다.)
GITHUB_ACCOUNT 귀하의 github 계정 와 같은 GitHub 계정 이름을 변경합니다  https://github.com/kubesphere/. kubesphere 계정의 조직 이름도 입력할 수 있습니다 .
APP_NAME 데브옵스 자바 샘플 애플리케이션 이름
SONAR_CREDENTIAL_ID 소나 토큰 코드 품질 테스트를 위해 SonarQube 토큰 자격 증명 ID를 입력합니다.

참고: -o Jenkinsfile의  명령 매개변수 mvn 는 오프라인 모드가 켜져 있음을 나타냅니다. 이 자습서는 시간을 절약하고 특정 환경에서 네트워크 간섭에 적응하기 위해 관련 종속성을 다운로드했습니다. 오프라인 모드는 기본적으로 켜져 있습니다.

2.3. 환경 변수를 수정한 후  GitHub 페이지 상단에서 Commit changes 를 클릭하고 master 브랜치에 업데이트를 제출합니다.

3단계: 프로젝트 생성

이 단계에서는 각각 개발 환경과 프로덕션 환경인 kubesphere-sample-dev 두  개의 프로젝트를 생성합니다.kubesphere-sample-prod

첫 번째 프로젝트 만들기


Tip:  project-admin CI/CD 파이프라인의 리뷰어로 사용되기 때문에 미리 계정을 생성해야 합니다.

3.1. 계정 project-admin을 사용하여 KubeSphere에 로그인합니다. 생성 버튼을 클릭 한 다음 리소스 프로젝트 생성 을 선택합니다 . 프로젝트에 대한 기본 정보를 입력합니다. 완료 후 다음 을 클릭 합니다.

  • 이름: kubesphere-sample-dev.
  • 별칭: development environment.

3.2. 고급 설정에서 기본값을 그대로 둡니다. 만들기 를 클릭 합니다.

3.3. project-regular 이제 사용자를 에 초대 합니다 kubesphere-sample-dev. 

프로젝트 설정 → 프로젝트 구성원 을 선택합니다 . 회원 초대 를 클릭 하여 이 계정에 의 역할 을 초대  project-regular하고 부여하십시오  operator.

두 번째 프로젝트 만들기

마찬가지로 kubesphere-sample-prod 위의 단계에 따라 이름이 지정된 프로젝트를 만듭니다. 이 프로젝트는 프로덕션 환경입니다. project-regular 그런 다음 의 프로젝트에 초대  kubesphere-sample-prod하고 의 역할도 부여합니다 operator.

참고: CI/CD 파이프라인이 성공한 경우. 데모 응용 프로그램의 배포 및 서비스가  kubesphere-sample-dev 및  kubesphere-sample-prod.각각에 배포된 것을 볼 수 있습니다.

4단계: 파이프라인 생성

기본 정보 입력

4.1. 로그인 사용자를 로 전환합니다 project-regular. DevOps 프로젝트에 들어 demo-devops갑니다. 생성 을 클릭 하여 새 파이프라인을 빌드합니다.

4.2. 팝업 창에 파이프라인의 기본 정보를 입력하고 이름을 지정하고 Code Repositoryjenkinsfile-in-scm를 클릭 합니다.

 

저장소 추가

4.3. 토큰 가져오기를 클릭 하여 새 GitHub 토큰이 없는 경우 생성합니다. 그런 다음 토큰을 편집 상자에 붙여넣습니다.

4.4. 확인 을 클릭 하고 계정을 선택합니다. 이 토큰과 관련된 모든 코드 저장소가 오른쪽에 나열됩니다. devops-java-sample  을 선택  하고 이 저장소 선택 을 클릭한 후 다음을 클릭 하십시오 .

고급 설정

이제 고급 설정 페이지에 있습니다.

4.5. 행동 전략에서 KubeSphere 파이프라인은 기본적으로 세 가지 전략을 설정했습니다. 이 데모는 Discover PR from Forks 의 전략을 적용하지 않았기 때문에 이 전략은 삭제될 수 있습니다.

4.6. 경로는 기본적으로 Jenkinsfile 입니다. Jenkinsfile-online루트 디렉터리에 있는 저장소에 있는 Jenkinsfile의 파일 이름인 로 변경하십시오 .

 

참고: 스크립트 경로는 코드 저장소의 Jenkinsfile 경로입니다. 저장소의 루트 디렉터리를 나타냅니다. 

파일 위치가 변경되면 스크립트 경로도 변경되어야 합니다.

4.7. Scan Repo Trigger  는 팀의 개발 기본 설정에 따라 사용자 지정할 수 있습니다. 로 설정했습니다 5 minutes. 고급 설정이 완료되면 만들기 를 클릭  합니다.

파이프라인 실행

브라우저를 수동으로 새로 고치거나 을 클릭해야 할 Scan Repository수 있습니다. 그러면 두 가지 활동이 트리거된 것을 찾을 수 있습니다. 또는 다음 지침에 따라 수동으로 트리거할 수 있습니다.

4.8. 오른쪽에서 실행 을 클릭 합니다. Behavioral Strategy 에 따르면 Jenkinsfile이 있는 분기를 로드합니다. 기본 분기를 유지하십시오 master. Jenkinsfile 파일에는 기본값이 없으므로   TAG_NAME  에 v0.0.1. 확인 을 클릭 하여 새 활동을 트리거합니다.

참고: TAG_NAME은 GitHub 및 DockerHub에서 태그가 있는 릴리스 및 이미지를 생성하는 데 사용됩니다.  코드 리포지토리의 기존 이름을 복제 TAG_NAME 해서는 안 됩니다. tag그렇지 않으면 파이프라인을 실행할 수 없습니다.  

이 시점에서 마스터 브랜치에 대한 파이프라인이 실행 중입니다.

참고: 분기를 클릭 하여 분기 목록으로 전환하고 실행 중인 분기를 검토하십시오. 여기서 분기는 행동 전략에 의해 결정됩니다.

파이프라인 검토

파이프라인이 해당 단계로 실행  input되면 일시 중지됩니다. 수동으로 계속 을 클릭 해야 합니다. Jenkinsfile-online에는 세 단계가 정의되어 있습니다. 따라서 파이프라인은 의 세 단계에서 세 번 검토됩니다 

 deploy to dev, push with tag, deploy to production.

참고: 실제 개발 또는 프로덕션 시나리오에서는 더 높은 권한을 가진 사람(예: 릴리스 관리자)이 파이프라인과 이미지, 코드 분석 결과를 검토해야 합니다. 푸시 및 배포 승인 여부를 결정할 권한이 있습니다. Jenkinsfile에서  input 단계는 파이프라인을 검토할 사람을 지정하도록 지원합니다. 검토 할 사용자를 지정 project-admin하려면 Jenkinsfile에 필드를 추가하면 됩니다. 사용자가 여러 명인 경우 다음과 같이 쉼표를 사용하여 구분해야 합니다.

···
input(id: 'release-image-with-tag', message: 'release image with tag?', submitter: 'project-admin,project-admin1')
···

5단계: 파이프라인 상태 확인

5.1. Activity → master → Task Status 를 클릭 하면 파이프라인 실행 상태를 볼 수 있습니다. 생성이 막 완료되면 파이프라인이 몇 분 동안 계속 초기화됩니다. 샘플 파이프라인에는 8개의 단계가 있으며  Jenkinsfile-online 에 개별적으로 정의되어 있습니다 .

5.2.  오른쪽 상단 모서리에 있는 Show Logs 를 클릭하여 파이프라인 실행 로그를 확인합니다  . 페이지는 동적 로그 출력, 작동 상태 및 시간 등을 보여줍니다.

각 단계에 대해 왼쪽의 특정 단계를 클릭하여 로그를 검사합니다. 추가 분석을 위해 로그를 로컬에 다운로드할 수 있습니다.

6단계: 파이프라인 실행 결과 확인

6.1. 파이프라인을 성공적으로 실행했으면 클릭 Code Quality 하여 다음과 같이 SonarQube를 통해 결과를 확인합니다(참고용).

6.2. push to DockerHubJenkinsfile-online에서 단계를 정의했기 때문에 파이프라인에서 빌드한 Docker 이미지가 DockerHub에 성공적으로 푸시되었습니다 . DockerHub에서는 파이프라인을 실행하기 전에 구성한 v0.0.1 태그가 있는 이미지를 찾을 수 있으며 태그가 있는 이미지 SNAPSHOT-master-6(SNAPSHOT-branch-serial number)를 찾을 수 latest있으며 DockerHub에 푸시되었습니다.

동시에 GitHub에 새 태그와 새 릴리스가 생성되었습니다.

샘플 애플리케이션은  배포 kubesphere-sample-dev 및  kubesphere-sample-prod 서비스로 배포됩니다.

환경URL네임스페이스전개서비스
개발자 http://{NodeIP}:{$30861} kubesphere-sample-dev ks-sample-dev ks-sample-dev
생산 http://{$NodeIP}:{$30961} kubesphere-sample-prod ks 샘플 ks 샘플

6.3. 이 두 프로젝트에 들어가면 애플리케이션의 리소스가 Kubernetes에 성공적으로 배포되었음을 확인할 수 있습니다. 예를 들어 프로젝트에서 배포 및 서비스를 확인할 수 있습니다 kubesphere-sample-dev.

배포

서비스

7단계: 샘플 서비스 방문

7.1. admin계정을 사용하여 Toolbox 에서 웹 kubectl 을 열도록 전환할 수 있습니다 . 프로젝트에 들어가 애플리케이션 워크로드 → 서비스 를 선택 하고 서비스 를 클릭 합니다.kubesphere-sample-devks-sample-dev

7.2. Toolbox 에서 web kubectl  열고 다음과 같이 액세스를 시도합니다.

참고: curl Endpoints 또는 {$Virtual IP}:{$Port} 또는 {$Node IP}:{$NodePort}

$ curl 10.233.90.9:8080
Really appreciate your star, that's the power of our life.

7.3. 마찬가지로 프로젝트에서 서비스를 테스트할 수 있습니다.kubesphere-sample-pro

참고: curl Endpoints 또는 {$Virtual IP}:{$Port} 또는 {$Node IP}:{$NodePort}

$ curl 10.233.90.17:8080
Really appreciate your star, that's the power of our life.

구성! KubeSphere DevOps 파이프라인에 익숙하며 다음 튜토리얼에서 그래픽 패널로 CI/CD 파이프라인을 구축하고 워크플로를 시각화하는 방법을 계속 배울 수 있습니다.