위에 까지 잘 들어오셨나요!!
하지만 먼저 확인할 사항들이 있어요!!
sudo 권한및 root권한을 소유한 계정에서 설치를 진행해야 한답니다.
또한 최신 배포판 OS인지 확인해야되요
22년 8월 기준 22.04, 21.10, 20.04, 18.04를 지원합니다
또한 32bit 운영체제에서는 돌아가지 않습니다.
그리고 아래에서 프로젝트 빌드 방법은 백엔드 프론드엔드 repo가 하나씩 있다는 가정하에 진행하겠습니다.
(만약 MSA환경을 구축한다고 repo가 여러개라면, free style보다는 다른 방법들을 추천드려요)
그럼 ubuntu@ip - 키 상태에서
패키지를 설치합니다.
sudo apt update
sudo apt-get install -y ca-certificates \
curl \
software-properties-common \
apt-transport-https \
gnupg \
lsb-release
도커를 설치하기 위해서 gpg key를 다운 받습니다. 왜냐하면 리눅스 패키지 툴이 패키지가 유효한지 확인하기 위해 gpg키를 검증하기 때문입니다.
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update로 최신화를 진행하고 나서 docker-compose를 설치합니다.
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose
이제 젠킨스를 설치해 보겠습니다.
docker-compose를 통해서 젠킨스 컨테이너를 생성합니다.
vim docker-compose.yml
docker-compose.yml파일은 아래와 같이 구성합니다.
version: '3'
services: # 컨테이너 서비스
jenkins: # 서비스 이름
image: jenkins/jenkins:lts # 가져와서 사용할 이미지
container_name: jenkins # 컨테이너 이름
volumes: # 어디에 연결할지 aws의 /var/run/docker.sock와 컨테이너 내부의 /var/run/docker.sock연결
- /usr/bin/docker:/usr/bin/docker
- /var/run/docker.sock:/var/run/docker.sock
- /jenkins:/var/jenkins_home # /jenkins폴더와 /var/jenkins_home폴더를 연결한다.
ports:
- "9090:8080" # aws의 9090과 컨테이너의 8080연결
privileged: true # 컨테이너 시스템의 주요자원과 연결할수 있게 하는 것
user: root # 젠킨스에 접속할 계정(root는 관리자) -> 사용자로 하는게 안정적
sudo docker-compose up -d
docker-compose를 데몬으로 설치합니다.
localhost:9090으로 접속하면 jenkins화면이 뜨는것을 확인할수 있습니다.
이후
sudo docker logs jenkins
명령어로 받은 비밀번호를 jenkins에 입력해줍니다.
다음으로
Install suggested plugins를 클릭
플러그인으로 들어가서
#gitlab에서 gitlab, generic webhook trigger, gitlab api, gitlab authentication
#docker에서 docker, docker commons, docker pipeline, docker api
#ssh에서 public over ssh
설치합니다.
jenkins의 새로운 item에서 freestyle project를 설치하고 소스코드 관리를 통해 관리합니다.
url은 관리할 gitlab url(uri아니예요!!) branch에서 관리할 branch(여기서 branch에 merge또는 push를 할경우 자동 배포됩니다.)
credentials에서 username과 password를 입력하고 id는 credenitcal을 구분할 텍스트를 임의로 입력합니다.
이후 빌드유발에서 build when a change is pushed ~에 클릭하세요. gitlab에서 받아온 secret token을 받아 입력하면 완료됩니다.
빌드에서는 execute shell을 만들고 거기에는 배포환경을 입력하게 됩니다.
docker build -t backimg ./testproject/frontend
if (docker ps | grep "backimg"); then docker stop backimg; fi
docker run -it -d --rm -p 5000:5000 --name backimg backimg
echo "Run testproject"
docker build -t frontimg ./testproject/backend
if (docker ps | grep "frontimg"); then docker stop frontimg; fi
docker run -it -d --rm -p 80:80 --name frontimg frontimg
echo "Run testproject_vue"
저는 뷰와 스프링을 썻는데 뷰는 80포트로 nginx와 연결하고, 스프링은 5000포트로 연결했습니다.
(이때 톰켓이 5000포트로 변경해줘야 하는데 확인해보세요... 저는 여기서 콘솔찍어 겨우 발견했답니다...)
프론트부와 백엔드 부에 도커 파일을 만들고
해당 도커 파일은 만드는 프로젝트마다 다르니 찾아주세요..
vue의 도커 파일
FROM node:16.15.0 as build-stage
WORKDIR /var/jenkins_home/workspace/deploytest/frontend
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /var/jenkins_home/workspace/deploytest/testproject/frontend/build /usr/share/nginx/html
COPY --from=build-stage /var/jenkins_home/workspace/deploytest/testproject/frontend/deploy_conf/nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g","daemon off;"]
nginx를 위한 conf파일은
upstream backend{
ip_hash;
server {private_url}:8080;
}
server {
listen 80;
listen [::]:80;
server_name {server domain name};
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /api {
proxy_pass http://backend/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
참고자료 : https://github.com/hjs101/CICD_manual/tree/main/%EB%A7%A4%EB%89%B4%EC%96%BC%20v2
'CI&CD > Docker' 카테고리의 다른 글
Forward Proxy와 Reverse Proxy란? (31) | 2024.05.03 |
---|---|
AWS에서 Docker 위에 Jenkins 설치(1) - docker설치 이유 및 docker설치하기 (2) | 2023.01.28 |