.net core 프로젝트를 Jenkins와 Docker를 사용하여
linux 배포서버에 자동배포를 할 수 있도록
CI/CD 구성을 해보려고 합니다.
docker 참고 : https://nitpick92.tistory.com/4
jenkins 참고 : https://nitpick92.tistory.com/14
docker 명령어 참고 : https://nitpick92.tistory.com/5
1. 필요한 환경 세팅
- 로컬 pc (Windows)
github, docker, visual studio 2022 설치
https://www.docker.com/products/docker-desktop/
Docker Desktop 설치
https://momobob.tistory.com/m/71
WSL2 프로그램 설치
- Jenkins Server (linux CentOS7)
Jenkins, docker 설치
- Deploy Server (linux CentOS7)
docker설치
2. 기본동작 확인
- jenkins 서버에서 github 최신 소스를 pull 받아와 build test를 진행.
- build test 통과 후 image 제작
- image -> docker 저장소인 docker hub에 push
- 프로젝트에 포함돼있는 scripts/deploy.sh를 배포서버에 ssh 전송
- deploy.sh 실행
3. 프로젝트 준비
docker desktop 동작을 확인해주세요.
net core 6.0으로 프로젝트를 생성해 주세요.
Docker 사용을 클릭해 주세요.
docker로 프로젝트 실행이 되는지 확인해주세요.
#해당 위치의 dockerfile를 사용하여 image1 생성
docker build -t image1 ./
docker image 명령어를 사용하여 image를 생성을 해보세요.
# 생성된 image1 이미지를 사용하여 container1를 생성 후 동작시키는 명령어
docker run -d -p 8080:80 --name container1 image1
docker container 명령어를 사용하여 container를 생성해 보세요.
container 동작을 확인해봅니다.
정상 동작이 완료되면 준비는 끝났습니다.
자신의 Github에 레포지토리 업로드 해주세요.
4. github 접근 토큰 생성
만들어진 토큰을 안전한 곳에 저장해주세요.
5. github webhook 설정
젠킨스 서버 주소/github-webhook/을 연결해주세요.
master branch에 push시 jenkins에 알릴 수 있도록 해주는 역할입니다.
6. docker hub 접근 토큰 생성
만들어진 토큰을 안전한 곳에 저장해주세요.
7. 젠킨스 플러그인 설치
https://nitpick92.tistory.com/14
참고하여 설치 후 젠킨스 접속 후 로그인 해주세요.
Jenkins 관리 > Plugin Manager 이동하여 하단 플러그인을 설치해주세요.
- github integration
- post build task
- publish over ssh
8. 젠킨스에 배포 서버 SSH 연결
추후에 deploy.sh파일을 배포서버에 전달해주기 위한 SSH 설정입니다.
ssh or password로 test configuration success 확인 해주시면 됩니다.
9. 젠킨스 Credentials Add
github에서 만든 접근 토큰을 세팅해줍니다.
docker hub에서 만든 접근 토큰을 세팅해줍니다.
10. 젠킨스 Project 생성
자신의 github 주소를 연결해주세요.
처음에 세팅한 프로젝트가 업로드된 레포지토리 주소를 적어주세요.
*/master -> master branch에 push를 할때 동작을 하려고 합니다.
Docker Hub Token을 변수에 담아서 사용하기 위한 세팅입니다.
echo $PASSWORD | docker login -u $USERNAME --password-stdin
docker build -t {도커 허브 아이디}/{이미지 네임} ./
docker push {도커 허브 아이디}/{이미지 네임}
docker rmi {도커 허브 아이디}/{이미지 네임}
최신화 된 소스를 대상으로 빌드 테스트 후 Docker Hub에 배포해줍니다.
echo $PASSWORD | docker login -u $USERNAME --password-stdin
sh deploy.sh
Jenkins -> deploy_server1로 프로젝트 scripts폴더에 있는
deploy.sh를 옮기고 실행시켜줍니다.
11. deploy.sh 추가
상단에서 세팅한 프로젝트 scripts폴더 생성 후 deploy.sh를 추가해줍니다.
# 가동중인 testcontainer1 컨테이너 중단 및 삭제
sudo docker ps -a -q --filter "name=testcontainer1" | grep -q . && docker stop testcontainer1 && docker rm testcontainer1 | true
# 기존 이미지 삭제
sudo docker rmi {본인 docker_hub_id}/testimage1
# 도커허브 이미지 pull
sudo docker pull {본인 docker_hub_id}/testimage1
# 도커 run
docker run -d -p 8080:80 --name testcontainer1 {본인 docker_hub_id}/testimage1
# 사용하지 않는 불필요한 이미지 삭제 -> 현재 컨테이너가 물고 있는 이미지는 삭제되지 않습니다.
docker rmi -f $(docker images -f "dangling=true" -q) || true
12. 배포 성공 확인
https://nitpick92.tistory.com/manage/posts/
컨테이너 port로 방화벽 오픈 후 배포된 웹 사이트를 확인 해보시면 됩니다.
.net core + jenkins + docker를 이용하여 linux 서버에 웹 서비스를 배포하는 방법을 알아보았습니다.
궁금한 사항은 댓글 남겨주세요 : )
13. 다음에는
현재는 docker container 중지 후 시작하는 사이에는 배포된 웹 페이지에 접속이 불가능한 문제가 있어
무중단 배포에 대해 정리해보려고 합니다.
'Server > 배포 자동화' 카테고리의 다른 글
CentOS7 Jenkins 설치하기 (0) | 2023.02.10 |
---|