서버 (Linux, Windows, AWS)/자동배포(CI, CD)

[CI/CD] Docker + Jenkins + .net Core CI/CD 메뉴얼

Trillion Binary 2023. 2. 16. 13:41
SMALL

A. 시작

Docker - 컨테이너 기반으로 하는 오픈소스 가상화 플랫폼.
Jenkins - 지속적인 통합(Continuous integration, CI) + 지속적 배포(continuous delivery, CD)환경 구축 도구.
.net Core - ASP.NET Core는 macOS, Linux 및 Windows에서 실행되는 ASP.NET 오픈 소스 버전.

docker 명령어 참고 url

[Docker] Docker 기본 명령어 정리 (tistory.com)

 

[Docker] Docker 기본 명령어 정리

컨테이너 제어 명령어 컨테이너 내려받기 예시로 nginx 컨테이너를 받는다면 다음과 같이 적을 수 있다. latest 태그는 가장 최신 버전의 컨테이너 이미지를 가져온다. # docker pull NAME[:TAG] $ docker pull

trillion-binary.tistory.com

 

준비

1. 로컬 PC

github 설치
docker 설치
visual studio 2022 설치


2. Jenkins Server

Jenkins 설치
docker 설치


3. deploy Server

docker 설치

기본동작

개발자가 jenkins webhook에 연결되어있는 github branch에 push(Webhook 발생)

1. jenkins 서버에서 github 최신 소스를 pull 받아와 build 및 test를 진행
2. test 통과 후 image 제작
3. image -> docker 저장소인 docker hub에 push
4. 프로젝트에 포함되어있는 scripts/deploy.sh를 배포서버에 ssh 전송
5. deploy.sh 실행
- 실행 중인 컨테이너 중단 및 삭제 후 신규 이미지로 컨테이너 재실행

deploy.sh 동작
실행 중인 컨테이너 중단 및 삭제
기존 이미지 삭제
docker hub 이미지 pull
실행
사용하지 않는 불필요한 이미지 삭제


B. Docker 준비

Docker Desktop 설치
https://www.docker.com/products/docker-desktop/

 

Download Docker Desktop | Docker

Docker Desktop is available to download for free on Mac, Windows, or Linux operating systems. Get started with Docker today!

www.docker.com

WSL2 프로그램이 설치
[Docker] Windows 에서 Docker Desktop설치 시, WSL 2 installation is incomplete 에러 해결 (tistory.com)

 

[Docker] Windows 에서 Docker Desktop설치 시, WSL 2 installation is incomplete 에러 해결

Windows10에서 docker desktop 설치 후 프로그램 실행을 하면 아래와 같은 팝업이 뜨면서 실행이 되지 않는다. 이 에러의 원인은 WSL2 이라는 프로그램이 설치되지 않아서 발생하는 것으로 아래 링크를

trillion-binary.tistory.com

동작 확인

 

.net Core 프로젝트 준비


1. visual studio 2022으로 원하는 프로젝트로 생성

Docker 사용 클릭

사용 클릭을 하지 않더라도 추가 > Docker 지원 및 수동으로 파일 생성 가능합니다.

scripts/deploy.sh 생성

생성 후 최종 배포하기 전 안에 있는 내용 수정해주시면 됩니다. (image명 및 container명)

# 가동중인 jenkinsexample 도커 중단 및 삭제
sudo docker ps -a -q --filter "name=jenkinsexample" | grep -q . && docker stop jenkinsexample && docker rm jenkinsexample | true

# 기존 이미지 삭제
sudo docker rmi seongguk92/jenkinsexample

# 도커허브 이미지 pull
sudo docker pull seongguk92/jenkinsexample

# 도커 run
docker run -d -p 8080:80 --name jenkinsexample seongguk92/jenkinsexample

# 사용하지 않는 불필요한 이미지 삭제 -> 현재 컨테이너가 물고 있는 이미지는 삭제되지 않습니다.
docker rmi -f $(docker images -f "dangling=true" -q) || true

 

C. docker 명령어 및 프로젝트 docker 동작 확인

여기서 만들어진 image 및 container는 docker desktop 또는

1. 생성된 프로젝트에 만들어진 docker.file 이용하여 image 제작

docker build -t {원하는 image명} {dockerfile 경로}

docker build -t image1 ./

 

2. 위에서 생성된 image를 이용하여 container 실행

docker run -d -p {원하는 port}:{docker port} --name {원하는 cotainer명} {사용할 image명}

docker run -d -p 8081:80 --name container1 image1

 

3. 만들어진 container 동작 확인

 

D. github 접근 token 생성

팀별 접근할 수 있는 token 생성

 

E. docker hub 접근 token 생성

회원가입 후 docker hub로 접근할 수 있는 token 생성

 

F. github webhook 생성

프로젝트 github 레포지토리 생성 및 푸시 후 settings > Webhooks

 

G. Jenkins 세팅

1. jenkins 접속 공인ip:포트 후 로그인
2 Manage Credentials 추가
Jenkins 관리 > Credentials > global 클릭 후 생성

팀별 접근할 수 있는 token 세팅

docker hub 접근 token

 

3. Jenkins 프로젝트 생성

Freestyle project 새로운 아이템 생성

echo $PASSWORD | docker login -u $USERNAME --password-stdin
docker build -t dev/testapi ./
docker push dev/testapi
docker rmi dev/testapi
echo $PASSWORD | docker login -u $USERNAME --password-stdin
sh deploy.sh

 

BIG