← 글 목록

notes

Jenkins - Publish over SSH

Jenkins Publish over SSH 플러그인 설정·원격 배포 주의점 메모.

Publish over SSH 란 ?


Untitled

  • 사전처리항목

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 브랜치의 변경사항만 감지하고 빌드합니다.