Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

우당탕탕 개발일지

CI/CD 파이프라인 - GCP를 통한 Jenkins CI 구축 본문

Cloud

CI/CD 파이프라인 - GCP를 통한 Jenkins CI 구축

YUDENG 2023. 10. 30. 23:49
CI(Continuous   Integration)란?

CI는 어플리케이션의 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트 되어 공유 레포지토리에 통합하는 것을 의미한다. 즉, 개발 및 테스트를 자동화한다.

 

CD(Continuous Delivery & Continuous Deployment)란?

CD는 지속적 제공(Continuous Delivery) 혹은 지속적 배포(Continuous Deployment) 두 용어 모두의 축약어이다. 지속적 제공은 공유 레포지토리로 자동으로 Release 하는 것, 지속적 배포는 프로덕션 레벨까지 자동으로 deploy 하는 것을 의미한다. 즉, 개발자의 변경 사항이 레포지토리를 넘어, 고객의 프로덕션 환경까지 릴리즈 되는 것을 의미한다.

 

CI/CD 파이프라인

CI/CD (Continuous Integration/Continuous Delivery) 파이프라인은 소프트웨어를 효과적으로 빌드, 테스트하고 배포하기 위한 자동화된 프로세스이다.

CI/CD 파이프라인 요소

 

젠킨스(Jenkins)

소프트웨어 개발 시 지속적으로 통합 서비스를 제공하는 CI 툴이다. 다수의 개발자들이 하나의 프로그램을 개발할 때 버전 충돌을 방지하기 위해 각자 작업한 내용을 공유 영역에 있는 저장소에 빈번히 업로드함으로써 지속적 통합이 가능하도록 해준다.

 

젠킨스 특징
젠킨스는 Java Runtime Environment에서 동작한다. 거의 모든 환경에 사용할 수 있도록 다양한 플러그인을 추가해 원하는 형태를 만드는 블록 방식으로 구성되어 있다. 

 

젠킨스 장점

- 다양한 플러그인
- IDE 지원
- 많은 사용자와 많은 문서

 

젠킨스 설정 관리

젠킨스는 컨트롤러와 에이전트 형태로 구성한 다음 배포해야 하며 이곳에 필요한 설정을 모두 넣어야 한다. 동적인 변경사항을 간편하고 빠르게 저용할 수 있게 도와 주는 도구로 커스터마이즈와 헬름이 있다.

 

GCP 프로젝트 초기 설정

1. GCP 프로젝트 생성 및 설정

프로젝트 이름 : Soldesk Project1

2. 저장소 만들기

https://source.cloud.google.com/repos

3. API 사용 설정하기

- Kubernetes Engine API

- Google Container Registry API

- Cloud Build API

 

4. VM 인스턴스 생성(CentOS 7)

5. SSH 연결

 

애플리케이션 실행 환경 구축

1. 패키지 설치하기

# sudo yum -y install wget
# sudo yum -y install git

 

1-1. Java 설치

// java 버전 확인
# yum list java*jdk-devel
// java 11 설치
# sudo yum -y install java-11-openjdk-devel.x86_64
// 설치 확인
# java -version
# javac -version

 

1-2. Gradle 설치

# wget https://services.gradle.org/distributions/gradle-7.4.1-bin.zip
# sudo mkdir /opt/gradle
# sudo yum -y install unzip
# sudo unzip -d /opt/gradle gradle-7.4.1-bin.zip

 

2. Gradle 환경변수 설정

2-1. 스크립트 작성
# sudo vi /etc/profile.d/gradle.sh

export GRADLE_HOME=/opt/gradle/gradle-7.4.1
export PATH=${GRADLE_HOME}/bin:${PATH}

2-2. 실행 권한 변경
# sudo chmod +x /etc/profile.d/gradle.sh
# source /etc/profile.d/gradle.sh

2-3. 설치 확인
# gradle -v

 

3. 공개키/비밀키 생성

# ssh-keygen -t rsa

3-1. 메타데이터에 등록
Computer Engine > 설정 > 메타데이터

# cd .ssh
# cat id_rsa.pub

4. 젠킨스 설치

# 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 -y install jenkins

 

5. 젠킨스 실행

# sudo systemctl start jenkins
# sudo systemctl status jenkins

6. 방화벽 규칙 설정

- 이름: jenkins-web
-  tcp : 8080

7. 젠킨스 연결

Jenkins URL => http://{외부 IP}:8080

7-1. 관리자 초기 비밀번호 입력
sudo cat /var/lib/jenkins/secrets/initialAdminPassword

7-2. Install suggested plugins 선택

7-3. 관리자 계정 설정

8. 젠킨스 설정

8-1. 플러그인 설치
Jenkins 관리 > Plugins

1) Publish Over SSH
2) Git plugin
3) deploy to container

 

8-2. Gradle 설정
Jenkins 관리 > Tools

9. Credentials 설정

Jenkins 관리 > Credentials > System > Global credentials

Kind : (Username with password)
Username : (깃허브 아이디)
Password : (깃허브 토큰)

10. 깃허브 웹훅 설정

Payload URL : http://{외부IP}:8080/github-webhook/
Content type : application/json

11. 파이프라인 구축

11-1. 빌드 트리거 설정

11-2. 스니펫 생성

11-3. 스니펫 복사

11-4. 파이프라인 스크립트 작성

pipeline {
    agent any

    stages {
        stage('github clone') {
            steps {
                git branch: 'main', credentialsId: 'cffc2de2-9bc1-4fc1-8046-bfa7645eee32', url: 'https://github.com/TirTir/hama-server.git'
                
            }
        }
           
        stage('build'){
            steps {
                sh '''
                echo build start
                chmod +x ./gradlew # Adds execute permission to gradlew
                ./gradlew clean bootJar
                '''
            }
        }
    }
}

12. 빌드 확인

728x90

'Cloud' 카테고리의 다른 글

모니터링 구축  (2) 2024.01.05
Linux Git  (0) 2023.12.12
테라폼 3-Tier 아키텍처 구축(2) - VPC, EC2  (1) 2023.11.26
테라폼 3-Tier 아키텍처 구축(1) - 보안그룹  (0) 2023.11.26
테라폼 개발 환경 준비  (1) 2023.11.26