프로그래밍
네이버클라우드 - 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 키를 복사해서 붙여 넣기 후 등록
- PC에서 git 을 사용하기 위해 password 등록 또는 SSH 키 등록이 필요합니다.
- 생성한 git 리포지토리를 clone 받습니다.
git clone [리포지토리의 url]
⌨️Source Build 설정
- repository 에 저장 된 소스 코드를 build 할 수 있는 runtime service 입니다.
- Object Storage 에 1개 이상의 bucket 이 필요합니다.
- 기본 설정 : 필수 항목을 작성합니다.
- 빌드 대상은 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 를 진행합니다.
- 이 예제에서는 프로젝트의 root 경로에 yaml 파일이 있기 때문에 './deploy.yaml'이라고 입력
- 하단 배포 시나리오 -> 생성 클릭
- 배포 환경 설정
ℹ️ SourceDeploy에서 지원하는 Kubernetes Object는 Pod, Deployment, ReplicaSet, ReplicationController, Service 입니다. https://guide.ncloud-docs.com/docs/devtools-devtools-4-3
더보기
VPC(Server) 에 배포하기
- 일반적인 VPC 서버에 war 파일을 배포하는 방법입니다.
- Source Deploy Agent 설치
- SourceDeploy 를 사용하기 위해서는 서버에 Agent 를 설치해야 합니다.
(참고 : 에이전트 설치 및 관리 - SourceDeploy 사용 (ncloud-docs.com) )
- SourceDeploy 를 사용하기 위해서는 서버에 Agent 를 설치해야 합니다.
- 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 Build 를 통해 빌드 해서 Object Storage 에 저장된 파일을 선택 하거나
- 기본 설정
배포 테스트 하기
- 배포 프로로젝트 선택
- 배포로 이동 클릭
- 배포 프로세스 선택 -> 배포 시작하기 클릭
- 배포 결과 확인
⌨️ Source Pipeline 설정
이제 Source Commit 에 코드가 Push 되면 Source Build 를 통해 자동으로 프로젝트가 빌드되고
Source Deploy 에서 자동으로 배포 되게 해보겠습니다.
- 파이프라인 생성
- 파이프라인 생성 버튼 클릭
- 기본 정보 입력
- Phase 추가
- 빌드
- 배포
- 빌드
- 스테이지 구성
- SourcePipeline 에서는 Node(Phase)를 추가하고 연결하는 방식으로
편리하게 스테이지를 구성할 수 있습니다. - 진행 순서는 Build - Deploy 이기 때문에 먼저 위에서 추가한 Build Phase 를 스테이지에 추가합니다.
- 첫 실행 되는 Node 는 선행작업이 없으므로 <+> 버튼을 클릭하여 선행 작업 없음을 체크합니다.
- 다음에 실행 될 Deploy Phase 는 선행 작업이있으므로 <+> 버튼 클릭 후 선행 작업으로 Build Phase 를 서낵해 줍니다.
- SourcePipeline 에서는 Node(Phase)를 추가하고 연결하는 방식으로
- Trigger 설정
- 지정한 이벤트가 발생하면 Pipeline 동작시키는 trigger 를 지정하는 기능입니다.
- 일반적으로는 특정 브랜치를 지정해두고 브랜치에 소스가 push 되는 것을 trigger 로 지정합니다.
- 테스트
- 위 그림에서는 sample1 이라는 리포지토리의 master 브랜치로 지정되었기 때문에
master 브랜치에 새로운 코드가 올라오게 되면 자동으로 파이프라인이 실행됩니다.
- 위 그림에서는 sample1 이라는 리포지토리의 master 브랜치로 지정되었기 때문에
ℹ️ Build 나 Deploy 가 실패한 경우에는 해당 서비스 항목에 있는 로그를 통해 오류 내역을 확인 할 수 있습니다.
<fin>