[Devops] jenkins-flask 프로젝트 연동

황인용·2021년 2월 11일
1

Devops

목록 보기
2/7
post-thumbnail

Jenkins Plugin Manager

  • flask(python) 프로젝트로 python 관련 plugin 필요
  • Dashboard > Plugin Manager 에서 plugin 검색하여 설치
  • python, pyenv, post build task, github, bitbucket(옵션) 설치

create ssh-key

  • Jenkins과 flask프로젝트(github) 간 소스코드를 주고 받기 위해서는 ssh-key로 서로 ssh 통신을 해야한다
  • 따라서 jenkins 서버에서 ssh-private-key와 ssh-public-key를 생성한다.
  1. mkdir .ssh
  • ssh-key의 권장하는 관리하는 디렉토리는 /var/lib/jenkins/.ssh/
  • 저장 시 추후 관리를 위해 프로젝트 명 별로 관리하는 걸 권장 ex(idrsa{프로젝트명})
cd /var/lib/jenkins
sudo mkdir .ssh
cd .ssh
pwd
/var/lib/jenkins/.ssh
  1. create ssh-key
    2-1. ssh-kegen 명령어
  • -t 옵션 : 어떠한 암호화 방식을 사용 할 것인지를 지정. ex(rsa)
  • -b 옵션 : 생성할 키의 bit수를 지정
  • -C 옵션 : ssh-key의 주석
sudo ssh-keygen -t rsa -b 4096 -C "주석쓰"

2-2. ssh 디렉토리 선택

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): /var/lib/jenkins/.ssh/id_rsa_{프로젝트명}

2-3. 기타 설정

Enter passphrase (empty for no passphrase): {보안암호 설정}

2-4. ssh-keygen Success 화면

Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256: ...
The key's randomart image is:
+---[RSA 4096]----+
...
+----[SHA256]-----+

2.5 ssh-private-key, ssh-public-key 확인

  • ssh-private-key : 서버에서 관리하는 key 공유하면 안됨 ex(idrsa{프로젝트명})
  • ssh-public-key : 클라이언트에서 관리하는 key로 서버에 ssh 접속 시 사용 ex(idrsa{프로젝트명}.pub)
cd /var/lib/jenkins/.ssh
ls -al
total 16
drwxr-xr-x  2 root    root    4096 Feb 11 18:30 .
drwxr-xr-x 15 jenkins jenkins 4096 Feb 11 18:24 ..
-rw-------  1 root    root    3243 Feb 11 18:30 id_rsa_{프로젝트명}
-rw-r--r--  1 root    root     749 Feb 11 18:30 id_rsa_{프로젝트명}.pub

setting ssh-public-key in github

  • jenkins 서버에서 생성한 ssh-public-key를 해당 flask 프로젝트의 github에 setting 한다
  • Github 기준 설정 방법
  1. setting > Deploy Keys
  2. ssh-public-key 입력
  • 서버에서 생성된 public-key를 sudo cat 명령어로 확인하여, 값을 복사해서 아래 key Input창에 입력

setting ssh-private-key in jenkins

  • jenkins 서버에서 생성한 ssh-public-key를 jenkins Credentials 에서 등록한다

  • jenkins관리 > Manage Credentials

  • Kind : SSH Username with private key 선택

  • Username : 원하는 유저명

  • private Key : (private Key 영역의 id_rsa 값)

item create

  1. jenkins 메인 화면에서 새로운 item 클릭
  • 본인이 원하는 item name 입력 및 "Freestle Project" 선택
  1. 소스 코드 관리
  • Repository URL : Github의 SSH 주소 복사 + 붙여놓기
  • Credentials : jenkins관리 > Manage Credentials 에서 설정한 키 선택
  1. 빌드 환경
  • pyenv build wrapper : 프로젝트의 python 버전 입력 ex(3.8.5)

  • 해당 서버에 pyenv 관련 script가 실행되지 않는 경우, 아래와 같은 라이브러리를 설치해야한다

sudo apt install gcc
sudo apt install make
  1. Build
  • Jenkins는 소스 코드 관리에서 받은 파일들을 별도 WORKSPACE에서 관리함
  • 따라서 WORKSPACE에서 실제로 실행할 script를 작성하여 빌드를 유발해야함
  • Execute Shell 을 선택하여 원하는 script를 작성
  • Python 특성상 pyenv와 pip3를 통해 프로젝트의 필요한 라이브러리를 설치해야함
if [ ! -d "$WORKSPACE/venv" ]; then
  python -m venv venv;
 
  if [ -f $WORKSPACE/requirements.txt ]; then
    . $WORKSPACE/venv/bin/activate;
    pip3 install -r requirements.txt;
  fi
fi

  1. 빌드 후 조치
  • 모든 빌드 환경이 완료 된 후 실행하고자 하는 script를 작성
  • 해당 프로젝트는 gunicorn으로 실행하도록 구현
PID=`ps -ef | grep commonlife2-admin | awk '{print $2}'`
sudo kill -9 $PID
cd /var/lib/jenkins/workspace/commonlife2-admin
. venv/bin/activate
gunicorn --bind 0:9090 --access-logfile access.log --error-logfile error.log manage:gunicorn_app --daemon --reload

수동 빌드 및 확인

  • Dashbord에서 해당 프로젝트의 설정 확인
  • Build Now를 통해 수동 빌드 실행 및 결과 확인

Github WebHook

  • jenkins이 자동으로 소스코드 확인 및 빌드하기 위해서는 webhook이 필요
  • github에서 merge 등이 일어나면 jenkins에 webhook message를 던짐
  • Payload URL : jenkins 아이피와 서비스 포트를 입력

Let's Build Test!!

profile
dev_pang의 pang.log

0개의 댓글