ci-cd

진성대·2023년 12월 21일
0

DEVOPS

목록 보기
3/3

초기 설치 플러그인

  • GitHub Integration Plugin
  • ssh agent
  • Publish Over SSH
  • SSH Agent Plugin
  • SSH Build Agents plugin
  • SSH Credentials Plugin
  • SSH server

서버간의 ssh 접속을 위해서

  • sudo yum install openssh-server 를 통해 openssh 설치

maven

java version


GITHUB WebHook -> Jenkins Server -> ec2-server(개발서버)

Jenkins Credential

  • GITHUB id token 발급 -> Jenkins Credential 에 github id를 등록
  • Jenkins Configue 에 Jenkins ssh_private key 등록

    Jenkins pipeline을 위해서는 Jenkins Credential에 개발서버로 user 이름으로 ssh_private key를 등록해주고 Jenkinsfile 에
    sshagent(credentials :['ec2-user']) 로 등록해준다.
    sshagent 는 plug-in jenkins에서 plugin으로 등록해주어야 한다.

  • Known_host file에 개발서버의 public key를 등록해줬는데 이게 정상 작동하는지는 자세하게 모르겠다.
    등록하는 이유가 개발서버에 접근할때 ssh 인증을 하기 위해서라는데...

개발 서버에서의 SSH 적용

~/.ssh/authorized_keys

ssh 접근을 하기 위해서는 Jenkins(Client server) -> ec2(Backend server) 에 Jenkins의 public key를 등록시켜줘야 한다.

  • ec2에 접근할때 기본키와 공통키로 rsa 암호화를 통해서 비교해서 접근해주기 위함
  • authorized_keys 에 Jenkins의 public key를 등록시켜주면 된다.

GROOVY file

jenkins의 pipeline을 위한 file, 실행 순서가 build -> Deploy -> 등등 단계로 나누어진다.

pipeline {
    agent any
    tools {
        jdk 'jdk-17'
    }
    stages {
        stage('Build') {
            steps {
                sh '/opt/maven/bin/mvn clean install -DskipTests -Pdev'
            }
        }

        stage('Deploy') {
//            when {
//                expression { currentBuild.result == null || currentBuild.result == 'SUCCESS' }
//            }
            steps {
                sshagent(credentials: ['ec2-user']) {
                    sh 'ssh ec2-user@172.26.6.126 ' +
                            '"sudo rm -rf /home/WebService/TRUDOC/ADMIN/assets ' +
                            '&& sudo rm -rf /home/WebService/TRUDOC/ADMIN/META-INF ' +
                            '&& sudo rm -rf /home/WebService/TRUDOC/ADMIN/org ' +
                            '&& sudo rm -rf /home/WebService/TRUDOC/ADMIN/WEB-INF ' +
                            '&& sudo chown -R ec2-user /home/WebService/TRUDOC/ADMIN"'
                    sh 'scp /var/lib/jenkins/workspace/truedoc.admin_sjin/target/truedocadmin-0.0.1-SNAPSHOT.war ec2-user@172.26.6.126:/home/WebService/TRUDOC/ADMIN'
                    sh 'ssh ec2-user@172.26.6.126 "' +
                            'cd /opt/tomcat10/instances/trudocadmin ' +
                            '&& sudo sh shutodown-trudocadmin.sh ' +
                            '&& sudo unzip /home/WebService/TRUDOC/ADMIN/truedocadmin-0.0.1-SNAPSHOT.war -d /home/WebService/TRUDOC/ADMIN ' +
                            '&& sudo sh startup-trudocadmin.sh"'
                }
            }
        }
    }

    post {
        // 항상 실행
        always {
            echo 'This will always run'
        }
        // 이번 빌드가 성공일때 실행
        success {
            echo 'Build success.'
        }
        // 지난번 빌드와 빌드 결과가 다를때 실행
        changed {
            echo 'Build result changed.'
        }
        // 지난번 빌드는 실패이고 이번에 성공했을때 실행
        fixed {
            echo 'Build fixed.'
        }
        // 지난번 빌드는 성공이고, 이번에는 실패, unstable,aborted 될때 실행
        regression {
            echo 'Build regression.'
        }
        // 이번 빌드가 aborted 되었을때 실행
        aborted {
            echo 'Build aborted.'
        }
        // 이번 빌드가 실팯 되었을때 실행
        failure {
            echo 'Build failed.'
        }
        // 이번 빌드가 unstable 일때 실행
        unstable {
            echo 'Build unstable.'
        }
        // 이번 빌드가 성공이 아닐때 실행
        unsuccessful {
            echo 'Build unsuccessful.'
        }
    }
}
profile
신입 개발자

0개의 댓글