[LG CNS AM Inspire CAMP 1기] MSA (16) - Public Cloud 배포

니니지·2025년 3월 26일

LG CNS AM Inspire Camp 1기

목록 보기
47/47

1. 보안 그룹에서 Jenkins 포트 추가

2. EC2에 Jenkins 설치



위의 방식은 sudo yum install jenkins 이 안되는데
키와 젠킨스, 이미지의 자바 버전이 안맞는 문제가 있다고 함.

sudo yum upgrade
sudo yum install java-17-amazon-corretto-devl -y 
sudo alternatives --config java
번호 지정
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
sudo yum install jenkins -y
sudo systemctl enable jenkins  # 부팅 시 자동 실행 설정
sudo systemctl start jenkins   # Jenkins 실행
sudo systemctl status jenkins
rpm -qa | grep jenkins

- 오류 발생 시 확인

PID 입력하면 됨. journalctl -xe | grep 12641

3. Jenkins 접속

publicIP:8080 -> PW 는 저널리스트 검색했을 때 나오는 암호 입력 또는 아래 실행.


안되면 보안 그룹에 포트 추가 / jenkins running 여부 확인.




4. Tools 연결



5. 플러그인 설치

깃허브, publish over ssh, deploy to container, maven itegration

6. 도커서버 (ec2) 생성

키와 보안 그룹 맞춰주기.

7. 젠킨스에서 ssh 서버 추가

도커 서버의 public IPv4를 호스트네임에 추가, pem key 를 key 에 붙여넣기

8. 아이템 생성 후 빌드

9. Docker-server 연동



Dockerfile 을 만든다.

10. pipeline 으로 변경

pipeline {
  agent none
  tools {
      maven "maven3.8.8"
  }
  stages {
    stage('Maven Install') {
      agent any
      when {
        expression { params.MAVEN_BUILD == true }
      }
      steps {
        git branch: 'main', url: 'https://github.com/joneconsulting/cicd-web-project'
        sh 'mvn clean compile package -DskipTests=true'
      }
    }
    stage('Docker Image Build') {
      agent any
      when {
        expression { params.DOCKER_BUILD == true }
      }
      steps {
          script {
            if (params.DOCKER_IMAGE_TAG != "") {
                echo "[docker image tag is not null]"
                imageTag = params.DOCKER_IMAGE_TAG
            } else {
                echo "[docker image tag is null]"
                imageTag = env.BUILD_NUMBER
            }
          }
                    
          // sh 'docker build -t edowon0623/cicd-web-project:$BUILD_NUMBER .'
          // sh 'docker build -t edowon0623/cicd-web-project:' + imageTag + ' .'
          // echo 'docker build -t edowon0623/cicd-web-project:build-' + imageTag + ' .'
          sshPublisher(publishers: [
                    sshPublisherDesc(configName: 'toy-msa-docker',
                                    transfers: [sshTransfer(
                                        cleanRemote: false, excludes: '', 
                                        execCommand: 'docker build --tag hello-world:' + imageTag + ' -f Dockerfile . ', 
                                        execTimeout: 600000, flatten: false, makeEmptyDirs: false,
                                        noDefaultExcludes: false, patternSeparator: '[, ]+', 
                                        remoteDirectory: '.', remoteDirectorySDF: false, 
                                        removePrefix: 'target', 
                                        sourceFiles: 'target/*.war')
                                    ], 
                    usePromotionTimestamp: false, 
                    useWorkspaceInPromotion: false, 
                    verbose: false)
                ])
      }
    }
    // stage('Docker Push') {
    //   agent any
    //   when {
    //     expression { params.DOCKER_PUSH == true }
    //   }
    //   steps {
    //     withDockerRegistry(credentialsId: 'harbor-user', url: 'https://192.168.0.41') {
    //       sh 'docker push 192.168.0.41/devops/cicd-web-project:$BUILD_NUMBER'
    //     }
    //   }
    // }
  }
}


11. Amazon ECR

- 레지스트리 -> 리포지토리 생성


- 푸시 명령 보기


- 이미지 결과 확인

docker pull [이미지uri] -> aws configure 및 private 인 경우엔 레포 권한 있으면 가능

- 젠킨스 파이프라인 연동

ssh 로 해도 됨.

12. ECS (Elastic Container Service)

- 이미지 run

도커서버에서 진행


- 태스크 정의



- 클러스터

- 서비스



네트워킹에서 VPC (우선 디폴트로 두기), 보안 그룹 확인, 퍼블릭 IP 켜짐 설정.

퍼블릭 IP 로 접근 (클러스터> 태스크> 서비스 클릭 > 구성)

- 로드 밸런서


네크워킹 확인 후 로드밸런싱 사용 체크,
네크워킹과 로드밸런싱의 VPC 일치시켜야 함.
ALB 와 NLB 중 ALB로 체크 (설명은 OSI 7계층 참고)
새 로드밸런서 생성 (ECS 에서 생성 후 지정 가능)

/hello-world/ 는 /actuator/status 와 같은 /catalog-service/health-check라고 보면 됨.

로드밸런서 > 보안 > 인바운드 규칙에 포트 있어야함 (8080)

profile
지니니

0개의 댓글