Server/배포 자동화

.net core + Jenkins + Docker CI/CD 구성하기

잔소리대마왕 2023. 2. 10. 16:49

 

.net core 프로젝트JenkinsDocker를 사용하여 
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 image1 생성 확인

docker image 명령어를 사용하여 image를 생성을 해보세요.

# 생성된 image1 이미지를 사용하여 container1를 생성 후 동작시키는 명령어
docker run -d -p 8080:80 --name container1 image1

docker container 명령어를 사용하여 container를 생성해 보세요.

container 동작을 확인해봅니다.
정상 동작이 완료되면 준비는 끝났습니다.
자신의 Github에 레포지토리 업로드 해주세요.

4. github 접근 토큰 생성

Profile > Settings / Developer settings > Personal access tokens

만들어진 토큰을 안전한 곳에 저장해주세요.


5. github webhook 설정

Repository > Settings > Webhooks

젠킨스 서버 주소/github-webhook/을 연결해주세요.
master branch에 push시 jenkins에 알릴 수 있도록 해주는 역할입니다.

6. docker hub 접근 토큰 생성

Account Settings > Security > New Access Tokens

만들어진 토큰을 안전한 곳에 저장해주세요.


7. 젠킨스 플러그인 설치

https://nitpick92.tistory.com/14

참고하여 설치 후 젠킨스 접속 후 로그인 해주세요.

Jenkins 관리 > Plugin Manager 이동하여 하단 플러그인을 설치해주세요.

  • github integration
  • post build task
  • publish over ssh

8. 젠킨스에 배포 서버 SSH 연결

Dashboard > Jenkins 관리 > Configure System

추후에 deploy.sh파일을 배포서버에 전달해주기 위한 SSH 설정입니다.
ssh or password로 test configuration success 확인 해주시면 됩니다.

 


9. 젠킨스 Credentials Add

Jenkins 관리 > Credentials > System > Global credentials

github에서 만든 접근 토큰을 세팅해줍니다.

docker hub에서 만든 접근 토큰을 세팅해줍니다.

10. 젠킨스 Project 생성

Dashboard > 새로운 item

자신의 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로 방화벽 오픈 후 배포된 웹 사이트를 확인 해보시면 됩니다.

jenkins 프로젝트 동작 성공
배포된 mvc 프로젝트

 

 

.net core + jenkins + docker를 이용하여 linux 서버에 웹 서비스를 배포하는 방법을 알아보았습니다.

 

궁금한 사항은 댓글 남겨주세요 : )

 

13. 다음에는

현재는 docker container 중지 후 시작하는 사이에는 배포된 웹 페이지에 접속이 불가능한 문제가 있어

무중단 배포에 대해 정리해보려고 합니다.

'Server > 배포 자동화' 카테고리의 다른 글

CentOS7 Jenkins 설치하기  (0) 2023.02.10