Ubuntu22.04 Jenkins 젠킨스 코드 자동배포 설정 방법

2025. 4. 7. 16:49·프로그래밍 일기/Linux
반응형

젠킨스 설치

sudo apt update
sudo apt install -y openjdk-17-jdk curl vim nginx

# 설치 확인 (젠킨스는 자바가 필요함)
java -version

# GPG 키 추가 (Jenkins 패키지를 신뢰할 수 있도록 GPG 키를 등록합니다.)
curl -fsSL <https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key> | sudo tee \\
    /usr/share/keyrings/jenkins-keyring.asc > /dev/null

# 저장소 추가
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 update
sudo apt install -y jenkins

# 설치 확인
jenkins --version

# 젠킨스 시작
sudo systemctl enable jenkins
sudo systemctl start jenkins

# 젠킨스 상태 확인
sudo systemctl status jenkins

 

젠킨스 접속 및 최초 세팅

http://<서버-IP>:8080

# 비밀번호 확인
sudo cat /var/lib/jenkins/secrets/initialAdminPassword

좌측 Install Suggested plugins 추천 플러그인 설치

젠킨스 Credential 설정 (깃 정보 설정하기)

 

공개키 생성하기 (해당 작업을 통해 비밀번호 입력 없이 젠킨스 서버가 프로젝트 서버에 접속할 수 있다.)

# 젠킨스가 설치된 서버에서 아래 명령어 실행
sudo su - jenkins
ssh-keygen -t rsa -b 4096 -C "jenkins@jenkins-server"
# enter키를 통해 기본값으로 설치
ssh-copy-id [계정명]@[ip]
# 접근 확인
ssh [계정명]@[ip]

# 프로젝트 서버에 아래 명령어 실행 (git pull 비밀번호 입력 없이 하기 위함)
cd ~/[프로젝트 경로]
git config --global credential.helper store
git pull origin dev

 

system daemon 설정하기

[Unit]
Description=FastAPI system_admin_backend service
After=network.target

[Service]
User=[사용자계정]
WorkingDirectory=/home/test/src/test
ExecStart=/home/test/src/test/.venv/bin/uvicorn testapi.__init__:app \\
  --host 127.0.0.1 \\
  --port 8765
Restart=always
Environment=PYTHONUNBUFFERED=1

[Install]
WantedBy=multi-user.target
sudo systemctl enable fastapi
sudo systemctl start fastapi
sudo systemctl stop fastapi
sudo systemctl status fastapi

sudo 명령어 비밀번호 없이 설정하기

sudo visudo

최하단에 아래와 같이 입력
[사용자계정] ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart fastapi.service, /usr/bin/systemctl status fastapi.service

 

젠킨스 Item 생성

 

프론트엔드 실행 명령어 작성

#!/bin/bash

# 1. 172.16.100.60 서버에 접속하여 프로젝트 디렉토리로 이동
ssh coraise@172.16.100.60 << 'EOF'
cd ~/src/system_admin_front

# 2. 최신 코드 가져오기
git stash
git pull origin dev --rebase
if ! git stash pop; then
    echo "git stash pop 중 충돌이 발생했습니다. 수동으로 충돌을 해결한 후 다시 시도하세요."
    exit 1
fi

# 3. 패키지 설치
npm install

# 4. 빌드 실행
npm run build

# 5. 서비스 재시작 (예: PM2 사용 시)
pm2 restart nuxt-app
EOF

백엔드 실행 명령어 작성

#!/bin/bash

# 1. 172.16.100.60 서버에 접속하여 프로젝트 디렉토리로 이동
ssh coraise@172.16.100.60 << 'EOF'
cd ~/src/system_admin_backend

# 2. 최신 코드 가져오기
git stash
git pull origin dev --rebase
if ! git stash pop; then
    echo "git stash pop 중 충돌이 발생했습니다. 수동으로 충돌을 해결한 후 다시 시도하세요."
    exit 1
fi

# 3. 라이브러리 설치 (sc/in은 virtualenv activate라고 가정)
source sc/in || exit 1
pip install -r requirements.txt || exit 1

# 4. DB 마이그레이션 적용
alembic upgrade head || exit 1

# 5. 기존 프로세스 종료 (run.sh 안에 uvicorn 등이 돌고 있다고 가정)
pkill -f run.sh || true

# 6. 백그라운드 실행
nohup sh run.sh > output.log 2>&1 &

EOF

<< 'EOF' → 아래 EOF 전까지 있는 명령어들을 원격 서버에서 실행

충돌날 경우

젠킨스 빌드 중 충돌이 발생하면, 서버를 실행시키지 못하고 에러가 발생한다.

서버에 들어가서 수동으로 해결해야 한다.
그러니까 충돌 안나게 브렌치 및 커밋 관리를 잘 해야한다.

반응형
저작자표시 (새창열림)

'프로그래밍 일기 > Linux' 카테고리의 다른 글

ubuntu spring boot 배포 방법 ./gradlew  (0) 2024.07.30
nginx에서 ssl 인증서 적용  (0) 2024.07.22
AWS ubuntu 22.04 구축 및 nginx 설치  (0) 2024.07.18
팀즈 커스텀앱 안드로이드에서 안되는 현상 해결 Teams Custom App not work android  (0) 2024.06.25
Mac Linux 파일 전송하기  (0) 2024.05.16
'프로그래밍 일기/Linux' 카테고리의 다른 글
  • ubuntu spring boot 배포 방법 ./gradlew
  • nginx에서 ssl 인증서 적용
  • AWS ubuntu 22.04 구축 및 nginx 설치
  • 팀즈 커스텀앱 안드로이드에서 안되는 현상 해결 Teams Custom App not work android
MakeMe
MakeMe
제가 포스팅한 글 중 잘못된 부분이 있으면 알려주세요!
  • MakeMe
    Developer blog
    MakeMe
    • 모든 글 (71)
      • 프로그래밍 일기 (57)
        • Java & Spring (21)
        • Python & Flask (3)
        • Linux (12)
        • Front-End (10)
        • DB & SQL (6)
        • Git (3)
        • IDE (2)
      • 자격증 (7)
        • 정보처리기능사 (2)
        • SQLD (1)
        • SW개발_L5 (1)
        • AWS (3)
      • 독립일기 (7)
        • 중소기업청년대출 (7)
  • 인기 글

  • 태그

    MYSQL
    젠킨스 자동 배포
    자바환경변수
    psql
    AWS
    중기청필요서류
    flask 세팅
    중소기업청년대출
    springboot
    건강보험자격득실확인서
    Vue
    java
    DB
    스프링부트
    넉스트
    DBeaver
    nuxt
    젠킨스 우분투 설치
    인텔리제이
    고용보험내역서
    자동배포설정
    nuxt3
    자바
    중기청서류
    스프링
    flask
    중기청후기
    IntelliJ
    중기청필수서류
    Spring
  • hELLO· Designed By정상우.v4.10.1
MakeMe
Ubuntu22.04 Jenkins 젠킨스 코드 자동배포 설정 방법
상단으로

티스토리툴바