현재 젠킨스와 데이터베이스가 올라가 있습니다.
현재 개발중인 프로젝트의 인프라 아키텍처를 확인해보면 SnoarQube
를 사용하고 있습니다.
현재 컨테이너가 5대인데 4대는 docker-compose
로 묶여있습니다. 그래서 Jenkins
와 SonarQube
도 docker-compose
로 한번에 실행되도록 구성하겠습니다.
현재 Jenkins는 컨테이너 환경으로 동작하고 있습니다. 데이터는 볼륨으로 관리하고 있어 빠르게 docker-compose
파일을 작성해보도록 하겠습니다.
먼저 docker-compose
파일을 관리하는 폴더를 만들어보도록 하겠습니다.
다음과 같이 폴더를 구상하였고 docker-compose.yml
과 환경변수를 관리하는 .env
파일을 만들기 위해 아래 명령어를 실행합니다.
touch docker-compose.yml && \
touch .env
정상적으로 파일이 생긴것을 확인할 수 있습니다.
이제 docker-compose.yml
을 로컬 PC에서 작성하여 AWS EC2
로 옮겨보겠습니다.
version: "3"
services:
jenkins_container:
container_name: jenkins_container
image: jenkins/jenkins:jdk17
ports:
- ${JENKINS_BINDING_PORT}:8080
- 50000:50000
volumes:
- ${JENKINS_DATA_PATH}:/var/jenkins_home
restart: on-failure
다음과 같이 vi
편집기를 사용하여 옮긴 후 저장하였습니다.
.env
다음과 같이 .env
에 작성하였습니다.
이번에는 정적 코드 분석 도구인 sonarqube
를 실행할 수 있도록 내용을 추가합니다.
위에서 작성한 docker-compose.yml
에 이어서 작성합니다.
version: "3"
services:
jenkins_container:
...
sonarqube_container:
container_name: sonarqube_container
image: sonarqube
ports:
- ${SONARQUBE_BINDING_PORT}:9000
volumes:
- ${SONARQUBE_DATA_PATH}:/opt/sonarqube/data
- ${SONARQUBE_EXTENSIONS_PATH}:/opt/sonarqube/extensions
- ${SONARQUBE_LOGS_PATH}:/opt/sonarqube/logs
restart: on-failure
jenkins 는 이전글에서 볼륨을 생성했기 때문에 SonarQube
를 위한 볼륨을 따로 생성합니다.
docker-compose.yml
에서 사용하는 환경변수를 위해서 .env
를 이어서 작성합니다.
모든 설정을 끝냈으니 docker-compose
를 실행시켜 보도록 하겠습니다.
먼저 처음 실행할 때 문제가 없는지 보기 위해서 -d
옵션 없이 실행합니다.
docker-compose up
⚠️ Warning
Jenkins
가 실행되고 있다면 종료와 컨테이너를 삭제시켜주세요. 데이터는 볼륨으로 관리되어 괜찮습니다.
sonarqube 의 초기 아이디와 비밀번호는 admin
입니다.
정상적으로 동작하는 것을 확인할 수 있습니다.
version: "3"
services:
jenkins_container:
container_name: jenkins_container
image: jenkins/jenkins:jdk17
ports:
- ${JENKINS_BINDING_PORT}:8080
- 50000:50000
volumes:
- ${JENKINS_DATA_PATH}:/var/jenkins_home
restart: on-failure
sonarqube_container:
container_name: sonarqube_container
image: sonarqube
ports:
- ${SONARQUBE_BINDING_PORT}:9000
volumes:
- ${SONARQUBE_DATA_PATH}:/opt/sonarqube/data
- ${SONARQUBE_EXTENSIONS_PATH}:/opt/sonarqube/extensions
- ${SONARQUBE_LOGS_PATH}:/opt/sonarqube/logs
restart: on-failure
.env
#####
# Jenkins
#####
JENKINS_BINDING_PORT=
JENKINS_DATA_PATH=
#####
# SonarQube
#####
SONARQUBE_BINDING_PORT=
SONARQUBE_DATA_PATH=
SONARQUBE_EXTENSIONS_PATH=
SONARQUBE_LOGS_PATH=