아티클
튜토리얼
대화형 가이드
Bitbucket Pipelines를 사용한 스크립팅 작업에 대한 팁
Sten Pittet
기고 작가
Bitbucket Pipelines를 사용하면 리포지토리에 대한 지속적 통합 또는 지속적 배포 워크플로를 빠르게 채택할 수 있습니다. 이 프로세스의 중요한 부분은 수동 프로세스를 사람이 개입할 필요 없이 시스템에서 자동으로 실행 가능한 스크립트로 바꾸는 것입니다. 그러나 인증, 종속성 설치 또는 이슈 보고와 관련된 문제가 발생할 수 있어 까다로울 수 있습니다. 이 가이드에서는 스크립트 작성에 대한 몇 가지 팁을 제공합니다.
시간
30분
대상 그룹
지속적 배포 및/또는 Bitbucket Pipelines를 처음 사용하는 사용자입니다.
1단계: 중요한 정보를 로그하지 않기
자동화의 세계로 더 나아가기 전에 로그를 검토하고 API 키, 자격 증명 또는 시스템을 손상시킬 수 있는 정보와 같은 중요한 데이터를 출력하지 않는지 확인해야 합니다. Bitbucket Pipelines를 사용하여 스크립트를 실행하기 시작하면 로그가 저장되며 리포지토리에 액세스할 수 있는 모든 사용자가 읽을 수 있습니다.
2단계: SSH 키를 사용하여 원격 서버에 연결
자동화에서 가장 번거로운 부분 중 하나는 바로 인증입니다. SSH 키의 경우 원격 서버에 대한 연결이 관리하기 쉽고 아주 안전하다는 두 가지 이점이 있습니다. Bitbucket Pipelines를 사용하면 원격 서버에 연결하기 위해 실행하는 모든 파이프라인에서 사용 가능한 새 키 쌍을 쉽게 생성할 수 있습니다.
실행 중인 파이프라인에서 원격 서버에 연결하려면 원격 서버의 공개 키만 복사하면 됩니다. 예를 들어 서버에 대한 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에 자격 증명을 안전하게 추가할 수 있습니다. 저장한 후에는 스크립트에서 자격 증명을 호출할 수 있으며 로그 출력에서 마스크된 상태로 남습니다.
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을 통해 쉽게 수행할 수 있는 작업입니다.
마지막으로, 프로덕션 환경에 적용하기 전에 테스트 환경에서 스크립트를 실행하는 것을 잊지 마세요. 이렇게 하면 실수로 프로덕션 데이터를 삭제하는 일을 방지할 수 있습니다.
이 문서 공유
다음 주제
여러분께 도움을 드릴 자료를 추천합니다.
이러한 리소스에 책갈피를 지정하여 DevOps 팀의 유형에 대해 알아보거나 Atlassian에서 DevOps에 대한 지속적인 업데이트를 확인하세요.