.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

 

배포 자동화에 앞서 Linux CentOS7 환경에
Jenkins를 설치해보고자 합니다.
Jenkins란 배포 자동화를 도와주는 서버입니다.

 

1. 초기 세팅

  • 한국 시간으로 변경
sudo rm /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime
date
  • java 설치
sudo yum list "java-11-openjdk-devel*"
sudo yum install java-11-openjdk-devel.x86_64
which javac
readlink -f /usr/bin/javac
sudo vim /etc/profile
// 맨 하단에 추가
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-devel.x86_64/bin/javac
PATH=$PATH:$JAVA_HOME/bin
export PATH

source /etc/profile
echo $JAVA_HOME

 

2. Jenkins 설치

# 젠킨스 stable 버전 설치파일 다운로드
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo

# 젠킨스 설치 key import
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

# 젠킨스 패키지 설치
sudo yum install jenkins -y

# 젠킨스 설치확인
rpm -qa | grep jenkins

 

3. Jenkins port 변경

  • jenkins port 변경
# jenkins 설정파일 여기 -> 파일권한이 없으면 상황에 맞게 chmod 설정
vi /etc/sysconfig/jenkins

# port 변경

// AS - IS
JENKINS_PORT="8080"

// TO - BE
JENKINS_PORT="9090"
  • jeknins 방화벽 설정
# firewalld 설치
sudo yum install firewalld

# firewalld 시작
sudo systemctl start firewalld
sudo systemctl enable firewalld

# port 추가
sudo firewall-cmd --permanent --zone=public --add-port=9090/tcp

# firewalld 재로드
sudo firewall-cmd --reload

 

  • jenkins 시작
# 젠킨스 시작
sudo systemctl start jenkins.service

# 젠킨스 프로세스 확인
ps -ef | grep jenkins

# 젠킨스 동작 확인
sudo systemctl status jenkins.service

 

4. Jenkins 접속

  • 웹 브라우저 접속(공인ip:port번호) 합니다.
  • pw 확인 합니다.
  • 접속 확인 합니다.
# 패스워드 출력
cat /var/lib/jenkins/secrets/initialAdminPassword

5. Jenkins 세팅

  • install suggested plugins를 클릭하고 계정 생성을 진행합니다.

로그인 화면

  • 해당 플러그인을 설치해줍니다.
1. github integration
2. post build task
3. publish over ssh

Plugin 설치하는 곳

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

.net core + Jenkins + Docker CI/CD 구성하기  (0) 2023.02.10

+ Recent posts