DevOps 테스트 환경 구성 개요
컨테이너 기술을 활용하면 CI/CD 구성 요소를 신속하게 프로비저닝할 수 있습니다. 본 가이드에서는 Docker 컨테이너를 이용해 주요 DevOps 도구들을 구축하는 방법을 다룹니다. 운영 환경에서는 컨테이너 오케스트레이션(Kubernetes) 또는 바이너리 설치 방식을 권장하며, 데이터베이스는 컨테이너 외부로 분리하는 것이 바람직합니다.
테스트베드 스펙
# uname -a
Linux node100 5.14.0-427.31.1.el9_4.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Aug 14 16:15:25 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
# cat /etc/system-release
Rocky Linux release 9.4 (Blue Onyx)
# java --version
openjdk 17.0.12 2024-07-16 LTS
OpenJDK Runtime Environment (Red_Hat-17.0.12.0.7-1) (build 17.0.12+7-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-17.0.12.0.7-1) (build 17.0.12+7-LTS, mixed mode, sharing)
# docker version
Client: Docker Engine - Community
Version: 27.2.1
API version: 1.47
Go version: go1.22.7
Git commit: 9e34c9b
Built: Fri Sep 6 12:09:42 2024
OS/Arch: linux/amd64
Server: Docker Engine - Community
Engine:
Version: 27.2.1
API version: 1.47 (minimum version 1.24)
Go version: go1.22.7
Git commit: 8b539b8
Built: Fri Sep 6 12:07:57 2024
OS/Arch: linux/amd64
Experimental: false
Jenkins 자동화 서버 배포
JDK 17 기반 LTS 이미지를 활용하여 Jenkins 마스터 노드를 실행합니다. Docker 소켓 마운트를 통해 Jenkins 컨테이너 내부에서 호스트의 Docker 데몬을 제어할 수 있습니다.
# 이미지 풀링
docker pull docker.m.daocloud.io/jenkins/jenkins:lts-jdk17
# 볼륨 디렉터리 준비
mkdir -p /opt/jenkins-docker
chmod 777 /opt/jenkins-docker
# 컨테이너 실행
docker run -itd --name jenkins \
-p 8080:8080 -p 50000:50000 \
--restart always \
-v /opt/jenkins-docker:/var/jenkins_home \
-v /etc/localtime:/etc/localtime \
-v /usr/bin/docker:/usr/bin/docker \
-v /var/run/docker.sock:/var/run/docker.sock \
docker.m.daocloud.io/jenkins/jenkins:lts-jdk17
# 초기 비밀번호 확인
docker logs -f jenkins
# 웹 접속: http://localhost:8080
# 컨테이너 상세 정보
docker inspect jenkins
GitLab 저장소 플랫폼 구축
SSH 포트를 2222로 매핑하여 호스트의 기본 SSH 서비스와 충을 방지합니다. 호스트명에는 실제 접속할 IP 주소를 지정합니다.
# 데이터 디렉터리 생성
mkdir -p /data/devops/gitlab/{config,logs,data}
chmod +x -R /data/devops/gitlab/
# GitLab CE 실행
docker run -itd --name gitlab \
-p 443:443 -p 80:80 -p 2222:22 \
--restart always \
--hostname 192.168.16.200 \
-v /data/devops/gitlab/config:/etc/gitlab \
-v /data/devops/gitlab/logs:/var/log/gitlab \
-v /data/devops/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce
# 로그 모니터링
docker logs -f gitlab
# 루트 계정 초기 비밀번호 조회
docker exec -i gitlab cat /etc/gitlab/initial_root_password
# 웹 접속: http://<호스트_IP>:80
# 컨테이너 상세 정보
docker inspect gitlab
SonarQube 정적 분석 도구 설치
코드 품질 분석을 위한 SonarQube 커뮤니티 에디션을 배포합니다. 권한 설정이 적절히 되어 있어야 정상적으로 기동됩니다.
# 디렉터리 구성
mkdir -p /data/devops/sonarqube/{sonarqube_conf,sonarqube_extensions}
mkdir -p /data/devops/sonarqube/{sonarqube_logs,sonarqube_data}
chmod 777 -R /data/devops/sonarqube/
# 컨테이너 기동
docker run -itd --name sonarqube \
-p 9000:9000 \
--restart always \
-v /data/devops/sonarqube/sonarqube_conf:/opt/sonarqube/conf \
-v /data/devops/sonarqube/sonarqube_extensions:/opt/sonarqube/extensions \
-v /data/devops/sonarqube/sonarqube_logs:/opt/sonarqube/logs \
-v /data/devops/sonarqube/sonarqube_data:/opt/sonarqube/data \
sonarqube:lts-community
# 웹 접속: http://<호스트_IP>:9000
# 기본 계정: admin / admin
# 컨테이너 상세 정보
docker inspect sonarqube
Nexus3 아티팩트 저장소 구축
Maven, npm, Docker 등 다양한 패키지 형식을 호스팅할 수 있는 Nexus Repository Manager를 설치합니다.
# 데이터 볼륨 준비
mkdir -p /data/devops/nexus3/data
chmod 777 -R /data/devops/nexus3/
# Nexus3 실행
docker run -itd --name nexus3 \
-p 8081:8081 \
--restart always \
-v /data/devops/nexus3/data:/nexus-data \
sonatype/nexus3
# 상태 확인
docker logs -f nexus3
# 관리자 초기 비밀번호 획득
docker exec -i nexus3 cat /nexus-data/admin.password
# 웹 접속: http://<호스트_IP>:8081
# 컨테이너 상세 정보
docker inspect nexus3
빌드 도구체인 설치
Apache Maven 설정
# 압축 해제 및 심볼릭 링크 생성
tar -xzvf apache-maven-3.9.9-bin.tar.gz -C /opt
ln -s /opt/apache-maven-3.9.9 /opt/maven
# 환경변수 등록
cat >> /etc/profile << 'EOF'
export M2_HOME=/opt/maven
export MAVEN_HOME=/opt/maven
export PATH=${M2_HOME}/bin:${PATH}
EOF
source /etc/profile
# 설치 검증
mvn --version
mvn --help
Gradle 빌드 도구 설정
# 배포 및 링크
unzip -d /opt gradle-8.10.1-bin.zip
ln -s /opt/gradle-8.10.1 /opt/gradle
# 환경변수 구성
cat >> /etc/profile << 'EOF'
export GRADLE_HOME=/opt/gradle
export PATH=${PATH}:${GRADLE_HOME}/bin
EOF
source /etc/profile
# 검증
gradle --version
gradle --help
Node.js/npm 생태계 준비
# 바이너리 설치
tar -Jxvf node-v20.17.0-linux-x64.tar.xz -C /opt
ln -s /opt/node-v20.17.0-linux-x64 /opt/node
# 환경변수
echo 'export NODE_HOME=/opt/node' >> /etc/profile
echo 'export PATH=${NODE_HOME}/bin:${PATH}' >> /etc/profile
source /etc/profile
# 버전 확인
node --version
npm --version
# 레지스트리 미러 설정 (필요시 선택적 사용)
npm config set registry https://registry.npmmirror.com/
# npm config set registry http://mirrors.cloud.tencent.com/npm/
# npm config set registry https://mirrors.huaweicloud.com/repository/npm/
npm config get registry
# 프레임워크 글로벌 설치 예시
npm install -g @vue/cli
vue --version
npm install -g @angular/cli
ng version
보충 사항
- Rocky Linux 환경에서 환경변수는
/etc/profile및~/.bash_profile을 통해 관리됩니다. - Harbor 이미지 레지스트리 구축은 별도 문서를 참고하세요.