비개발자의 스크립트 또는 SQL 쿼리 스케쥴링 지원
Jenkins 활용도 높여서 개발팀의 업무 부하 덜기
우리 회사 서비스 관리 및 운영을 위한 여러 가지의 백그라운드 작업들은 주로 whenever 루비 gem 을 이용하여 crontab 스케쥴에 따라 처리된다. 일부 데이터 파이프라인은 Airflow 에서 관리되는 것들도 있는데, 이 것들은 전부 개발자들의 손이 닿아야 유지관리가 된다.
필요성의 대두
비개발자들은 주로 데이터 추출 등의 작업 결과물을 필요로 했다. 관련 요청은 개발팀으로 정기적 또는 비정기적으로 들어오곤 했는데, 정기적인 데이터 추출 요청이야 데이터 추출 스크립트 코드 등을 작성해두면 이후 같은 작업을 반복할 일이 없다. 문제는 데이터 추출 요청 항목이 조금 바뀌거나 그 주기가 비정기적이라 개발팀이 대응해줄 수 밖에 없는 상황이었다.
젠킨스(Jenkins)의 도입
비개발자 직원들 중 일부는 SQL 을 다룰 수 있었지만, 좀 더 범용적인 방안이 필요했다. 그 방안으로 젠킨스를 선택했는데 UI 가 복잡하지 않고, 이미 이를 사용해본 비개발자들도 있다는 것이 한 몫 했다. Airflow 도 생각해봤는데, 개발자가 만들었다는 극악의 UI 는 내가 봐도 불편하기 그지 없고 사용하기 복잡했다.
그래서, 젠킨스에 루비 스크립트나 SQL 쿼리문을 등록해두고 스케쥴링하도록 구성했다. 구조는 아래와 같다.
젠킨스에 등록된 코드 -> 백엔드 서버에서 실행 -> 결과 파일 AWS S3 업로드
젠킨스 구성(Jenkins Configure)
[x] This project is parameterized 체크
- Multi-line String Parameter
- Name: RAW_SCRIPT
- Default Value 에 실행할 코드
Build Triggers
- Build periodically 체크 [x]
- 주기 설정 (crontab 문법은 crontab guru 참고)
Build
- Send files or execute commands over SSH before the build starts
- Exec command
RAW_SCRIPTMulti-line String Parameter 설정한 코드를 읽어서SCRIPT에 저장
1
2
3
4
5
6
source ~/.bash_profile && cd ~/project && read -r -d '' SCRIPT << EOM
$RAW_SCRIPT
EOM
echo "$SCRIPT" >> 텍스트 파일
# 이후, 텍스트 파일을 루비 스크립트 또는 SQL 쿼리로 서버에서 실행
Post-build Actions
- 슬랙 채널 혹은 개인 DM 으로 Slack Notifications 을 받아볼 수 있음
Channel / member id수정- downstream 으로 다른 작업까지 가능
마무리
이를 통해, 비정기적인 루비 스크립트 실행을 할 때 비개발자가 직접 젠킨스를 통해 작업을 처리할 수 있게 됐다. 또한, 개발팀의 손을 거치지 않고 스케쥴링에 등록한 SQL 쿼리문을 조금 바꾼다거나, 쿼리 실행 주기를 변경한다는 등의 수정을 할 수 있게 됐다. 간단한 쿼리 처리 등은 젠킨스 대신 슬랙에 만들어둔 슬랙봇(Slack Bot)을 통하기도 하는데 이는 기회가 된다면 나중에 적어보도록 하겠다.