Git에서 특정 tag가 붙어 있을 때만 Circle CI에서 deploy·slack 통지하는 방법
소개
개발을 하고 있으면 커밋마다가 아니라, 특정의 조건일 때에 어플리를 개발·프로덕션 환경에 자동 배치하고 싶다, 라고 하는 것이 있다고 생각합니다.
이 기사에서는 Git에서 v.*
와 태그가 붙은 경우에만 Circle CI에서 앱을 배포하고 결과를 Slack 통지하는 방법을 설명합니다.
환경·처리의 흐름
환경
· 소스 코드 관리 : GitHub
· Deploy 대상 앱: Go 샘플 앱
· Deploy 대상: AWS Elastic Beanstalk
처리 흐름
환경
· 소스 코드 관리 : GitHub
· Deploy 대상 앱: Go 샘플 앱
· Deploy 대상: AWS Elastic Beanstalk
처리 흐름
커밋마다 배포하는 방법은 위의 일에 요약되어 있습니다.
설정 방법
특정 태그 부여시 Circle CI 실행
v.*
와 tag 가 붙은 커밋만 Circle CI 를 실행하는 경우는 다음의 filters: tags: only:
의 설정을 넣습니다.
※Circle CI의 사양상, require 되고 있는 작업(예에서는 archive job)에도 filters: tags
의 설정이 필요하게 되는 것 같습니다.
이하, 공식 문서 발췌if a job requires any other jobs (directly or indirectly), you must use regular expressions to specify tag filters for those jobs
config.yml (발췌) jobs:
- archive:
filters:
tags:
only: /v.*/
- deploy:
requires:
- archive
filters:
tags:
only: /v.*/
branches:
ignore: /.*/
Deploy 결과의 Slack 알림
1. 슬랙 웹후크 설정 페이지 에서 알릴 채널을 선택하고 Webhook URL
를 복사합니다.
2. Circle CI 대상 프로젝트의 BUILD SETTING -> Enviroment Variables에서 다음 항목을 설정Name: $SLACK_WEBHOOK_URL
Value: [上記でコピーしたWebhook URL]
3. Circle CI config.yml에 다음 명령 추가
config.yml (발췌) - run:
name: Notification to Slack
command: |
curl -X POST \
$SLACK_WEBHOOK_URL \
-H 'content-type: application/json' \
-d '{
"text": "Deploy succeeded!!"
}'
when: on_success
- run:
name: Notification to Slack
command: |
curl -X POST \
$SLACK_WEBHOOK_URL \
-H 'content-type: application/json' \
-d '{
"text": "Deploy Failed!!"
}'
when: on_fail
위의 예에서는 deploy 성공시와 실패시에 통지하는 메세지를 바꾸고 있습니다.
config.yml의 전체 설정은 다음과 같습니다.
config.ymlversion: 2
jobs:
archive:
machine: true
working_directory: ~/project/{{ORG_NAME}}/{{REPO_NAME}}
steps:
- checkout
- run:
name: Archive
command: |
mv ./eb-go-sample/Dockerfile ./eb-go-sample/Dockerfile.local
zip ./eb-go-sample/go-sample.zip ./eb-go-sample/*
- persist_to_workspace:
root: . # working_directoryからの相対パス
paths:
- . # rootからの相対パス
deploy:
machine: true
working_directory: ~/project/{{ORG_NAME}}/{{REPO_NAME}}
steps:
- attach_workspace: # working_directoryからの相対パス
at: .
- run:
name: Deploy to EB
command: |
pip install awsebcli --upgrade
cd ~/project/{{ORG_NAME}}/{{REPO_NAME}}/eb-go-sample/ && eb deploy
- run:
name: Notification to Slack
command: |
curl -X POST \
$SLACK_WEBHOOK_URL \
-H 'content-type: application/json' \
-d '{
"text": "Deploy succeeded!!"
}'
when: on_success
- run:
name: Notification to Slack
command: |
curl -X POST \
$SLACK_WEBHOOK_URL \
-H 'content-type: application/json' \
-d '{
"text": "Deploy Failed!!"
}'
when: on_fail
workflows:
version: 2
archive_and_deploy:
jobs:
- archive:
filters:
tags:
only: /v.*/
- deploy:
requires:
- archive
filters:
tags:
only: /v.*/
branches:
ignore: /.*/
실행 결과
기타 참고로 한 사이트
htps : // 코 m / 흠뻑 ky / ms / c7bd05f897 에어 b58 에어 7에 4
htps : // bg. 쉬. 메/포 sts/시 rc
htps : // 코 m / 오히라 / ms / 09 아 91 c01109f8d053b
Reference
이 문제에 관하여(Git에서 특정 tag가 붙어 있을 때만 Circle CI에서 deploy·slack 통지하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Shin-27/items/6f45ad7c6c6fcb2b95a9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
jobs:
- archive:
filters:
tags:
only: /v.*/
- deploy:
requires:
- archive
filters:
tags:
only: /v.*/
branches:
ignore: /.*/
- run:
name: Notification to Slack
command: |
curl -X POST \
$SLACK_WEBHOOK_URL \
-H 'content-type: application/json' \
-d '{
"text": "Deploy succeeded!!"
}'
when: on_success
- run:
name: Notification to Slack
command: |
curl -X POST \
$SLACK_WEBHOOK_URL \
-H 'content-type: application/json' \
-d '{
"text": "Deploy Failed!!"
}'
when: on_fail
version: 2
jobs:
archive:
machine: true
working_directory: ~/project/{{ORG_NAME}}/{{REPO_NAME}}
steps:
- checkout
- run:
name: Archive
command: |
mv ./eb-go-sample/Dockerfile ./eb-go-sample/Dockerfile.local
zip ./eb-go-sample/go-sample.zip ./eb-go-sample/*
- persist_to_workspace:
root: . # working_directoryからの相対パス
paths:
- . # rootからの相対パス
deploy:
machine: true
working_directory: ~/project/{{ORG_NAME}}/{{REPO_NAME}}
steps:
- attach_workspace: # working_directoryからの相対パス
at: .
- run:
name: Deploy to EB
command: |
pip install awsebcli --upgrade
cd ~/project/{{ORG_NAME}}/{{REPO_NAME}}/eb-go-sample/ && eb deploy
- run:
name: Notification to Slack
command: |
curl -X POST \
$SLACK_WEBHOOK_URL \
-H 'content-type: application/json' \
-d '{
"text": "Deploy succeeded!!"
}'
when: on_success
- run:
name: Notification to Slack
command: |
curl -X POST \
$SLACK_WEBHOOK_URL \
-H 'content-type: application/json' \
-d '{
"text": "Deploy Failed!!"
}'
when: on_fail
workflows:
version: 2
archive_and_deploy:
jobs:
- archive:
filters:
tags:
only: /v.*/
- deploy:
requires:
- archive
filters:
tags:
only: /v.*/
branches:
ignore: /.*/
htps : // 코 m / 흠뻑 ky / ms / c7bd05f897 에어 b58 에어 7에 4
htps : // bg. 쉬. 메/포 sts/시 rc
htps : // 코 m / 오히라 / ms / 09 아 91 c01109f8d053b
Reference
이 문제에 관하여(Git에서 특정 tag가 붙어 있을 때만 Circle CI에서 deploy·slack 통지하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Shin-27/items/6f45ad7c6c6fcb2b95a9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)