Jenkins는 지속적 통합(CI) 및 지속적 배포(CD)를 자동화하는 데 널리 사용되는 오픈 소스 자동화 서버입니다. 때로는 Jenkins 파이프라인이나 스크립트 내에서 JSON 데이터를 처리해야 할 필요가 있을 수 있습니다. 이런 경우, **jq
**는 매우 유용한 도구입니다. **jq
**는 커맨드라인 JSON 프로세서로, JSON 형식의 데이터를 다루기 위한 강력한 도구입니다. 이 글에서는 Docker를 사용하여 Jenkins 컨테이너에 **jq
**를 설치하는 방법을 안내합니다.
시작하기 전에
이 글을 따라 하기 위해서는 Docker와 Docker Compose가 설치되어 있어야 합니다. Docker Compose를 사용하면 여러 컨테이너의 설정을 docker-compose.yml
파일 하나로 관리할 수 있어 편리합니다.
Dockerfile 생성
첫 번째 단계는 **jq
**를 포함한 커스텀 Jenkins 이미지를 만들기 위한 **Dockerfile
**을 생성하는 것입니다. 아래는 해당 **Dockerfile
**의 예시입니다:
# Dockerfile
FROM jenkins/jenkins:lts
USER root
RUN apt-get update && \
apt-get install -y jq && \
rm -rf /var/lib/apt/lists/*
USER jenkins
이 **Dockerfile
**은 공식 Jenkins LTS 이미지를 기반으로 하며, root
사용자로 전환하여 **jq
**를 설치한 후, 다시 jenkins
사용자로 전환합니다.
docker-compose.yml 수정
다음으로, docker-compose.yml
파일을 수정하여 위에서 생성한 **Dockerfile
**을 사용하도록 설정합니다:
version: '3'
services:
jenkins:
build: .
container_name: 'jenkins'
restart: always
ports:
- '9090:8080'
- '50000:50000'
volumes:
- '~/jenkins:/var/jenkins_home'
- '/var/run/docker.sock:/var/run/docker.sock'
environment:
TZ: 'Asia/Seoul'
여기서 **build: .
**는 현재 디렉토리에 있는 **Dockerfile
**을 사용하여 이미지를 빌드하라는 의미입니다.
컨테이너 빌드 및 실행
모든 설정이 완료되었다면, 다음 명령어를 사용하여 컨테이너를 빌드하고 실행할 수 있습니다:
docker-compose up --build
이 명령어는 docker-compose.yml
파일에 정의된 설정에 따라 컨테이너를 빌드하고 실행합니다. --build
옵션은 이미지가 존재하지 않거나 **Dockerfile
**이 변경된 경우 이미지를 다시 빌드하라는 지시입니다.
결론
이제 Jenkins 컨테이너 내부에서 **jq
**를 사용하여 JSON 데이터를 쉽게 처리할 수 있습니다. 이 방법을 통해 Jenkins 파이프라인이나 스크립트에서 JSON 관련 작업을 보다 효율적으로 수행할 수 있게 되었습니다.
활용
| 슬렉 자동알림 : Post build task - Script
#!/bin/bash
cd /var/jenkins_home/workspace/subfolder
git_previous_successful_commit=$GIT_PREVIOUS_SUCCESSFUL_COMMIT
git_current_commit=$GIT_COMMIT
commit_messages=$(git log --pretty=format:"%h - %s" $git_previous_successful_commit..$git_current_commit)
JSON_PAYLOAD=$(jq -n \
--arg token "xoxb-..." \
--arg channel "..." \
--arg text "
subfolder 배포알림
https://subfolder.ai
<변경사항>
$commit_messages
" \
'{token: $token, channel: $channel, text: $text}')
curl -X 'POST' \
'https://.../v1/send/slack' \
-H 'accept: application/json' \
-H 'x-api-key: ...' \
-H 'Content-Type: application/json' \
-d "$JSON_PAYLOAD"