Github Actions로 CI/CD 파이프라인을 구축한 내용 정리
Trigger job에서 커밋 메시지를 확인하는 if문을 추가해서, 특정 사이트인 경우에만 파이프라인이 실행되도록 설정
if: ${{ contains(github.event.head_commit.message, '#사이트이름') }}
각 job마다 runs-on을 설정하여, runs-on과 일치하는 태그의 runner만 실행하도록 설정
trigger-001:
...
runs-on: site-001
steps:
- ...
trigger-002:
...
runs-on: site-002
steps:
- ...
각 사이트 별로 workflow 파일을 생성하고 커밋 메시지로 트리거가 동작하도록 설정
A, C 사이트 동시 배포
커밋 메시지 예시입니다.
#A #C
- application.yaml 파일에서 각 사이트 별 profile 선언 후 사이트 별 설정 값 관리,
- 각 사이트 별 Dockerfile 생성하여 설정 관리
application.yaml
---
spring:
config:
activate:
on-profile: A-site
[설정값1]
[설정값2]
---
spring:
config:
activate:
on-profile: B-site
[설정값1]
[설정값2]
buildx 옵션으로 빌드 캐시 사용하여 빌드 시간 단축
Build job 중 일부
docker buildx build -t ${{ env.IMAGE_NAME }}:${{ env.IMAGE_VERSION }} -f Dockerfile-${{ env.DOMAIN }} .
- 쉘스크립트로 이전 버전의 이미지를 찾은 후 $GITHUB_ENV(env variable)로 선언하여, 이미지 버전을 체크하고 삭제하는데 이용
- 현재 배포된 컨테이너 중지 & 삭제시킨 후 삭제 여부를 확인하고, 깔끔하게 삭제 된 경우에만 신규 버전을 배포하도록 설정
echo "기존 컨테이너 확실히 제거되었는지 확인"
CONTAINER_NAME=$(docker ps -aqf "name=${{ env.IMAGE_NAME }}-*")
if [ -z "$CONTAINER_NAME" ]; then
echo "CLEAN_RESULT=0" >> $GITHUB_ENV
echo "clean remove success"
else
echo "CLEAN_RESULT=1" >> $GITHUB_ENV
echo "$CONTAINER_NAME still exists.. clean remove fail"
fi