본문 바로가기
공부/프로젝트

젠킨스 pipeline를 설정해보자

by JERO__ 2022. 7. 26.

젠킨스 pipeline을 적용한 결과

pipeline {
    agent any
    
    stages {
        stage('Github clone') {
            steps{
                git branch: 'develop', url: '<https://github.com/woowacourse-teams/2022-nae-pyeon>'
            }
        }
        
        stage('BE build'){
            steps{
                dir('backend'){
                    sh'''
                        echo build build
                        ./gradlew clean build
                    '''
                }
            }
        }
        
        stage('Transfer env_setting(deploy.sh) and jar file to WAS'){
            steps{
                sshagent(credentials: ['aws-naepyeon-key']) {
                    sh """
                    	echo '내용입력' > /var/jenkins_home/deploy.sh
                    	scp /var/jenkins_home/deploy.sh ubuntu@내편privateIP:/home/ubuntu
                    	scp /var/jenkins_home/workspace/naepyeon-pipeline/backend/build/libs/naepyeon-0.0.1-SNAPSHOT.jar ubuntu@내편privateIP:/home/ubuntu
                    """
                }
            }
        }
        
        stage('Execute deploy'){
            steps{
                sshagent(credentials: ['aws-naepyeon-key']) {
                    sh """
                        ssh -o StrictHostKeyChecking=no ubuntu@내편privateIP chmod 777 ./deploy.sh
                        ssh -o StrictHostKeyChecking=no ubuntu@내편privateIP ./deploy.sh &
                    """
                }
            }
        }
    }
}

수행과정

1. Github clone

stage('Github clone') {
    steps{
        git branch: 'develop', url: '<https://github.com/woowacourse-teams/2022-nae-pyeon>'
    }
}

2. BE build

stage('BE build'){
    steps{
        dir('backend'){
            sh'''
                ./gradlew clean build
            '''
        }
    }
}
  • 디렉토리 backend에 있는 ./gradlew을 build한다.
    • ./gradlew clean build : 빌드된 파일을 지운 후 빌드 실행 (./gradlew build를 실행하면 에러가 발생하기도 한다)

3. Transfer env_setting(deploy.sh) and jar file to WAS

steps{
    sshagent(credentials: ['aws-naepyeon-key']) {
        sh """
	        echo '내용입력' > /var/jenkins_home/deploy.sh
	        scp /var/jenkins_home/deploy.sh ubuntu@내편privateIP:/home/ubuntu
	        scp /var/jenkins_home/workspace/naepyeon-pipeline/backend/build/libs/naepyeon-0.0.1-SNAPSHOT.jar ubuntu@내편privateIP:/home/ubuntu
        """
    }
}
  1. deploy.sh를 생성한다.
  2. deploy.sh를 Jenkins서버에서 WAS서버에 전송한다.
  3. jar를 Jenkins서버에서 WAS서버에 전송한다.
  • echo : 터미널의 출력 명령어
    • echo ‘입력내용’ > 파일명
      • 입력내용이 파일명에 저장된다.
    PID=$(pgrep -f naepyeon)
    
    if [ -n $PID ]; then
            kill -9 $PID
            sleep 5
    fi
    
    export MYSQL_URL="url"
    export MYSQL_USERNAME="username"
    export MYSQL_PASSWORD="password"
    export JWT_SECRET_KEY="내편키"
    export JWT_EXPIRE_LENGTH="3600000"
    
    nohup java -jar -Dspring.profiles.active=deploy naepyeon-0.0.1-SNAPSHOT.jar 2>&1 &
    • “를 사용하기 위해 ‘로 감싼다.
    • $를 인식하기 위해선 \\$를 사용한다.
    • \\n를 사용하여 개행한다.
  • scp
    • 파일을 전송한다.
    • scp 전송할파일명 저장할위치
    • deploy.sh와 jar파일을 전송한다.

4. Execute deploy

stage('Execute deploy'){
    steps{
        sshagent(credentials: ['aws-naepyeon-key']) {
            sh """
                ssh -o StrictHostKeyChecking=no ubuntu@내편privateIP chmod 777 ./deploy.sh
                ssh -o StrictHostKeyChecking=no ubuntu@내편privateIP ./deploy.sh &
            """
        }
    }
}
  1. chmod를 통해 ./deploy.sh를 실행할 수 있는 권한을 준다.
  2. deploy.sh를 실행한다.
  • ssh접속
    • -o : 사용자정의옵션을 제공하는데 사용한다. 호스트별로 지정할 수 있다.
    • StrictHostKeyChecking=no : host key checking을 비활성한다.
      • ssh를 이용해 원격에 있는 서버에 접근할 때 해당 서버에 대한 인증을 위해 로컬에 저장해둔 키와 서버의 키를 비교하는 작업을 진행한다. (이를 비활성화 하여 ssh명령어가 인증없이 실행할 수 있도록 한다)

'공부 > 프로젝트' 카테고리의 다른 글

restdocs를 사용해보자  (0) 2022.07.29
Flyway를 사용하는 이유  (0) 2022.07.29
[지원플랫폼] 플래닝포커를 해보자  (0) 2022.07.25
DB 서버를 연동해보자  (0) 2022.07.25
젠킨스를 적용해보자  (0) 2022.07.25

댓글