-
Docker와 Jenkins를 사용하여 CI/CD 구축 <1>인프라/젠킨스 2024. 1. 8. 18:36
학습 내용
젠킨스 사용을 위해서 이런 저런 책과 유뷰브 영상을 찾아보고 직접 적용을 해보겠습니다.
깃에 push가 발생하면 젠킨스가 작동해서 도커 hub에 새로운 이미지를 업로드합니다.
또 작업내용을 slack에서 메세지로 받아봅니다.
step1:
웹서버 및 젠킨스 서버 배포
step2:
깃 코드 변경 > 새로운 이미지 빌드 > 도커 허브 갱신 > 신규 이미지로 서버 재배포
1. git Repo 생성
실제로 작업을 하는 컴퓨터에서 스프링 부트 서버를 생성합니다.
$ spring init --dependencies=web myserver
static 폴더에 index.html을 추가해서 서버가 잘 작동하는지 확인해줍니다.
앞으로 이 인덱스를 수정하면서 젠킨스를 학습할 예정입니다.
생성한 프로젝트를 깃에 repo에 올려줍니다.
2. 도커 Repo 생성
도커 파일을 작성합니다.
# 첫번째 스테이지 시작 FROM eclipse-temurin:17-jdk as builder # 컨테이너의 작업 경로 설정 WORKDIR /workspace/app # 호스트에서 빌드된 파일을 컨테이너로 복사 COPY ./gradlew /workspace/app/ COPY ./settings.gradle /workspace/app/ COPY ./build.gradle /workspace/app/ COPY ./gradle /workspace/app/gradle/ COPY ./src /workspace/app/src/ # 빌드 실행 RUN /workspace/app/gradlew build RUN mv /workspace/app/build/libs/myweb-0.0.1-SNAPSHOT.jar /workspace/app/app.jar # 두번째 스테이지 시작 FROM eclipse-temurin:17-jre as runner # 각 스테이지는 별도의 환경이기 때문에 다시 선언 WORKDIR /workspace/app # 이전 스테이지에서 jar파일 복사 COPY --from=builder /workspace/app/app.jar /workspace/app/app.jar # 컨테이너 실행시에 app.jar를 실행 ENTRYPOINT ["java","-jar","app.jar"]
위 도커 파일로 이미지를 생성하고 컨테이너에서 서버가 잘 작동하는지 확인합니다.
$ docker build -t webserver . $ docker run -it -p 8090:8080 webserver
잘 작동한다면 허브에 올리기전에 태그를 진행합니다
$ docker images
<username>에는 도커hub의 유저이름을 입력해줍니다.
$ docker tag webserver:latest <username>/webserver:latest
도커 레포지토리에 push를 진행합니다.
$ docker login $ docker push <username>/webserver:latest
Repository가 생성된 것을 확인할 수 있습니다.
배포를 하려고 보니 M1 Mac에서 빌드한 이미지를 x86에서 사용할 수 없었습니다.
Arm 아키텍처에서 amd64용 이미지 빌드하는 방법입니다.
# 빌드 인스턴스 생성
$ docker buildx create --name amd64_builder
# 빌드 인스턴스 실행
$ docker buildx use amd64_builder --bootstrap
# 이미지 빌드 or 빌드 후 푸시
$ docker buildx build --platform linux/amd64 -t your-image-name:your-tag .
or
$ docker buildx build --platform linux/amd64 --push -t [도커허브 사용자명]/[이미지 이름]:[태그] .
3. 서버 배포
ec2 혹은 컨테이너 환경에서 2번에서 업로드한 이미지를 사용해서 서버를 배포합니다.
$ docker run -it -p 8070:8080 <username>/webserver:1.0.0
4. 젠킨스 서버 실행
이제 CI/CD 설정을 위해서 또 다른 컨테이너에 젠킨스를 띄우겠습니다.
$ docker run -p 8060:8080 -p 50000:50000 --name jenkins -d jenkins/jenkins:lts
초기화용 비밀번호를 입력해줘야합니다.
$ docker logs jenkins
중간에 있는 비밀번호를 입력해주면 아래와 같은 페이지가 나옵니다.
plugins 설치를 진행합니다.
유저 설정해줍니다.
이 화면이 보이면 설치 완료입니다.
5. Plugin 설치
Blue Ocean을 설치해줍니다.
( 블루오션은 GUI 기반으로 젠킨스를 쉽게 사용할 수 있도록 해주는 plugin )
다음은 Docker와 Docker Compose Build Step 을 설치해줍니다.
모두 설치 완료하고 BlueOcean에 들어가서 아래와 같은 화면이 보이면 설치완료입니다.
지금까지 CI/CD를 위한 서버 세팅을 진행하였습니다.
다음글에서 젠킨스 설정을 진행해보겠습니다.
[참고]
https://www.youtube.com/watch?v=f4idgaq2VqA&ab_channel=freeCodeCamp.org
[대표 이미지]
'인프라 > 젠킨스' 카테고리의 다른 글
Docker와 Jenkins를 사용하여 CI/CD 구축 <2> (1) 2024.01.13