25/11/06 CI/CD 3

344th·2025년 12월 11일

AWS AI

목록 보기
44/48

kube-node1 에 톰캣 설치 후 배포

$ sudo apt update
$ sudo apt install -y tomcat9 tomcat9-admin
$ systemctl status tomcat9

jenkins 가 tomcat9 으로 원격 배포

Tomcat Manager API를 사용하기 위한 계정 설정

**$ sudo vim /etc/tomcat9/tomcat-users.xml
...**
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="admin" password="P@ssw0rd" roles="manager-gui, manager-script, manager-jmx, manager-status"/>
</tomcat-users>

외부에서 tomcat에 배포를 위한 권한을 갖는 사용자 설정

tomcat9 서비스 시작

$ sudo systemctl start tomcat9

$ systemctl status tomcat9.service
● tomcat9.service - Apache Tomcat 9 Web Application Server
     Loaded: loaded (/lib/systemd/system/tomcat9.service; enabled; vendor p>
     Active: active (running) since Thu 2025-11-06 01:16:48 UTC; 4min 36s a>
       Docs: https://tomcat.apache.org/tomcat-9.0-doc/index.html
    Process: 2081246 ExecStartPre=/usr/libexec/tomcat9/tomcat-update-policy>
   Main PID: 2081250 (java)
      Tasks: 34 (limit: 2908)
     Memory: 113.1M
        CPU: 20.397s
     CGroup: /system.slice/tomcat9.service
             └─2081250 /usr/lib/jvm/default-java/bin/java -Djava.util.loggi>

http://192.168.56.21:8080/

admin 페이지 접속

http://192.168.56.21:8080/manager/html

위에서 설정해준 아이디, 비밀번호

<user username="admin" password="P@ssw0rd" roles="manager-gui, manager-script, manager-jmx, manager-status"/>

jenkins가 tomcat에 .war 파일을 자동으로 올리는 기능을 가진 플러그인 설치

젠킨스 접속 192.168.56.11:8080

Jenkins 관리 → plugins → Available Plugins

deploy to container 설치

자격증명 구성

jenkins가 tomcat에 접근하기 위한 로그인 정보 등록

second에서 구성으로 이동 후 build settings에서 설정

빌드

http://192.168.56.21:8080/hello-world

404 not found 에러시 파일 수정

$ sudo vim /var/lib/jenkins/workspace/second/src/main/webapp/index.jsp
hello world

$ sudo chown jenkins:jenkins /var/lib
/jenkins/workspace/second/src/main/webapp/index.jsp

직접 만든 index.jsp는 github, jenkins와 상관 없는 내용

tomcat이 war 파일을 언팩을 진행할 때 다음 중 하나를 선택

  • war 파일만 새롭게 넣고 기존 폴더는 놔두는 방식
  • 기존 폴더를 삭제하고 war를 다시 풀어내는 방식

jenkins?

jenkins는 단순 빌드만 하는 도구가 아님

CI/CD 지속적 배포를 하기 위한 도구

지속적 배포를 위해서는 파이프라인이 필요

소스코드를 가져와서 빌드 -> 테스트 -> 배포 과정을 Jenkinsfile로 표현한 것(자동화 스크립트)

  • 모든 작업은 파일로 표현됨
  • git과 함께 관리되므로 협업용
  • 사람이 클릭하는 GUI를 전부 코드로 표현

파이프라인

왜 사용하는가?

  • 코드 편집, 검토 및 반복 기능 제공
  • 내구성 향상 (jenkins 컨트롤러에 구애X)
  • 일시 중지 및 승인 대기 가능
  • 조건분기 및 반복 작업 기능 지원
  • DSL 및 타 플러그인에 대한 통합 및 확장 지원

파이프라인 용어

  • pipeline: 빌드 - 테스트 - 배포 단계를 포함하는 전체 프로세스 정의
  • stages: 파이프라인을 실행할 수 있는 시스템 (스크립트방식)
  • stage: 수행할 작업의 집합
  • step: 단일 작업

문법

실질적인 파일 작성 시의 문법 알아보기

일단 최상위 개체로써 항상 설정하는 pipeline 블록이 있으며 그 아래 섹션과 지시어를 소개

섹션

  • agent
    • 필수 항목
    • 최상위 혹은 각 stage 블록마다 설정
    • 작업 실행 대상 지정
  • post
    • 선택항목
    • 최상위 혹은 각 stage 블록마다 설정
    • 이전 작업에 대한 재실행 (조건에 따른 실행)
  • stages
    • 필수 항목
    • pipeline 내에 오직 하나 설정
    • 하나 이상의 stage 포함
    • 실행할 작업들의 집합
  • steps
    • 필수 항목
    • 각 stage 마다 하나 이상 설정
    • 단일 작업 단위

지시어

  • environment
    • 선택 항목
    • 최상위 혹은 stage 블록마다 설정 가능
    • 키=값 형태로 정의
    • 자격증명 지원 (secret 텍스트 및 파일 / 사용자와 패스워드 / ssh키)
    • 파일 지정 후 각 작업에서 변수값으로 활용
  • options
    • 선택 항목
    • pipeline 블록에서 한 번 지정 혹은 stage 단위로 지정
    • 각종 옵션 설정 가능
    • 지정 위치에 따라 가능 옵션이 달라짐
  • parameters
    • 선택 항목
    • pipeline 블록에서 한 번 지정
    • 문자열 / 부울 / 리스트 / 시크릿 사용 가능
  • triggers
    • 선택 항목
    • pipeline 블록에서 한 번 지정
    • 해당 파이프라인 작업 주기 지정
    • cron / pollSCM / upstream 방식 가능
  • stage
    • 적어도 하나 필요
    • stages 섹션 내에 정의
    • steps 지시문 필수 포함
    • agent 섹션이 포함될 수 있음
  • tools
    • 선택 항목
    • pipeline 블록 또는 stage 블록 내에 설정
    • 사용할 도구 지정 (maven / jdk / gradle)
  • when
    • 선택 항목
    • stage 지시어 내부에 설정
    • 해당 작업에 대한 조건 지정

레포 생성 및 세팅

파일 업로드 후 커밋

파이프라인 입력 예제

pipeline {
  agent any

  triggers {
    pollSCM('* * * * *')
  }

  stages {
    stage('Checkout') {
      steps {
        git branch: 'main', 
        url: '<URL>'
      }
    }
    stage('Build') {
      steps {
        sh 'mvn clean package'
      }
    }
    stage('Deploy') {
      steps {
        deploy adapters: [tomcat9(credentialsId: 'tomcatmanager', url: 'http://192.168.56.22:8080')], contextPath: null, war: 'target/hello-world.war'
      }
    }
  }
}

kube-node2

git 설치

$ sudo apt update

$ sudo apt install -y git-all

톰캣 설치 및 관리자 계정 세팅

위 참고

$ git config --global user.name dltnals1210
$ git config --global user.email dltnalstnals14@gmail.com
$ mkdir maven
$ cd maven/
$ git init

$ git remote add origin https://github.com/dltnals1210/source-maven-java-spring-hello-webapp.git

$ git pull origin main
$ vim Jenkinsfile
pipeline {
        agent any

        triggers {
                pollSCM('* * * * *')
        }

        stages {
                stage('Checkout') {
                        steps {
                                git branch: 'main',
                                url: 'https://github.com/dltnals1210/source-maven-java-spring-hello-webapp.git'
                        }
                }
                stage('Build') {
                        steps {
                                sh 'mvn clean package'
                        }
                }
                stage('Deploy') {
                        steps {
                                deploy adapters: [tomcat9(credentialsId: 'tomcatmanager', url: 'http://192.168.56.22:8080')], contextPath: null, war: 'target/hello-world.war'
                        }
                }
        }
}
$ git add .

$ git commit -m "my first pipeline"

$ git push -u origin master

파이프라인 생성

$ vim src/main/webapp/index.jsp
hello world
$ git add .

$ git commit -m "index.jsp"

$ git push -u origin master

pr 생성 후 머지

profile
새싹 개발자

0개의 댓글