프로그래밍

네이버클라우드 - SourcePipeline 사용하기

tedhong 2023. 6. 14. 14:26
🟢ncloud 에서 제공하는 CI/CD Pipeline 인 SourcePipeline 사용하여 
Dockerfile 을 생성하고 ncloud K8S 환경에 배포하는 방법에 대해 알아봅니다.

SourcePipeline 을 사용하면 Github Action, Gitlab CI, Jenkins, Argo 같은 프레임워크를 사용하지 않고도
프로젝트의 지속적인 통합 및 배포가 가능해집니다.
🟢CI/CD 의 흐름은 다음과 같습니다.

1. SourceCommit 에 프로젝트를 Push 하면

2. SourceBuild 에서 해당 repository 를 끌어와 DockerImage 로 빌드하고
ncloud의 Container Registry 에 업로드 합니다.

3. SourceDeploy 에서 업로드 된 DockerImage 를 ncloud Kubernetes 에 배포합니다.

Source Pipeline 을 이용하면 이 작업을 자동화 할 수 있습니다.

 

  • Docker Image 의 빌드 설정은 Dockerfile,
  • 프로젝트의 k8s 배포 설정 : deploy_dev.yaml (dev 버전), deploy_live.yaml (live버전)
    • 서버 구동에 필요한 환경 변수는 위 yaml 파일에 선언합니다.


목차
Source Commit 설정

Source Build 설정

Source Deploy 설정

Source Pipeline 설정

 

네이버 클라우드 공식 가이드 : SourcePipeline 개요 (ncloud-docs.com)


⌨️ Source Commit ( = git 의 repository) 설정

  • 생성
    • “+리포지토리 생성” 버튼 클릭 → 필수 내용 입력 후 생성
  • git 계정/git SSH 설정
    • PC에서 git 을 사용하기 위해 password 등록 또는 SSH 키 등록이 필요합니다.
      둘 중 편한 방법으로 사용하면 됩니다.
    • password 생성
      • “GIT계정/GIT SSH 설정” 버튼 클릭
      • GIT 계정 설정 탭에서 password 입력 후 ‘적용’
    • SSH 설정
      • PC에서 SSH 생성 : SSH키 생성하기
      • GIT SSH 설정 탭 → 생성된 SSH 키를 복사해서 붙여 넣기 후 등록


password 는 계정의 비밀번호와 별도로 관리해야 합니다.

  • 생성한 git 리포지토리를 clone 받습니다.
git clone [리포지토리의 url]

⌨️Source Build 설정

  • repository 에 저장 된 소스 코드를 build 할 수 있는 runtime service 입니다.
  • Object Storage 에 1개 이상의 bucket 이 필요합니다.

Source Build는 총 6단계로 구성되어 있습니다.


  • 기본 설정 : 필수 항목을 작성합니다.
    • 빌드 대상은 SourceCommit 으로 하고 리파지토리와 브랜치를 원하는 대상으로 설정합니다.

빌드 대상은 SourceCommit 으로 하고 리파지토리와 브랜치를 원하는 대상으로 설정합니다.

 


  • 빌드 환경 설정
    • SourceBuild 에서 사옹할 빌드 머신의 사양과 환경을 정합니다.
    • 여기서는 Spring 프로젝트를 빌드할 것이기 때문에 빌드 런타임으로 java 를 선택했습니다.
    • 도커이미지빌드 : 도커 명령어를 이용하여 이미지를 만들 것이기 때문에 체크합니다.

 


  • 빌드 명령어 설정
    • 빌드 전 명령어
      • maven 을 이용해 빌드할 것이므로 mvn 버전을 체크하고
      • docker login 을 이용해 container registry 에 로그인 합니다. (image 업로드를 위해)
      • 네이버 클라우드 플랫폼에 생성된 레지스트리에 로그인 하기 위해서는 API 인증키가 필요하며,
        Username에 Access Key Id를 Password에 Secret Key를 사용해주세요.
        (계정 프로필에서 확인 가능합니다.)
echo build_start
mvn -version
docker login -u {ACCESS KEY} -p {SECRET_KEY} registry-hc.kr.ncr.ntruss.com

 

  • 빌드 명령어
mvn clean package
cd target // target 폴더로 이동
FILENAME=$(ls *.war) // 확장자가 war 인 파일 선택
mv $FILENAME web.war // 파일 이름 web.war 로 변경

 


  • 업로드 설정
    • 빌드 결과물 : 결과물을 Object Storage 에 저장합니다. (빌드 한 파일 저장이 필요 없다면 생략 가능)
    • 빌드 결과물 경로 : 이전 단계의 빌드 명령어에서 지정한 빌드 파일 생성 경로 입니다.
    • 업로드 할 Object Storage : Object Storage 선택
    • Obejct Storage 폴더 경로 : 빌드 파일이 저장 될 경로
    • 저장될 파일 이름 :: 저장될 파일 명
    • 결과물 백업 : 백업 사용 여부 적용

ℹ️ 빌드 완료 후 이미지 업로드 설정
> 이미지 저장에 체크하면 빌드 환경 자체를 도커 이미지로 만들어 Container Registry 에 업로드 할 수 있습니다.
이후 빌드 설정 변경을 통해 [빌드 환경 설정 - 빌드 환경 이미지 - Container Registry 이미지] 로 체크하면
환경 이미지를 불러와 사용할 수 있고 이를 통해 빌드 시간을 줄일 수 있습니다.

  • 추가 상품 연동
    - Cloud Log Analytics 연동 여부 설정
    - File Safer 연동 여부 설정

  • 최종 확인
    - 설정한 내용 확인 후 ‘생성’

 


빌드 테스트

  • 빌드 시작하기를 눌러서 빌드를 진행하고
    • Object Stroage 에 업로드가 잘 되어있는지 확인하거나
    • Container Registry 에 이미지가 제대로 업로드가 되었는지 확인합니다.

 

 


⌨️ Source Deploy 설정

  • Source Deploy 는 K8S 클러스터에 배포하는 방법과 VPC 에 배포하는 방법이 있습니다.

 

Kubernetes Cluster 에 배포하기

  • 기본 설정 - 배포 프로젝트 생성 후 프로젝트 이름 입력
    • 배포 환경 설정
      • 배포 할 stage 선택 후 설정에 체크
      • 배포 타겟 - Kubetnetes Service 선택
      • 배포 할 클러스터 선택
    • 배포 프로젝트 생성
    • 생성 된 프로젝트 선택
    • 배포 시나리오 생성
      • 하단 배포 시나리오 -> 생성 클릭
      • 기본 설정 - 시나리오 이름 설정
      • 리포지토리 선택 - K8S 용 설정 파일 경로 추가 
        • 이 예제에서는 프로젝트의 root 경로에 yaml 파일이 있기 때문에 './deploy.yaml'이라고 입력
        • 배포가 진행되면 해당 리포지토리 내부의 ./ 경로에서 deploy.yaml 파일을 가져와 kubectl apply 를 진행합니다.
ℹ️ SourceDeploy에서 지원하는 Kubernetes Object는 Pod, Deployment, ReplicaSet, ReplicationController, Service 입니다. https://guide.ncloud-docs.com/docs/devtools-devtools-4-3

 

더보기

VPC(Server) 에 배포하기

  1. API KEY 생성
    - 마이페이지 → 계정관리 → 인증키 관리에서 ‘신규 API 인증키 생성' 클릭


   2. 서버 shell 에 설치 명령어 입력 

echo $'NCP_ACCESS_KEY=accesskey\nNCP_SECRET_KEY=secretkey' > /opt/NCP_AUTH_KEY
chmod 400 /opt/NCP_AUTH_KEY
wget  Agent https://sourcedeploy-agent.apigw.ntruss.com/agent/v2/download/install
chmod 755 install
./install
rm -rf install

    - accesskey 에 Access Key ID secretkey 에 Secret Key 입력

   3. 배포 설정

  • 배포 프로젝트 생성
    • 기본 설정
    • 배포 환경 설정
      • 배포 타겟 - Server
      • 서버 목록이 나오면 배포할 서버를 선택 후 > 클릭하여 적용 서버 쪽으로 옮기기
      • 최종 확인 - 배포 프로젝트 생성

  • 배포 시나리오 생성
    • 기본 설정
    • 배포 전략 설정
      • 기본 적인 순차 배포 선택
    • 배포 파일 설정
      • 배포 파일은 이전에 Source Build 를 통해 빌드 해서 Object Storage 에 저장된 파일을 선택 하거나
      • Source Build 의 빌드 프로젝트를 선택하는 방법이 있습니다.

 

 

배포 테스트 하기

  • 배포 프로로젝트 선택
  • 배포로 이동 클릭


  • 배포 프로세스 선택 -> 배포 시작하기 클릭


  • 배포 결과 확인

 

 


⌨️ Source Pipeline 설정

이제 Source Commit 에 코드가 Push 되면 Source Build 를 통해 자동으로 프로젝트가 빌드되고
Source Deploy 에서 자동으로 배포 되게 해보겠습니다.

 

  • 파이프라인 생성
    • 파이프라인 생성 버튼 클릭
    • 기본 정보 입력
    • Phase 추가
      • 빌드
      • 배포
    • 스테이지 구성
      • SourcePipeline 에서는 Node(Phase)를 추가하고 연결하는 방식으로
        편리하게 스테이지를 구성할 수 있습니다.
      • 진행 순서는 Build - Deploy 이기 때문에 먼저 위에서 추가한 Build Phase 를 스테이지에 추가합니다.
        • 첫 실행 되는 Node 는 선행작업이 없으므로 <+> 버튼을 클릭하여 선행 작업 없음을 체크합니다.
      • 다음에 실행 될 Deploy Phase 는 선행 작업이있으므로 <+> 버튼 클릭 후 선행 작업으로 Build Phase 를 서낵해 줍니다.

  • Trigger 설정
    • 지정한 이벤트가 발생하면 Pipeline 동작시키는 trigger 를 지정하는 기능입니다.
    • 일반적으로는 특정 브랜치를 지정해두고 브랜치에 소스가 push 되는 것을 trigger 로 지정합니다.
      •  
  • 테스트
    • 위 그림에서는 sample1 이라는 리포지토리의 master 브랜치로 지정되었기 때문에 
      master 브랜치에 새로운 코드가 올라오게 되면 자동으로 파이프라인이 실행됩니다.

먼저 Build Phase 가 실행됩니다.
Build 가 성공하면 Deploy Phase 가 실행됩니다.

 

ℹ️ Build 나 Deploy 가 실패한 경우에는 해당 서비스 항목에 있는 로그를 통해 오류 내역을 확인 할 수 있습니다.

 

 

<fin>