참고 서적을 이용하여 django를 이용한 웹 개발 후,
책에서 빠져있는 부분과 개인적인 커스텀을 하다보니 CI/CD에 대하여 관심을 갖게 되었습니다.
본 내용은 개인용pc, git, jenkins, docker를 이용하여 구축 합니다.
계속 공부해나가는 중이라 제 상황에 맞게 구성한 것이니,
참고하셔서 도움되셨으면 좋겠습니다.
시나리오
항목 | 내용 |
네트워크 | DDNS를 이용하여 Home IP연결. |
GIT | SSH key pair 생성 후 SSH public key 등록 |
Server | Docker, Docker-Compose, Jenkins 설치 |
네트워크 | DDNS to Server 포트포워딩 |
Jenkins | Jenkins 접속 및 계정생성, git 연결설정 |
GIT | Web hook 설정 및 테스트 |
검증 | Git pull 및 docker build 테스트 |
확인 | Web site접속 및 동작 테스트 |
DDNS를 이용한 Home Network 설정
이부분은 web hook 설정에 필요합니다. 가정용 인터넷 ip가 고정되어있다면 ip로 넣어도 될것 같습니다.
https://2ster.tistory.com/search/ddns
IT_INFRA_MANAGEMENT
2ster.tistory.com
Git | SSH public key 등록
git과 jenkins에 사용하기위해 SSH keypair를 생성하고 저장합니다.
xshell을 이용한 key 생성 방법예시입니다.
centos접속_ssh 키인증 접속 방법설정
사용 어플리케이션 : Xshell 도구 > 사용자키 생성 마법사 RSA(비대칭키) (참고, 리눅스는 pem확장자, 윈도우는 ppk확장자로 만들어야함 근데 pub로 되있는데??) 원격 접속 계정 user1 ◇ 클라이언트 작업
2ster.tistory.com
Git hub에 접속하여 계정의 setting에서 SSH and GPG keys 메뉴를 들어갑니다.
New SSH key를 클릭
본인이 식별가능한 Title과 Public Key를 입력하고 저장합니다.
※ 위 내용은 전체 적용되는 설정이고, Repository별로 적용하려면 각 Repository에서 설정하면됩니다.
잘 저장되었는지 궁금하다면 clone을 HTTPS가 아닌 SSH로 해서 명령을 날려보는 방법도 있습니다...
Docker, Docker-Compose, Jenkins 설치
저는 centos7을 사용중이라 이에 맞는 방법을 적용합니다.
아래 공식 사이트내용을 참고하여 설치합니다.
첫번째 링크는 docker, 두번째링크는 docker-compose입니다.
세번째 링크는 정리가 잘되어있는 글 같아 첨부합니다.
https://docs.docker.com/engine/install/centos/
Install Docker Engine on CentOS
docs.docker.com
https://docs.docker.com/compose/install/linux/
Install the Compose plugin
docs.docker.com
https://jsonobject.tistory.com/532
CentOS 7, Docker 및 Docker Compose 설치하기
개요 이번 글에서는 CentOS 7에서 docker, docker-compose를 설치하는 방법을 소개하고자 한다. Docker 설치 docker를 사용하면 운영체제와 독립적인 이미지를 인스턴스로 올려 컨테이너로 작동시킬 수 있다
jsonobject.tistory.com
Jenkins 설치방법입니다.
상세내용은 아래 공식 사이트 링크 참조 바랍니다.
https://www.jenkins.io/doc/book/installing/linux/
Linux
After downloading, installing and running Jenkins using one of the procedures above (except for installation with Jenkins Operator), the post-installation setup wizard begins. This setup wizard takes you through a few quick "one-off" steps to unlock Jenkin
www.jenkins.io
설치 후 방화벽 설정은 필수 입니다.
# firewall-cmd --permanent --zone=public --add-port=8080/tcp
# firewall-cmd --reload
젠킨스가 설치된 서버의 ip주소와 포트번호로 접속을 시도해봅니다.
최초 접속시 위와 같은 화면이 나오는데 내용 가운데 있는 경로에있는 내용을 확인하여 비밀번호를 입력합니다.
# cat /var/lib/jenkins/secretes/initialAdminPassword
추천 하는 플로그인으로 진행했습니다.
관리자 계정 생성 및 접속 url을 설정하고 접속합니다.
DDNS포트포워딩설정
DDNS포트포워딩으로 Jenkins서버로, 외부접속을 도메인으로 가능하도록 설정합니다.
git Web hook설정
예시 : http://domain.com:8080/github-webhook/
저장을하고 정상이면 다음과 같이나옵니다.
잘 되는지 확인을위해 git으로 push 테스트를해봅니다.
잘 적용되었다면 등록한 웹훅 클릭하여 RecentDeliveries 리스트도 정상으로 체크되는게 보입니다.
# git add .
# git commit -m "msg"
# git push
젠킨스 git연동설정
새로운 Item클릭
이름을 입력하고 Freestyle project클릭.
아래 창이나오면
Project url에는 git프로젝트 주소를 넣어줍니다.
예시 : https://github.com/사용자이름/repository이름/
git Ropository 설정내용입니다.
Repository는 SSH주소로넣어주고
Credentials는 Add를 눌러 SSH Private key를 넣어줍니다. Public키와 다릅니다.
Branch는 저는 main으로 되어있어서 main으로 수정했습니다.
빌드스템 scripts 예시입니다.
저는 git에 push하면 webhook으로 jenkins에 신호가가고 그뒤 서버에서 git pull & docker build 되도록 설정했습니다.
아래와 같이 명령을 보내기위해 jenkins 계정에 sudo 명령이 가능하도록
/etc sudoers파일을 수정했습니다.
#chmod 640 /etc/sudoers
#vim /etc/sudoers
맨 아래 내용 추가 jenkins ALL=(ALL) NOPASSWD: ALL
#chmod 440 /etc/sudoers
Execute shell은 처음 테스트할때는
echo "test"와 같은 간단한 스크립트로 진행합니다.
결과는 Console Output에서 확인가능.
아래 예시 스크립트는
web hook으로 젠킨스가 신호를 받으면
git pull을 실행하고
기존 docker container를 삭제
새로 docker build를 진행합니다.
빌드 테스트를 진행합니다.
모든 준비가 끝났습니다.
git push를 하면 자동 배포가 진행됩니다.
'프로그래밍 학습 > Python' 카테고리의 다른 글
python | api request 참고자료 (0) | 2023.12.20 |
---|