Jenkins 설치
sudo docker run -itd --name jenkins -p 8080:8080 -v /docker/jenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -e TZ=Asia/Seoul -u root jenkins/jenkins:lts
바로 명령어 실행하면 알아서 jenkins/jenkins:lts 버전 받아짐
# 이걸로 하는게 맞는듯?
sudo docker exec -it jenkins bash
sudo docker exec -it jenkins /bin/bash
cat /var/jenkins_home/secrets/initialAdminPassword
** 다른 방법으로 젠킨스 설치하고 싶을 떄
Error : 플러그인 설치 안됨(설치 버전이 낮아서 그럼)
1. 버전 낮아서 그런거니까 lts버전으로 설치해주면 된다
2. 혹은 이미 설치가 되어있어서 그런걸수도 있음
3. 로그보니까 java.net.SocketTimeoutException: connect timed out 라고 되어있는데 구글링해보니까 프록시 설정 문제라고 해서 안되는거 같은데
4. 진짜 집념으로 Retry 계속함(4시간 걸렸나?) -> 이걸로 해결함
서버 초기화하니까 짱 잘됨 너무 행복하다
** Java 삭제(ubuntu)
sudo apt-get remove openjdk*
sudo apt-get autoremove --purge
sudo apt-get audoclean
새로운 아이템 - Freestyle project - Git 레포지주소넣기 - 빌드브랜치설정
여기까지하면 128 에러뜰텐데 계정설정을 안해서 에러남 => Add 해서 git저장소 계정정보 넣어주면됨(Username, password 2개만)
플러그인에 gitlab이 확실하게 있는지 확인 필요
Comment (regex) for triggering a build 아래에 [고급] 클릭
[Gitlab - Settings - Webhooks]에서 방금 새로 만들었던 Secret token이랑 Jenkins URL을 넣어준다
Webhooks URL에 아래에 있는 저 주소로 넣어야함, 안하면 403 에러뜸
* 혹시 빌드 시간이 한국시간이 아니라면?
사용자 - 계정선택 - 설정 - Timezone 설정
근데 push해서 빌드 자동화는 설정했는데 어떤걸 빌드할진 설정을 안해줬잖아?
어떤 jdk나 nodejs를 가지고 프론트나 백을 빌드할껀지 설정을 안했기 때문에 jenkins한테 알려줘야함
[Jenkins 관리 - Global Tool Configuration]에서 설정함
JAVA_HOME은 Jenkins 서버 내부의 JAVA를 알아야하니까
docker exec -it jenkins bash
로 들어가서
echo $JAVA_HOME
git은 이미 플러그인으로 다운을 했을텐데 /usr/bin/git이 고정임
이 상태로 Build Test를 해보면
FAILURE: Build failed with an exception.
* What went wrong:
Directory '/var/jenkins_home/workspace/auctopus' does not contain a Gradle build.
....
이런 에러가 뜰텐데 '/var/jenkins_home/workspace/auctopus' 로 가보면 그 원인을 알 수 있다.
내 레포지터리의 문제는 프론트와 백을 같이 담고 있는데 backend폴더로 들어가야 gradle 관련 빌드를 할 수 있는데 거기로 못들어가서 그렇다
그렇다는건 FE(react)는 npm, BE(SpringBoot)는 gradle로 각각 따로 빌드해야되는데 이 설정을 어떻게 할까?
ITEM을 2개 만들고 각각 item 마다 빌드해야하는 폴더를 지정해야함
왼쪽과 같은 디렉터리 구조에 대해서 backend 폴더만 build를 해야하니까 경로를 지정함
add build step에서 Invoke Gradle script를 열고
[Invoke Gradle script - advanced - Root Build script]에서 'backend/' 라고 적어줬음
여기까지가 CI였음================
SSH 통신을 이용한 방법
그럼 CD를 해보자.
CD의 원리는 CI를 통해 build 후 .jar(springboot 배포파일)이 jenkins 서버 안에 존재하게 되는데 이 파일을 ssh 통신을 이용해서 우리가 받은 ec2 서버에 보내야한다.
그러면 먼저 ec2 서버 접속을 위한 ssh 환경설정을 해야하는데 Publish Over SSH 플러그인이 필수적으로 필요하다
플러그인을 정상적으로 설치했다면 [Manage Jenkins - Configure System] 에 들어가 아래로 내리다보면 Publish Over SSH 탭이 있을텐데 여기서 우리가 받은 서버의 설정을 해주면 된다
여기서 제일 중요한건 remote directory인데 서버에 들어가자마자 pwd를 하면 /home/ubuntu로 나오니까 이걸로 해주면되고 아래에 key는 우리가 받은 pem파일을 메모장으로 열어서 붙여주고
오른쪽 아래에 Test Configuration을 눌러 Success가 뜨면 성공적으로 연결 됨!
Error : 계속 docker: command not found가 뜬다면
sudo docker exec -it jenkins bash
apt-get update && apt-get install -y docker.io
도커 인 도커 방식을 이용해서 바로 배포 예정, 레포지터리에 DockerFile을 하나 만들어서 인식하게함
FROM openjdk:11-jdk
VOLUME /tmp
EXPOSE 8080
ARG JAR_FILE=build/libs/project-0.0.1-SNAPSHOT.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Seoul
RUN apt-get install -y tzdata
Error : pull access denied for auctopus/be, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
exec로 내부 들어가서 docker login 명령어를 입력하고 dockerhub 로그인을 해준다
아니면 image 명령어를 잘못해서 나오는거일수도
Execute shell
cd /var/jenkins_home/workspace/auctopus-be/backend
docker images
docker ps -a
docker stop backend
docker rm backend
docker rmi auctopus/be
docker images
docker ps -a
cat Dockerfile
docker build -t auctopus/be .
docker run -p 8081:8081 --name backend auctopus/be
'DevOps' 카테고리의 다른 글
[Jenkins] Jenkins로 SpringBoot/Django/React 배포하기 (ver.2) (1) | 2023.03.22 |
---|---|
[AWS] EC2 인스턴스(Ubuntu)에서 Docker 설치 (1) | 2023.03.13 |
[Jenkins] Jenkins로 nginx + react 빌드 및 배포하기 (1) | 2023.02.03 |
[AWS] EC2 Instance에 MariaDB 설정하기 (0) | 2023.01.26 |
AWS에 대해 (0) | 2022.12.06 |