SourceCommit 수동 백업
    • PDF

    SourceCommit 수동 백업

    • PDF

    Article Summary

    Classic/VPC 환경에서 이용 가능합니다.

    SourceCommit의 리포지토리는 사용자 소스 코드를 안전하게 저장하며, 복구가 가능하도록 구성되어 있습니다. 하지만 사용자의 실수로 리포지토리가 삭제되면 코드도 삭제되어 복구가 불가능합니다. 이러한 상황을 대비하여 SourceCommit을 네이버 클라우드 플랫폼의 다른 서비스와 연동하여 안전하게 코드를 백업해둘 수 있습니다.

    참고
    • 코드 백업은 SourceCommit 기능으로 직접 제공하고 있지 않지만, 네이버 클라우드 플랫폼의 다른 서비스와 연동 시 백업이 가능하므로 사용 편의를 위해 방법을 소개합니다.
    • SourceCommit 생성 방법에 대한 자세한 내용은 SourceCommit 시작을 참조해 주십시오.

    Cloud Functions를 통한 백업

    네이버 클라우드 플랫폼의 Cloud Functions와 연동하여 코드를 백업하는 방법을 소개합니다.

    1. 백업을 진행하는 SourceBuild 생성

    가장 먼저 SourceCommit 리포지토리를 백업하는 SourceBuild 프로젝트를 생성합니다. 방법은 다음과 같습니다.

    1. 네이버 클라우드 플랫폼 콘솔에 접속해 주십시오.
    2. SourceCommit을 백업할 SourceBuild 프로젝트를 생성하기 위해 Services > Developr Tools > SourceBuild 메뉴를 차례대로 클릭해 주십시오.
    3. SourceBuild 화면에서 [+ 빌드프로젝트 생성] 버튼을 클릭해 주십시오.
    4. 빌드 대상으로 백업이 필요한 SourceCommit 리포지토리를 선택해 주십시오.
    5. SourceBuild에서 관리되는 ubuntu 이미지로 빌드 환경을 선택해 주십시오.
      source_commit_use_backup_1_ko
    6. 필요한 경우 빌드 명령어를 설정해 주십시오.
    7. 결과물 업로드 설정빌드 결과물에서 결과물 저장을 클릭하여 선택해 주십시오.
      • 전체 경로를 입력해 리포지토리가 백업될 수 있도록 설정해 주십시오.
        source_commit_use_backup_2_ko
    8. 빌드 프로젝트 생성을 완료해 주십시오.

    2. SourceCommit Webhook 생성

    SourceCommit Webhook을 생성합니다. 방법은 다음과 같습니다.

    1. 백업이 필요한 SourceCommit 리포지토리에서 Hooks를 클릭해 주십시오.
    2. 새 웹훅을 생성하기 위해 [생성] 버튼을 클릭해 주십시오. 시나리오에 알맞은 이벤트 유형과 Cloud Functions를 대상 유형으로 선택합니다.
      source_commit_use_backup_6_ko
    3. [트리거 생성] 버튼을 클릭하여 트리거와 액션을 생성해 주십시오. 이벤트 발생 시 빌드 프로젝트를 시작하는 액션 예시는 다음과 같습니다.
      const axios = require('axios');
      const CryptoJS = require('crypto-js');
      
      // Signature is the value of `x-ncp-apigw-signature-v2` field in the header.
      function makeSignature(url, timestamp, accessKey, secretKey) {
        const space = ' ',
          newLine = '\n',
          method = 'POST';
      
        const hmac = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, secretKey);
      
        hmac.update(method);
        hmac.update(space);
        hmac.update(url);
        hmac.update(newLine);
        hmac.update(timestamp);
        hmac.update(newLine);
        hmac.update(accessKey);
        const hash = hmac.finalize();
      
        return hash.toString(CryptoJS.enc.Base64);
      }
      
      // Header is required for authentication to call NAVER Cloud Platform API.
      function makeHeader(timestamp, accessKey, signKey) {
        const headers = {
          'Content-Type': 'application/json; charset=utf-8',
          'x-ncp-apigw-timestamp': timestamp,
          'x-ncp-iam-access-key': accessKey,
          'x-ncp-apigw-signature-v2': signKey,
        };
      
        return headers;
      }
      
      /**
       * Action to start(or stop) server(VPC) instances using Server API
       *
       * Input parameters that must be defined as action parameters
       * @params {string} accessKey: NAVER Cloud Platform account access key used for API authentication
       * @params {string} secretKey: NAVER Cloud Platform account secret key used for API authentication
       * @params {string} baseUrl: https://sourcebuild.apigw.ntruss.com
       * @params {string} apiUrl: `/api/v1/project/{projectId}/build`
       *
       * Please refer to the Server API guide for the accurate `baseUrl` and `apiUrl`.
       */
      
      function startBuildProject(params) {
        let apiUrlWithParams = params.apiUrl;
        const url = `${params.baseUrl}${apiUrlWithParams}`;
        const timestamp = new Date().getTime().toString();
        const signKey = makeSignature(apiUrlWithParams, timestamp, params.accessKey, params.secretKey);
        const headers = makeHeader(timestamp, params.accessKey, signKey);
      
        return new Promise((resolve, reject) => {
          axios
            .post(url, {}, { headers: headers }) 
            .then(() => resolve({ done: true }))
            .catch((error) => reject({ done: false, errorMessage: error.response ? error.response.data.message : error.message }));
        });
      }
      
      exports.main = startBuildProject;
      
    4. 웹훅을 생성한 다음 푸시 이벤트를 발생시켜 동작을 확인해 주십시오.
    참고

    Cloud Functions 액션 예시에 대한 자세한 작성 방법은 Cloud Function 샘플 코드를 참조해 주십시오.

    SourcePipeline을 통한 백업

    네이버 클라우드 플랫폼의 SourcePipeline에서 제공하는 트리거 기능을 이용하여 SourceCommit 리포지토리를 백업하는 SourceBuild 프로젝트를 실행할 수 있습니다.

    1. 백업을 진행하는 SourceBuild 생성

    가장 먼저 SourceCommit 리포지토리를 백업하는 SourceBuild 프로젝트를 생성합니다. 방법은 다음과 같습니다.

    1. 네이버 클라우드 플랫폼 콘솔에 접속해 주십시오.
    2. SourceCommit을 백업할 SourceBuild 프로젝트를 생성하기 위해 Services > Developr Tools > SourceBuild 메뉴를 차례대로 클릭해 주십시오.
    3. SourceBuild 화면에서 [+ 빌드프로젝트 생성] 버튼을 클릭해 주십시오.
    4. 빌드 대상으로 백업이 필요한 SourceCommit 리포지토리를 선택해 주십시오.
    5. SourceBuild에서 관리되는 ubuntu 이미지로 빌드 환경을 선택해 주십시오.
      source_commit_use_backup_1_ko
    6. 필요한 경우 빌드 명령어를 설정해 주십시오.
    7. 결과물 업로드 설정빌드 결과물에서 결과물 저장을 클릭하여 선택해 주십시오.
      • 전체 경로를 입력해 리포지토리가 백업될 수 있도록 설정해 주십시오.
        source_commit_use_backup_2_ko
    8. 빌드 프로젝트 생성을 완료해 주십시오.

    2. 백업을 실행하는 SourcePipeline 생성

    SourceCommit에서 Push가 발생할 때 파이프라인이 작동해 SourceBuild가 동작할 수 있도록 SourcePipeline을 생성합니다. SourcePipeline을 통해 사용자는 리포지토리에 Push 이벤트가 발생할 때마다 자동으로 SourceBuild가 실행되도록 구성할 수 있습니다. 이 과정을 통해 리포지토리 백업이 자동으로 수행됩니다. 방법은 다음과 같습니다.

    1. 네이버 클라우드 플랫폼 콘솔에 접속해 주십시오.
    2. Services > Developr Tools > SourcePipeline 메뉴를 차례대로 클릭해 주십시오.
    3. SourcePipeline 화면에서 [+ 파이프라인 생성] 버튼을 클릭해 주십시오.
    4. 파이프라인의 이름을 설정해 주십시오.
    5. [작업 추가] 버튼을 클릭하여 생성한 SourceBuild 프로젝트를 추가해 주십시오.
      • 프로젝트를 추가할 때 연결 정보가 올바른지 확인합니다.
        source_commit_use_backup_3_ko
    6. 추가된 작업의 [+] 버튼을 클릭하여 선행 작업이 없는 파이프라인을 구성해 주십시오.
      source_commit_use_backup_4_ko
    7. Trigger 설정에서 Push를 클릭하여 선택하고 리포지토리를 설정해 주십시오.
      source_commit_use_backup_5_ko
    8. 파이프라인 생성을 완료해 주십시오.

    이 문서가 도움이 되었습니까?

    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.