Close

Bitbucket Pipelines를 사용한 스크립팅 작업에 대한 팁

Sten Pittet 얼굴 사진
Sten Pittet

기고 작가

Bitbucket Pipelines를 사용하면 리포지토리에 대한 지속적 통합 또는 지속적 배포 워크플로를 빠르게 채택할 수 있습니다. 이 프로세스의 중요한 부분은 수동 프로세스를 사람이 개입할 필요 없이 시스템에서 자동으로 실행 가능한 스크립트로 바꾸는 것입니다. 그러나 인증, 종속성 설치 또는 이슈 보고와 관련된 문제가 발생할 수 있어 까다로울 수 있습니다. 이 가이드에서는 스크립트 작성에 대한 몇 가지 팁을 제공합니다.

시간

30분

대상 그룹

지속적 배포 및/또는 Bitbucket Pipelines를 처음 사용하는 사용자입니다.

1단계: 중요한 정보를 로그하지 않기

자동화의 세계로 더 나아가기 전에 로그를 검토하고 API 키, 자격 증명 또는 시스템을 손상시킬 수 있는 정보와 같은 중요한 데이터를 출력하지 않는지 확인해야 합니다. Bitbucket Pipelines를 사용하여 스크립트를 실행하기 시작하면 로그가 저장되며 리포지토리에 액세스할 수 있는 모든 사용자가 읽을 수 있습니다.

2단계: SSH 키를 사용하여 원격 서버에 연결

자동화에서 가장 번거로운 부분 중 하나는 바로 인증입니다. SSH 키의 경우 원격 서버에 대한 연결이 관리하기 쉽고 아주 안전하다는 두 가지 이점이 있습니다. Bitbucket Pipelines를 사용하면 원격 서버에 연결하기 위해 실행하는 모든 파이프라인에서 사용 가능한 새 키 쌍을 쉽게 생성할 수 있습니다.

Bitbucket Pipelines에서 바로 SSH 키 생성

실행 중인 파이프라인에서 원격 서버에 연결하려면 원격 서버의 공개 키만 복사하면 됩니다. 예를 들어 서버에 대한 SSH 키가 설정되면(URL 또는 IP 주소를 사용할 수 있음) 아래 스크립트는 비밀번호를 제공할 필요 없이 /var/www 디렉터리에 파일을 나열합니다.

bitbucket-pipelines.yml

image: node:4.6.0
   pipelines:
      default:
        - step:
           script:
              - ssh <user>@<server> ls -l /var/www

알려진 호스트 섹션에 연결해야 하는 모든 서버를 등록 하는 것을 잊지 마세요. 그렇지 않으면 원격 서버에 연결하려고 할 때 파이프라인이 중단되어 승인을 기다리게 됩니다.

3단계: API 키 및 자격 증명에 대한 보안 환경 변수 사용

스크립트의 일부로 원격 API를 사용해야 하는 경우 API 공급자는 API 키로 보호된 리소스를 사용할 수 있도록 허용할 것입니다. 보안 환경 변수를 사용하여 Bitbucket Pipelines에 자격 증명을 안전하게 추가할 수 있습니다. 저장한 후에는 스크립트에서 자격 증명을 호출할 수 있으며 로그 출력에서 마스크된 상태로 남습니다.

Bitbucket Pipelines는 로그에서 보안 변수를 마스크된 상태로 유지

4단계: 비대화형 모드에서 명령 실행

스크립트의 일부로 종속성을 설치해야 하는 경우 사용자에게 유효성 검사 또는 입력을 요청하라는 메시지가 표시되지 않는지 확인합니다. 사용 중인 명령의 문서를 살펴보고 비대화형 방식으로 명령을 실행할 수 있는 플래그가 있는지 확인합니다.

예를 들어, 아래 명령에서 -y 플래그는 Debian 서버에 PostgreSQL을 설치합니다.

apt-get install -y postgresql

또한 -q 플래그를 사용하면 비대화형 방식으로 Google Cloud SDK 명령을 실행할 수 있습니다.

gcloud -q app deploy app.yaml

5단계: 바로 사용할 수 있는 자체 Docker 이미지 빌드

파이프라인을 실행하는 데 필요한 종속성을 설치하는 작업은 시간이 많이 걸릴 수 있습니다. 애플리케이션을 구축하고 테스트하는 데 필요한 기본 도구와 패키지를 사용하여 자체 Docker 이미지를 만들면 실행 시간을 많이 절약할 수 있습니다.

예를 들어 다음과 같은 Pipelines 구성에서는 처음에 AWS CLI를 설치하고 나중에 이것을 사용하여 애플리케이션을 AWS Elastic Beanstalk에 배포합니다.

bitbucket-pipelines.yml

image: node:7.5.0
   pipelines:
      default:
       - step:
          script: # Modify the commands below to build your repository.
           - apt-get update && apt-get install -y python-dev
           - curl -O https://bootstrap.pypa.io/get-pip.py
           - python get-pip.py
           - pip install awsebcli --upgrade
           - npm install
           - npm test
           - eb init helloworld-beanstalk-bbp -r eu-west-1 -p node
           - eb deploy hw-eb-tutorial

여기서 문제는 AWS CLI가 커밋마다 변경되지 않는다는 것입니다. 즉, 기본적으로 번들로 제공될 수 있는 종속성을 설치하는 데 시간을 낭비하고 있습니다.

다음 Dockerfile을 사용하여 Elastic Beanstalk 배포에 사용할 수 있는 사용자 지정 Docker 이미지를 만들 수 있습니다.

Dockerfile

FROM node:7.5.0 
RUN apt-get update \   && apt-get install -y python-dev \   && cd /tmp \   && curl -O https://bootstrap.pypa.io/get-pip.py \   && python get-pip.py \   && pip install awsebcli --upgrade \   && apt-get clean \   && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

레퍼런스 spittet/my-custom-image 아래로 푸시하면 애플리케이션을 구축, 테스트 및 배포하는 데 필요한 명령만 포함하도록 Bitbucket Pipelines 구성을 단순하게 만들 수 있습니다.

bitbucket-pipelines.yml

image: spittet/my-custom-image
   pipelines:
     default:
       - step:
            script: # Modify the commands below to build your repository.
              - npm install
              - npm test
              - eb init helloworld-beanstalk-bbp -r eu-west-1 -p node
              - eb deploy hw-eb-tutorial

마지막 조언: 스크립트도 코드입니다

이러한 팁을 사용하면 수동 작업을 Bitbucket Pipelines와 같은 서비스에서 반복적이고 안정적으로 실행할 수 있는 자동화된 프로세스로 바꿀 수 있습니다. 결과적으로 릴리스를 보호하는 데 도움이 되며 여러 서버와 플랫폼에서 전체 프로덕션 환경의 배포를 트리거할 수 있는 강력한 도구가 될 것입니다.

따라서 자동화 스크립트는 코드로 취급하고, 코드와 동일한 검토 및 품질 프로세스를 거쳐야 합니다. 파이프라인 구성이 코드와 함께 체크인되어 알맞은 컨텍스트에서 풀리퀘스트를 만들 수 있으므로, 이는 다행히도 Bitbucket을 통해 쉽게 수행할 수 있는 작업입니다.

마지막으로, 프로덕션 환경에 적용하기 전에 테스트 환경에서 스크립트를 실행하는 것을 잊지 마세요. 이렇게 하면 실수로 프로덕션 데이터를 삭제하는 일을 방지할 수 있습니다.

Sten Pittet
Sten Pittet

10년 동안 소프트웨어 사업 분야에 종사하며 개발에서 제품 관리에 이르기까지 다양한 역할을 맡았습니다. 지난 5년간 Atlassian에서 개발자 도구를 개발하는 일을 했고 이제 소프트웨어 구축과 관련한 글을 쓰고 있습니다. 직장 밖에서는 멋진 아기를 키우며 육아 기술을 연마하고 있습니다.


이 문서 공유

여러분께 도움을 드릴 자료를 추천합니다.

이러한 리소스에 책갈피를 지정하여 DevOps 팀의 유형에 대해 알아보거나 Atlassian에서 DevOps에 대한 지속적인 업데이트를 확인하세요.

DevOps 일러스트레이션

DevOps 커뮤니티

DevOps 일러스트레이션

DevOps 학습 경로

맵 일러스트레이션

무료로 사용해보기

DevOps 뉴스레터 신청

Thank you for signing up