본문 바로가기
[AWS-RDP]/CICD_DevOps

[배포성공][중요2][파라미터 설정][AWS] Mega Real-time End-to-End DevOps CI/CD Project | Git

by METAVERSE STORY 2023. 11. 20.
반응형
728x170

 
 
 

 
 
 
 
[1] ## 젠킨스 서버 생성
- 젠킨스 설치 스크립트 참고 (우분투)
https://github.com/vikash-kumar01/installation_scripts/blob/master/jenkins.sh

#!/bin/bash

sudo apt update -y

sudo apt upgrade -y 

sudo apt install openjdk-17-jre -y

curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee \
  /usr/share/keyrings/jenkins-keyring.asc > /dev/null
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
  https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
  /etc/apt/sources.list.d/jenkins.list > /dev/null
sudo apt-get update -y 
sudo apt-get install jenkins -y
 
 
- vi jes.sh 파일 생성

 
- sh jes.sh 실행으로 젠킨스 설치

 
 
 
 
 
 
[2] ## 넥서스 서버 생성 (15분) - 기본 8081 포트 사용
- 넥서스 설치 스크립트 확인

 
apt-get update -y

echo "Install Java"
apt-get install openjdk-8-jdk -y
java -version

echo "Install Nexus"
useradd -M -d /opt/nexus -s /bin/bash -r nexus
echo "nexus ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/nexus
mkdir /opt/nexus
wget https://sonatype-download.global.ssl.fastly.net/repository/downloads-prod-group/3/nexus-3.29.2-02-unix.tar.gz
tar xzf nexus-3.29.2-02-unix.tar.gz -C /opt/nexus --strip-components=1
chown -R nexus:nexus /opt/nexus

nano /opt/nexus/bin/nexus.vmoptions
```
https://www.howtoforge.com/how-to-install-and-configure-nexus-repository-manager-on-ubuntu-20-04/
```


```
docker run -d -p 8081:8081 --name nexus sonatype/nexus3
```
 
 
- 넥서스 nexus.vmoptions 설정 수정  ( ..  --> .  하나로 변경)

 
- 실행자 nexus 등록

 
- nexus 유저로 실행

 
 
 
 
[3] ## 소나큐브 설치를 컨테이너로 구동 --> 젠킨스 서버에 도커 설치  (22분)

#!/bin/bash
sudo apt update -y

sudo apt install apt-transport-https ca-certificates curl software-properties-common -y

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable" -y

sudo apt update -y

apt-cache policy docker-ce -y

sudo apt install docker-ce -y

#sudo systemctl status docker

sudo chmod 777 /var/run/docker.sock

 
- 도커 상태 확인 & docker info 확인

 
 
 
 
[4] ## 넥서스 리포지토리 설정   (23분) 
1) Create repository 클릭 --> maven2 (hosted) 선택
- Name : demoapp-release
- Version policy : Release
- Layout policy : Strict
- Deployment policy : Disable redeploy

 
 
2) 스냅샷 저장을 위한 저장소 추가 생성 - Create repository 클릭 --> maven2 (hosted) 선택 
- Name : demoapp-snapshot
- Version ploicy : Snapshot

 
 
 
 
 
[5] ## 젠킨스 서버에서 컨테이너로 소나큐브 설치
# INSTALL SONARQUBE
  
    docker run -d --name sonarqube -p 9000:9000 -p 9092:9092 sonarqube

- docker container ls 로 확인

 
  
 
 
 
 
[6] ## 테라폼으로 인프라 구성  (29분)

 
 
 
 
 
[7] ## 소나큐브 설정  (30분)  --> 소나큐브는 미사용으로 중간에 생략

 
1) 젠킨스와 웹훅 설정

 
- 젠킨스 내부IP 등록

 
 
2) 유저 시크릿 설정 - Security --> Users  --> 토큰 설정

 
 
 
 
 
 
[8] ## APP 소스가 있는 Github에서 배포할 yml 파일 생성  (37분)

 
1) deployment.yml 생성

kind: Deployment
apiVersion: apps/v1
metadata:
  name: mydeployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myspringbootapp
  template:
    metadata:
      labels:
        app: myspringbootapp
    spec:
      containers:
        - name: myspringbootapp
          image: vikashashoke/mydemoapplication:latest
          imagePullPolicy: Always
          ports:
            - containerPort: 9099
 
 
2) service.yml 생성

 
kind: Service
apiVersion: v1
metadata:
  name: myservice
  label:
    app: myspringbootapp
spec:
  selector:
    app: myspringbootapp
  type: LoadBalancer
  ports:
  - nodePort: 30036
    port: 80
    targetPort: 9099
 
 
 
 
3) jenkins-cd 생성

pipeline{

    agent any

    stages{
        stage('git checkout'){
            steps{
                git branch: 'main', url: 'https://github.com/dhrbduf/demo-counter-app.git' 
            }

        }

    }

}

- 생성한 Git 소스 푸쉬방법   (작성한 jenkins-cd 파일 업로드 되었는지 확인)
   : git add .
   : git commit -m "git checkout"
   : git push origin

 
 
 
 
 
[9] ## 젠킨스 서버에서 파이프라인 생성  (43분)
- demoapp-cd (EKS 배포 테스트용)
   : jenkins-cd 스크립트 연동

 
1) 초기 빌드 성공 (git checkout)

 
 
2) 2차 빌드 성공 (git checkout - 파라미터 적용)

pipeline{

    agent any

    parameters{
        choice(name: 'action', choices: 'create\ndestory\ndestoryekscluster', description: 'Create/Update or destory the eks cluster')
    }


    stages{
        stage('git checkout'){
            steps{
                git branch: 'main', url: 'https://github.com/dhrbduf/demo-counter-app.git' 
            }

        }

    }

}

 
 
 
 
 
3) 3차 빌드 성공 (git checkout - 파라미터 적용 - EKS 연동 설정)

 
- aws --version
- aws sts get-caller-identity  
- aws eks --region 
region update-kubeconfig --name cluster_name

 
 
3-1) 젠킨스에 EKS용 자격증명 생성
- aws_access_key_id
- aws_secret_access_key

 
3-2) jenkins-cd 파일에 EKS 연동설정 적용

 
pipeline{

    agent any

    parameters{
        choice(name: 'action', choices: 'create\ndestory\ndestoryekscluster', description: 'Create/Update or destory the eks cluster')
        string(name: 'cluster', defaultValue: 'OKY-DEV-EKS-Cluster', description: 'EKS Cluster Name')
        string(name: 'region', defaultValue: 'ap-northeast-2', description: 'EKS Cluster Region')
    }

    environment{
        ACCESS_KEY = credentials('aws_access_key_id')
        SECRET_KEY = credentials('aws_secret_access_key')
    }

    stages{
        stage('git checkout'){
            steps{
                git branch: 'main', url: 'https://github.com/dhrbduf/demo-counter-app.git' 
            }
        }

        stage('EKS Connect'){
            steps{
                sh """
                    aws configure set aws_access_key_id "$ACCESS_KEY"
                    aws configure set aws_secret_access_key "$SECRET_KEY"
                    aws configure set region ""
                    aws eks --region ${params.region} update-kubeconfig --name ${params.cluster}
                """;

            }
        }
    }
}

 
 
 
4) 4차 빌드 성공 (git checkout - 파라미터 적용 - EKS 연동 설정 - EKS Deployment & Service)

 
 
4-1) kubectl 실행 파일 설정 필요 (에러 발생)

 
- kubectl 실행파일 설치 (수동으로 Install Kubectl utility 만 설치)

https://github.com/vikash-kumar01/installation_scripts/blob/master/minikube.sh
#!/bin/bash


sudo apt-get update -y

sudo apt-get install curl wget apt-transport-https virtualbox virtualbox-ext-pack -y

echo "1st install docker"

sudo apt update && apt -y install docker.io

sudo systemctl start docker
sudo systemctl enable docker
sudo chmod 666 /var/run/docker.sock

echo "Apply updates"
sudo apt update -y 
sudo apt upgrade -y

echo " Download Minikube Binary"
wget https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo cp minikube-linux-amd64 /usr/local/bin/minikube
sudo chmod +x /usr/local/bin/minikube
minikube version


echo "Install Kubectl utility"
curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
kubectl version -o yaml


echo "Start the minikube"
minikube start 
minikube status

 

## 에러 발생시 다운그레이드 할것!!

error: exec plugin: invalid apiVersion "client.authentication.k8s.io/v1alpha1" 버전 이슈

https://blog.leedoing.com/239
 
 
 
4-2) service.yml 파일 오타 (kind: kind:  --> kind:)

 
 
 
4-3) service.yml 파일 오타 (label  --> labels)

 
error: error validating "service.yml": error validating data: ValidationError(Service.metadata): unknown field "label" in io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta; if you choose to ignore these errors, turn validation off with --validate=false
 

 
 
- kubectl get all  (Deployment & Service 까지 성공)

 
 

 
 
 
 
 
4) 5차 빌드 성공 (git checkout - 파라미터 적용 - EKS 연동 설정 - EKS Deployment & Service - EKS 삭제)

 
pipeline{

    agent any

    parameters{
        choice(name: 'action', choices: 'create\ndestory\ndestoryekscluster', description: 'Create/Update or destory the eks cluster')
        string(name: 'cluster', defaultValue: 'OKY-DEV-EKS-Cluster', description: 'EKS Cluster Name')
        string(name: 'region', defaultValue: 'ap-northeast-2', description: 'EKS Cluster Region')
    }

    environment{
        ACCESS_KEY = credentials('aws_access_key_id')
        SECRET_KEY = credentials('aws_secret_access_key')
    }

    stages{
        stage('git checkout'){
            steps{
                git branch: 'main', url: 'https://github.com/dhrbduf/demo-counter-app.git' 
            }
        }

        stage('EKS Connect'){
            steps{
                sh """
                    aws configure set aws_access_key_id "$ACCESS_KEY"
                    aws configure set aws_secret_access_key "$SECRET_KEY"
                    aws configure set region ""
                    aws eks --region ${params.region} update-kubeconfig --name ${params.cluster}
                """;

            }
        }

        stage('EKS Deployments'){
            when { expression { params.action == 'create'}}
            steps{
                script{
                    def apply = false
                    try{
                        input message: 'Please Confirm the apply to initiate the deployments', ok: 'Ready to apply the config'
                        apply = true
                    }
                    catch(err){
                        apply = false
                        CurrentBuild.result= 'UNSTABLE'
                    }
                    if(apply){
                        sh """
                            kubectl apply -f .
                        """;
                    }
                }
            }
        }
        stage('Delete Deployments'){
            when { expression { params.action == 'destory'}}
            steps{
                script{
                    def destory = false
                    try{
                        input message: 'Please Confirm the destory to delete the deployments', ok: 'Ready to destory the config'
                        destory = true
                    }
                    catch(err){
                        destory = false
                        CurrentBuild.result= 'UNSTABLE'
                    }
                    if(destory){
                        sh """
                            kubectl delete -f .
                        """;
                    }
                }
            }
        }
    }
}

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
https://www.youtube.com/watch?v=MpRd_nJEx_8

 
https://github.com/vikash-kumar01/demo-counter-app

 

GitHub - vikash-kumar01/demo-counter-app

Contribute to vikash-kumar01/demo-counter-app development by creating an account on GitHub.

github.com

 
 

반응형
그리드형

댓글