1. Jenkins install

<aside>

wget -O /usr/share/keyrings/jenkins-keyring.asc \\
  <https://pkg.jenkins.io/debian/jenkins.io-2023.key>

echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \\
  <https://pkg.jenkins.io/debian> binary/" | sudo tee \\
  /etc/apt/sources.list.d/jenkins.list > /dev/null

sudo apt update
sudo apt install -y jenkins
------------------------------------------

docker
------
sudo docker run -d \\
  --name jenkins \\
  --restart unless-stopped \\
  --user root \\
  -p 8080:8080 -p 50000:50000 \\
  -v /var/run/docker.sock:/var/run/docker.sock \\
  -v /usr/bin/docker:/usr/bin/docker \\
  -v /usr/local/bin/kubectl:/usr/local/bin/kubectl \\
  -v /usr/local/bin/argocd:/usr/local/bin/argocd \\
  -v /home/ubuntu/jenkins_home:/var/jenkins_home \\
  jenkins/jenkins:lts 

-v /home/ubuntu/MyBlog_project/h:/home/jenkins/MyBlog_project \\

내부 접속
sudo docker exec -it jenkins bash

</aside>

  1. Install Jenkins plugin + Git token & Webhook

<aside>

  1. Jenkins Plugin intsall

<aside>

plugins


  1. Git token create

<aside>

select scopes


  1. Git Webhooks

  2. Jenkins


<aside>

credentilas


</aside>

  1. Pipeline Setting

<aside>

  1. Build Triggers

  2. Pipeline

    image.png

</aside>

  1. Jenkinsfile 생성

<aside>

Pipeline code


pipeline {
    agent any
    environment {
        IMAGE_TAG = "047719624346.dkr.ecr.ap-northeast-2.amazonaws.com/my-spring-app:${BUILD_NUMBER}"
    }
    stages {
        stage('Prepare') {
            steps {
                checkout([
                    $class: 'GitSCM',
                    branches: [[name: '*/main']],
                    userRemoteConfigs: [[
                        url: '<https://github.com/yyytgf123/MyBlog_project.git>',
                        credentialsId: 'jenkins_deploy'
                    ]]
                ])
            }
        }

        stage('Build Gradle project') {
            steps {
                dir('h') {  // ✅ checkout된 디렉토리에서 빌드
                    sh 'chmod +x ./gradlew'
                    sh './gradlew clean build'
                }
                echo 'Jar build success'
            }
        }

        stage('Docker image create & Push to ECR') {
            steps {
                dir('h') {
                    script {
                        sh 'rm build/libs/h-0.0.1-SNAPSHOT-plain.jar'
                        sh "docker build -t ${IMAGE_TAG} -f Dockerfile ${WORKSPACE}/"
                        echo "Docker image created: ${IMAGE_TAG}"

                        sh "aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 047719624346.dkr.ecr.ap-northeast-2.amazonaws.com"
                        echo "AWS ECR Login success"

                        sh "docker push ${IMAGE_TAG}"
                        echo "Docker image pushed: ${IMAGE_TAG}"
                    }
                }
            }
        }

        stage('Update Deployment in Git for ArgoCD') {
            steps {
                script {
                    echo 'Updating Kubernetes deployment file'
                    sh "sed -i 's|image: 047719624346.dkr.ecr.ap-northeast-2.amazonaws.com/app:.*|image: 047719624346.dkr.ecr.ap-northeast-2.amazonaws.com/app:${BUILD_NUMBER}|' ${WORKSPACE}/k8s/deployment.yaml"

                    sh "git config --global user.email '[email protected]'"
                    sh "git config --global user.name 'dev123'"

                    sh "git add /var/lib/jenkins/workspace/app_deploy/k8s/deployment.yaml"  // ✅ 경로 수정
                    sh "git commit -m 'Update deployment image to ${IMAGE_TAG}'"
                    sh "git push origin main"
                }
            }
        }

        stage('Trigger ArgoCD Sync') {
            steps {
                script {
                    sh "argocd app sync my-spring-app"
                }
            }
        }
    }
}

</aside>

  1. workspace 경로 변경