사내에서 CI/CD툴로 CircleCI self hosted runner
(GPU 사용때문에)를 이용하여 사용중인데, 프론트 소스코드의 자동화도 요청이 들어왔다.
처음에는 프론트의 경우에는 GPU 사용이 필요 없으니 CircleCI에서 제공하는 VM을 사용하려 해서 보안담당겸 CTO분에게 IP Whitelist를 요청드렸는데 계속 실패했다.(무엇이 문제였을까..? IP를 놓치신걸까..) 차선책으로 기존 self hosted runner가 설치된 서버에 같은 러너를 사용하기로 결정했다.
version: 2.1
orbs:
slack: circleci/slack@4.8.3
executors:
ci-dev:
machine: true
resource_class: ci_server/1
working_directory: ~/Circleci/front_application
이런식으로 working_directory
값을 지정해주어 기존에 사용중이던 directory와 분리를 시켜놓고 Job을 실행 시키게 하였다. 여기서 중요한것은 git checkout
의 경우 해당 directory가 clean한 상태가 아니면 에러를 뿜게 된다!! 이러한 이유때문에, 아래의 코드처럼 결과와 상관없이 해당 폴더를 항상 삭제 하였다.
- run:
when: always
name: Clean front_application folder
command: sudo rm -rf ~/Circleci/front_application
그 후 결과 알림을 위해 slack연동을 한 후 첫 배포를 돌려보니 원하는대로 잘 되어서 아쥬 만족하였다👏
그런데! 다음날 배포slack방에 계속해서 실패했다는 메세지가 떠서 Circleci 페이지에서 확인을 해보니
you are trying to checkout to is not empty and not git repository
라고 하며 checkout 자체가 되지 않고 있었다... !
‘엥? 뭐지?’라고 생각하며 실제 working_directory에 가보니 slack로그
관련한 파일이 남아 있었다. ‘난 분명히 해당 폴더를 지웠는데?’ 라는 생각을 갖고 찾아보니 slack알림을 날리는 메세지는 해당 job의 가장 마지막
에 실행이 되어서 working_directory에 slack로그가 남아있던 것이다..
정리하자면 working_directory삭제 → slack알림 → slack로그가 다시 working_directory에 생성
의 순서로 진행이 된것이다.
‘working_directory를 삭제하는 job을 하나 더 만들까?’ 생각하다가 그냥 slack에 대한 로그를 생성하지 않는 방식으로 진행을 하면 되겠다 싶어 slack orbs 문서를 살펴보니 SetupLogs()
라는 함수가 실제 로그파일을 생성하는걸 확인 하였다.
SetupLogs() {
if [ "$SLACK_PARAM_DEBUG" -eq 1 ]; then
LOG_PATH="$(mktemp -d 'slack-orb-logs.XXXXXX')"
SLACK_MSG_BODY_LOG="$LOG_PATH/payload.json"
SLACK_SENT_RESPONSE_LOG="$LOG_PATH/response.json"
touch "$SLACK_MSG_BODY_LOG" "$SLACK_SENT_RESPONSE_LOG"
chmod 0600 "$SLACK_MSG_BODY_LOG" "$SLACK_SENT_RESPONSE_LOG"
fi
}
해당 코드를 보면 SLACK_PARAM_DEBUG
라는 환경변수가 1이면 실행을 하는데 SLACK_PARAM_DEBUG은 debug라는 파라미터로 값을 전달할 수 있다.
environment:
SLACK_PARAM_DEBUG: <<parameters.debug>>
‘근데 나는 딱히 준적이 없는데? 근데 왜 저 함수가 실행이 된거지..?’ 하며 의구심을 풀었지만 일단 아래와 같이 해당 파라미터를 false로 주고 돌려봤다.
- slack/notify:
event: fail
debug: false
template: basic_fail_1
- slack/notify:
event: pass
debug: false
template: success_tagged_deploy_1
하지만 역시나 로그파일이 생성이 되고 있었다. 왜이런가 싶어 slack-orbs github에 가서 issue를 확인해보니 debug Mode always enabled, mktemp always placing files in working_directory
라는 제목의 issue가 있었고 해당 내용은 SetUpLogs()의 if문이 [ -n "${SLACK_PARAM_DEBUG:-}" ]; then
되어 있어 항상 실행이 된다는 것이였다. 내가 봤던 공식문서랑 내용이 달라 확인해본결과 공식문서는 latest버전(4.12.5)으로 설명이 되었지만 내가 구동시킨 orbs는 이전버전(4.8.5)버전이였던 것이다...(삽질도 이런삽질이...)
그리하여 slack orbs버전만 up을 시켜주니 아주 잘 구동 되었따...
조금만 더 일찍 발견했다면 contributor
가 될 수 있었는데 너무너무 아쉬웠다...
느낀점!
contributor
가 될 수 있게 하자!