notes
Jenkins - Publish over SSH
Jenkins Publish over SSH 플러그인 설정·원격 배포 주의점 메모.
Publish over SSH 란 ?
- 사전처리항목
Publish Over SSH는 Jenkins에서 빌드 결과물을 원격 서버로 전송하고 명령을 실행할 수 있게 해주는 플러그인입니다.
컨테이너 생성시 필요
# open ssh 설치
RUN apt-get update &&\
apt-get upgrade -y &&\
apt-get install -y openssh-client
jenkins volums 할당 ( client 와 데이터 공유 )
volumes:
- /home/dolfkang/jenkins:/var/jenkins_home
- /home/dolfkang/.ssh:/root/.ssh
- /var/run/docker.sock:/var/run/docker.sock
- 관리 접근
2.
ssh 발급이 안되어 있는경우
# SSH 키 생성
ssh-keygen -t rsa -b 4096 -C "your-email@example.com"
# 키 생성 시 나오는 질문들:
# Enter file in which to save the key (/home/dolfkang/.ssh/id_rsa): [엔터]
# Enter passphrase (empty for no passphrase): [엔터]
# Enter same passphrase again: [엔터]
# 키가 생성되었는지 확인
ls -la ~/.ssh/
# id_rsa (개인키)
# id_rsa.pub (공개키) 파일이 생성되었을 것입니다
# 개인키 확인 (이 내용을 Jenkins에 넣을 것입니다)
cat ~/.ssh/id_rsa
# 권한 설정
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
- Dashboard -> Jenkins -> Configure System
4.
Hostname으로 IP혹은 도메인을 적어준다.
webhook 연결을 위한 github server add
5. web hook
Payload URL에 젠킨스가 구동되는 서버의 ip 또는 DNS와 포트번호를 적고 뒤에 github-webhook/ 를 붙여주고 다음과 같이 설정한 후 Update webhook 버튼을 클릭
- github에서 webhooks를 보내는 ip는 하나가 아닌 여러개로 아래 사이트에서 확인이 가능합니다.
- https://api.github.com/meta
#
주의사항:
끝에 /github-webhook/ 슬래시(/)를 반드시 포함해야 합니다
프로토콜(http:// 또는 https://)을 명시해야 합니다
포트번호(13002)가 정확해야 합니다
GitHub 저장소 설정에서:
Settings > Webhooks > Add webhook
Payload URL에 위 전체 URL을 입력
Content type: application/json 선택
Secret: (필요한 경우 설정)
어떤 이벤트에 대해 webhook을 트리거할지 선택
Jenkins 설정에서도:
프로젝트 설정 > Build Triggers
"GitHub hook trigger for GITScm polling" 옵션 체크
이렇게 하면 GitHub의 이벤트가 발생할 때 Jenkins로 webhook이 전달됩니다.
------------------------------------------------------------------------------------
graph LR
A[GitHub] -->|Push Event| B[Webhook URL]
B -->|POST 요청| C[Jenkins/서버]
C -->|응답| A
------------------------------------------------------------------------------------
GitHub Repository ---(push)---> GitHub Webhook
|
v
방화벽 -----(8080 포트)-----> Jenkins 서버
|
v
빌드 트리거
------------------------------------------------------------------------------------
1. Jenkins 설정
- 프로젝트의 "빌드 유발" 설정
- "GitHub hook trigger" 활성화
2. 방화벽/네트워크 설정
- 8080 포트 개방
- Jenkins 서버 접근 허용
3. GitHub Webhook 설정
- Jenkins URL 등록
- 이벤트 설정
------------------------------------------------------------------------------------
호스팅 문제시 해당포드 확인
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.30.252.0/22" port port=8080 protocol=tcp accept'
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="185.199.108.0/22" port port=8080 protocol=tcp accept'
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="140.82.112.0/20" port port=8080 protocol=tcp accept'
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="143.55.64.0/20" port port=8080 protocol=tcp accept'
sudo firewall-cmd --reload
# GitHub Webhook IP 대역 허용
iptables -A INPUT -p tcp -s 192.30.252.0/22 --dport 8080 -j ACCEPT
iptables -A INPUT -p tcp -s 185.199.108.0/22 --dport 8080 -j ACCEPT
iptables -A INPUT -p tcp -s 140.82.112.0/20 --dport 8080 -j ACCEPT
iptables -A INPUT -p tcp -s 143.55.64.0/20 --dport 8080 -j ACCEPT
서비스: TCP
포트: 8080
허용 IP:
- 192.30.252.0/22
- 185.199.108.0/22
- 140.82.112.0/20
- 143.55.64.0/20
Jenkins 프로젝트의 소스 코드 관리 설정 방법입니다:
- Jenkins 대시보드에서 해당 프로젝트 선택
- 왼쪽 메뉴에서 "구성" 또는 "Configure" 클릭
- "소스 코드 관리" 또는 "Source Code Management" 섹션으로 이동
- "Git" 옵션 선택
- 다음 설정 입력:
- Repository URL: GitHub 저장소 URL (예: https://github.com/사용자명/저장소명.git)
- Credentials: GitHub 접근을 위한 인증 정보 선택
- Branch Specifier: */main 입력 (main 브랜치만 빌드)
이미지로 보면:
- "Repository URL" 필드에 GitHub 저장소 URL 입력
- "Branches to build" 섹션의 "Branch Specifier" 필드에 */main 입력
이렇게 설정하면 Jenkins는 main 브랜치의 변경사항만 감지하고 빌드합니다.