ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

     

    [대표 이미지]

    https://www.jenkins.io/

    '인프라 > 젠킨스' 카테고리의 다른 글

    Docker와 Jenkins를 사용하여 CI/CD 구축 <2>  (1) 2024.01.13
Designed by Tistory.