[Jenkins] Deploy



젠킨슨으로 자동 배포하기

Setting

Jenkins - Github 연동

젠킨스와 Github 연동시 사용자명, 비밀번호 인증방식은 보안상 추천하지 않는 방식이다.

Jenkins - Github 간 SSH 연동 방식

1. 키 생성

su jenkins

mkdir /var/lib/jenkins/.ssh
cd /var/lib/jenkins/.ssh

# 만약 권한이없다면 관리자 계정으로 그룹설정
chown -R root:docker /var

ssh-keygen -t rsa -f /var/lib/jenkins/.ssh/github_spring-deploy

# 비밀번호 입력하지 않고 Enter

# 비밀키/공개키 생성 확인
ls -al

# 공개키 확인 후 복사
cat /var/lib/jenkins/.ssh/github_spring-deploy.pub

GIt hub deploy 설정공개키 등록

생성확인

– 젠킨스비밀키등록

Kind 인증 방식을 선택합니다. 여기선 비밀키 방식을 선택해야 Github과 공개키/비밀키로 인증이 가능합니다. Username 각 젠킨스 Job에서 보여줄 인증키 이름 입니다. 전 키 이름 그대로 사용했습니다. Private Key 좀전에 복사한 비밀키를 그대로 붙여넣습니다.

Start

Spring Boot

pipeline {
    agent {
        label 'citech-gitlab'
    }

    environment {
        GIT_USERNAME=sh(returnStdout: true, script: 'cat /home/apps/gitlab/GIT_USERNAME').trim()
        GIT_PASSWORD=sh(returnStdout: true, script: 'cat /home/apps/gitlab/GIT_PASSWORD').trim()
        SOURCE_BRANCH="${env.gitlabSourceBranch}"
        TAG_NAME = "${env.gitlabSourceBranch}".replace("release/","")
    }

    stages {
        stage("Git checkout") {
            steps {
                echo "Fetching changes from the remote Git repository"
                echo "${env.gitlabSourceNamespace}/${env.gitlabSourceBranch}"
                echo "${SOURCE_BRANCH}"
                echo "${TAG_NAME}"
                checkout ([
                    $class: 'GitSCM',
                    branches: [[name: "CI_Tech/${env.gitlabSourceBranch}"]],
                    doGenerateSubmoduleConfigurations: false,
                    extensions: [
                        [
                            $class: 'RelativeTargetDirectory',
                            relativeTargetDir: "./${PROJECT_NAME}/${BRANCH_NAME}"
                        ],
                        [$class: 'PruneStaleBranch'],
                        [$class: 'CleanCheckout'],
                        [
                            $class: 'PreBuildMerge',
                            options: [
                                fastForwardMode: 'NO_FF',
                                mergeRemote: "CI_Tech",
                                mergeTarget: "${BRANCH_NAME}"
                            ]
                        ]
                    ],
                    gitTool: 'jgit',
                    submoduleCfg: [],
                    userRemoteConfigs: [
                        [
                            credentialsId: 'gitlab_root',
                            name: env.gitlabTargetNamespace,
                            url: "https://${GIT_PROJECT_URL}"
                        ],
                        [
                            credentialsId: 'gitlab_root',
                            name: env.gitlabSourceNamespace,
                            url: "https://${GIT_PROJECT_URL}"
                        ]
                    ]
                ])

                echo "dir -> ${PROJECT_NAME}/${BRANCH_NAME}"

                dir("./${PROJECT_NAME}/${BRANCH_NAME}") {
                    sh 'git status'
                    withCredentials([usernamePassword(credentialsId: 'gitlab_root', passwordVariable: 'GIT_PASSWORD', usernameVariable: 'GIT_USERNAME')]) {
                        sh 'git commit --amend -m "Merge branch \'${SOURCE_BRANCH}\' into ${BRANCH_NAME} by jenkins"'
                        sh 'git push https://${GIT_USERNAME}:${GIT_PASSWORD}@${GIT_PROJECT_URL} HEAD:${BRANCH_NAME}'
                    }
                }
            }
        }
    }
}

println “Test Started” try { sh “${tool name: GRADLE_VERSION, type: ‘hudson.plugins.gradle.GradleInstallation’}/bin/gradle test -Dorg.gradle.daemon=true” } finally { junit allowEmptyResults: true, keepLongStdio: true, testResults: ‘build/test-results/*.xml’ }


참고자료

https://jenkins.io/doc/pipeline/steps/workflow-scm-step/