G-1: 메신저 Webhook Relay + _send_to_room 실제 httpx 호출 구현 G-2: POST /api/tasks/bulk SR 대량작업 엔드포인트 (최대 100건) G-3: 라이선스 만료 알림 스케줄러 (매일 09:00 KST) G-4: 체험판 upgrade_banner 필드 + license.py 배너 로직 G-5: core/auto_rca.py + incidents/problem auto-rca 엔드포인트 G-6: core/deploy_impact.py + vibe impact-analysis 엔드포인트 G-7: core/ticket_classifier.py + SR 생성 시 AI 분류 + ai-suggestion API G-8: VulnPatchRecord 모델 + vuln_scan 패치추적 4개 엔드포인트 G-9: core/jira_sync.py + gateway Jira/Confluence 연동 엔드포인트 G-10: core/push_notify.py + routers/push.py + PushSubscription 모델 G-11: approvals 다중승인 (위임/서명/기한초과/마감연장) G-12: alembic.ini + migrations/ + cicd/migrate_to_postgres.sh 하네스: guardia-orchestrator 확장기능 Phase 반영 봇명령어: /sr /status /license /bulk 슬래시 명령어 추가 설치스크립트: setup/ (Ubuntu, CentOS, RHEL, Windows) --test 옵션 포함 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
321 lines
7.2 KiB
Markdown
321 lines
7.2 KiB
Markdown
# Jenkins 설치 가이드
|
|
|
|
> **버전**: Jenkins LTS (2.440.x 기준)
|
|
> **대상 OS**: RHEL 8/9, Rocky Linux 8/9, Ubuntu 20.04/22.04
|
|
> **최종 수정**: 2026-05-25
|
|
|
|
---
|
|
|
|
## 1. 사전 요구사항
|
|
|
|
| 구분 | 최소 | 권장 |
|
|
|------|------|------|
|
|
| CPU | 2 Core | 4 Core |
|
|
| RAM | 4 GB | 8 GB |
|
|
| Disk | 50 GB | 100 GB |
|
|
| Java | JDK 17 | JDK 21 |
|
|
| OS | RHEL 8 / Ubuntu 20.04 | RHEL 9 / Ubuntu 22.04 |
|
|
|
|
### 필수 패키지
|
|
|
|
```bash
|
|
# RHEL/Rocky
|
|
sudo dnf install -y git curl wget unzip fontconfig java-17-openjdk-devel
|
|
|
|
# Ubuntu
|
|
sudo apt-get install -y git curl wget unzip fontconfig openjdk-17-jdk
|
|
```
|
|
|
|
---
|
|
|
|
## 2. RHEL 8 / Rocky Linux 8/9 설치
|
|
|
|
### 2-1. Jenkins 저장소 추가
|
|
|
|
```bash
|
|
sudo wget -O /etc/yum.repos.d/jenkins.repo \
|
|
https://pkg.jenkins.io/redhat-stable/jenkins.repo
|
|
|
|
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
|
|
|
|
sudo dnf upgrade -y
|
|
```
|
|
|
|
### 2-2. Jenkins 설치
|
|
|
|
```bash
|
|
sudo dnf install -y jenkins
|
|
|
|
sudo systemctl enable jenkins
|
|
sudo systemctl start jenkins
|
|
sudo systemctl status jenkins
|
|
```
|
|
|
|
### 2-3. 방화벽 설정
|
|
|
|
```bash
|
|
# firewalld 사용 시
|
|
sudo firewall-cmd --permanent --new-service=jenkins
|
|
sudo firewall-cmd --permanent --service=jenkins --set-short=Jenkins
|
|
sudo firewall-cmd --permanent --service=jenkins --add-port=8080/tcp
|
|
sudo firewall-cmd --reload
|
|
|
|
# 또는 직접 포트 개방
|
|
sudo firewall-cmd --permanent --add-port=8080/tcp
|
|
sudo firewall-cmd --reload
|
|
```
|
|
|
|
### 2-4. SELinux 설정 (RHEL)
|
|
|
|
```bash
|
|
# Jenkins가 네트워크 바인딩 가능하도록
|
|
sudo setsebool -P httpd_can_network_connect 1
|
|
sudo semanage port -a -t http_port_t -p tcp 8080 2>/dev/null || \
|
|
sudo semanage port -m -t http_port_t -p tcp 8080
|
|
```
|
|
|
|
---
|
|
|
|
## 3. Ubuntu 20.04 / 22.04 설치
|
|
|
|
### 3-1. Jenkins 저장소 추가
|
|
|
|
```bash
|
|
sudo wget -O /usr/share/keyrings/jenkins-keyring.asc \
|
|
https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key
|
|
|
|
echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
|
|
https://pkg.jenkins.io/debian-stable binary/" | \
|
|
sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null
|
|
|
|
sudo apt-get update
|
|
```
|
|
|
|
### 3-2. Jenkins 설치
|
|
|
|
```bash
|
|
sudo apt-get install -y jenkins
|
|
|
|
sudo systemctl enable jenkins
|
|
sudo systemctl start jenkins
|
|
sudo systemctl status jenkins
|
|
```
|
|
|
|
### 3-3. UFW 방화벽 설정
|
|
|
|
```bash
|
|
sudo ufw allow 8080/tcp
|
|
sudo ufw reload
|
|
sudo ufw status
|
|
```
|
|
|
|
---
|
|
|
|
## 4. 초기 설정
|
|
|
|
### 4-1. 초기 관리자 비밀번호 확인
|
|
|
|
```bash
|
|
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
|
|
```
|
|
|
|
### 4-2. 웹 브라우저 접속
|
|
|
|
```
|
|
http://<서버IP>:8080
|
|
```
|
|
|
|
1. 초기 비밀번호 입력
|
|
2. **"Install suggested plugins"** 선택 (또는 `jenkins_plugins.sh` 스크립트 사용)
|
|
3. 관리자 계정 생성
|
|
4. Jenkins URL 설정 (`http://jenkins.agency.go.kr:8080`)
|
|
|
|
### 4-3. 자동화 스크립트
|
|
|
|
```bash
|
|
# 자동 설치 (비대화형)
|
|
sudo bash cicd/scripts/install/jenkins_install.sh
|
|
|
|
# 플러그인 자동 설치
|
|
sudo bash cicd/scripts/install/jenkins_plugins.sh
|
|
```
|
|
|
|
---
|
|
|
|
## 5. Java 버전 관리
|
|
|
|
Jenkins와 빌드 Java 버전이 다를 경우 도구 관리에서 JDK를 별도 등록한다.
|
|
|
|
```bash
|
|
# 시스템에 JDK 17, 21 병행 설치
|
|
# RHEL
|
|
sudo dnf install -y java-17-openjdk-devel java-21-openjdk-devel
|
|
sudo alternatives --list | grep java
|
|
|
|
# Ubuntu
|
|
sudo apt-get install -y openjdk-17-jdk openjdk-21-jdk
|
|
sudo update-alternatives --list java
|
|
```
|
|
|
|
Jenkins 관리 → Tools → JDK Installations:
|
|
- `JDK17` → `/usr/lib/jvm/java-17-openjdk`
|
|
- `JDK21` → `/usr/lib/jvm/java-21-openjdk`
|
|
|
|
---
|
|
|
|
## 6. Git 설정
|
|
|
|
```bash
|
|
# Jenkins 사용자로 Git 전역 설정
|
|
sudo -u jenkins git config --global user.email "jenkins@agency.go.kr"
|
|
sudo -u jenkins git config --global user.name "Jenkins CI"
|
|
|
|
# SSH 키 생성 (Git 서버 인증용)
|
|
sudo -u jenkins ssh-keygen -t ed25519 -C "jenkins@agency.go.kr" \
|
|
-f /var/lib/jenkins/.ssh/id_ed25519 -N ""
|
|
|
|
# 공개키 출력 → Git 서버에 등록
|
|
sudo cat /var/lib/jenkins/.ssh/id_ed25519.pub
|
|
```
|
|
|
|
---
|
|
|
|
## 7. Maven / Gradle 도구 설정
|
|
|
|
Jenkins 관리 → Tools:
|
|
|
|
### Maven
|
|
- Name: `maven3`
|
|
- Install automatically: ✓ (Version: 3.9.x)
|
|
- 또는 직접 경로: `/usr/share/maven`
|
|
|
|
### Gradle
|
|
- Name: `gradle8`
|
|
- Install automatically: ✓ (Version: 8.x)
|
|
|
|
### Node.js (NodeJS Plugin 설치 후)
|
|
- Name: `nodejs20`
|
|
- Version: 20.x LTS
|
|
|
|
---
|
|
|
|
## 8. 역방향 프록시 (Nginx)
|
|
|
|
내부망에서 80 포트로 접근하거나 HTTPS를 적용할 경우:
|
|
|
|
```nginx
|
|
# /etc/nginx/conf.d/jenkins.conf
|
|
upstream jenkins {
|
|
keepalive 32;
|
|
server 127.0.0.1:8080 fail_timeout=0;
|
|
}
|
|
|
|
server {
|
|
listen 80;
|
|
server_name jenkins.agency.go.kr;
|
|
|
|
location / {
|
|
proxy_pass http://jenkins;
|
|
proxy_redirect default;
|
|
proxy_http_version 1.1;
|
|
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
proxy_set_header Connection "";
|
|
|
|
proxy_connect_timeout 90;
|
|
proxy_send_timeout 90;
|
|
proxy_read_timeout 90;
|
|
proxy_buffering off;
|
|
proxy_request_buffering off;
|
|
proxy_max_temp_file_size 0;
|
|
}
|
|
}
|
|
```
|
|
|
|
```bash
|
|
sudo nginx -t && sudo systemctl reload nginx
|
|
```
|
|
|
|
---
|
|
|
|
## 9. JCasC (Jenkins Configuration as Code) 적용
|
|
|
|
```bash
|
|
# JCasC 설정 파일 배포
|
|
sudo mkdir -p /var/lib/jenkins/casc_configs
|
|
sudo cp cicd/config/jenkins.yaml /var/lib/jenkins/casc_configs/
|
|
sudo chown -R jenkins:jenkins /var/lib/jenkins/casc_configs/
|
|
|
|
# 환경변수 설정 (jenkins 서비스 systemd override)
|
|
sudo mkdir -p /etc/systemd/system/jenkins.service.d/
|
|
cat <<'EOF' | sudo tee /etc/systemd/system/jenkins.service.d/casc.conf
|
|
[Service]
|
|
Environment="CASC_JENKINS_CONFIG=/var/lib/jenkins/casc_configs"
|
|
Environment="JENKINS_URL=http://jenkins.agency.go.kr:8080"
|
|
Environment="ITSM_URL=http://itsm.agency.go.kr:8000"
|
|
EOF
|
|
|
|
sudo systemctl daemon-reload
|
|
sudo systemctl restart jenkins
|
|
```
|
|
|
|
---
|
|
|
|
## 10. 백업 설정
|
|
|
|
```bash
|
|
# 주요 디렉터리 백업 (crontab 등록)
|
|
cat <<'EOF' | sudo tee /etc/cron.d/jenkins-backup
|
|
# Jenkins 일 2회 백업
|
|
0 2,14 * * * jenkins tar czf /backup/jenkins-$(date +\%Y\%m\%d-\%H\%M).tar.gz \
|
|
/var/lib/jenkins/jobs \
|
|
/var/lib/jenkins/casc_configs \
|
|
/var/lib/jenkins/credentials.xml \
|
|
2>/dev/null
|
|
# 30일 이전 백업 삭제
|
|
30 2 * * * find /backup -name "jenkins-*.tar.gz" -mtime +30 -delete
|
|
EOF
|
|
```
|
|
|
|
---
|
|
|
|
## 11. 문제 해결
|
|
|
|
### Jenkins 시작 실패
|
|
|
|
```bash
|
|
# 로그 확인
|
|
sudo journalctl -u jenkins -n 100 --no-pager
|
|
sudo cat /var/log/jenkins/jenkins.log
|
|
|
|
# Java 버전 확인
|
|
java -version
|
|
sudo -u jenkins java -version
|
|
```
|
|
|
|
### 포트 충돌
|
|
|
|
```bash
|
|
# 8080 포트 사용 프로세스 확인
|
|
sudo ss -tlnp | grep 8080
|
|
|
|
# 포트 변경 (/etc/sysconfig/jenkins 또는 /etc/default/jenkins)
|
|
# RHEL
|
|
sudo sed -i 's/^HTTP_PORT=.*/HTTP_PORT=8090/' /etc/sysconfig/jenkins
|
|
# Ubuntu
|
|
sudo sed -i 's/^HTTP_PORT=.*/HTTP_PORT=8090/' /etc/default/jenkins
|
|
```
|
|
|
|
### 플러그인 설치 실패 (오프라인 환경)
|
|
|
|
```bash
|
|
# 플러그인 .hpi 파일을 직접 업로드
|
|
# Jenkins 관리 → Plugins → Advanced → Deploy Plugin
|
|
# 또는 /var/lib/jenkins/plugins/ 에 직접 복사 후 재시작
|
|
sudo cp plugins/*.hpi /var/lib/jenkins/plugins/
|
|
sudo systemctl restart jenkins
|
|
```
|