一、新建


二、关键配置



三、Jenkinsfile准备

在目标Git项目分支及根目录中增加Jenkinsfile文件,例如合伙人,提交&推送到仓库

Jenkinsfile示例

// Jenkinsfile (Declarative Pipeline)
pipeline {
    agent any
    environment {
        APP_NAME = "agent"
        APP_ENV = "${APP_NAME}-${ENV}"
        APP_TAR = "${APP_ENV}.tar.gz"
        SERVER_CONTAINER = "${APP_ENV}"
        SERVER_WORKSPACE = "/workspace"
        SERVER_WORKSPACE_SUB_DIR = "${SERVER_WORKSPACE}/${APP_ENV}"
        SERVER_SITE_DIR = "/sites/${APP_ENV}"
        LOCAL_SCRIPT = """
#!/bin/bash

# 配置环境文件
cp .env.${ENV} .env

# 清空仓库里携带的冲突文件,防止覆盖
rm -rf runtime/logs/
rm -rf runtime/log/

rm -rf ${APP_ENV}
mkdir ${APP_ENV}
shopt -s extglob
mv !(${APP_ENV}) .[^.]* ${APP_ENV}

# 压缩打包目录
rm -rf ${APP_TAR}
tar -czf ${APP_TAR} -C ${APP_ENV} .

        """
        SERVER_SCRIPT = """
#!/bin/bash

# 检查变量是否为空
if [ -z "${SERVER_WORKSPACE_SUB_DIR}" ]; then
    echo "文件夹为空,退出"
    exit 1
fi

if [ -d "${SERVER_WORKSPACE_SUB_DIR}" ]; then
    echo "${SERVER_WORKSPACE_SUB_DIR} 目录存在"
else
    echo "创建 ${SERVER_WORKSPACE_SUB_DIR}"
    mkdir ${SERVER_WORKSPACE_SUB_DIR}
fi

# 停止服务
docker stop ${SERVER_CONTAINER}


# 清空旧数据
#cd /sites/${SERVER_FOLDER}
#rm -rf *

# 解包文件
cd ${SERVER_WORKSPACE}
mv ${APP_TAR} ${SERVER_WORKSPACE_SUB_DIR}
cd ${SERVER_WORKSPACE_SUB_DIR}
tar -zxf ${APP_TAR}
cp -r ./ ${SERVER_SITE_DIR}

# 启动服务
#docker start ${SERVER_CONTAINER}

        """

    }

    parameters {
        gitParameter (
            description: '请选择版本或分支',
            branchFilter: 'origin/(.*)',
            defaultValue: '',
            name: 'BRANCH_TAG',
            type: 'PT_BRANCH_TAG',
            quickFilterEnabled: true,
            sortMode: 'DESCENDING_SMART'
        )
        choice (
            description: '请选择环境',
            name: 'ENV',
            choices: ['dev', 'test']
        )
    }


    stages {


        stage('Pipeline Init') {
            when {
                expression {
                    env.getProperty('ENV') == null || env.getProperty('BRANCH_TAG') == null
                }
            }
            steps {
                echo "项目初始化.."
            }
        }

        stage('Zip') {
            when {
                expression { env.getProperty('ENV') != null}
            }

            steps {
                script {
                    echo "ENV: ${ENV}"
                    echo "APP_NAME: ${APP_NAME}"
                    echo "APP_ENV: ${APP_ENV}"
                    echo "APP_TAR: ${APP_TAR}"
                }

                echo "文件打包中.."
                sh "${LOCAL_SCRIPT}"
            }
        }

        stage('Deploy:dev') {
            when {
                expression { env.getProperty('ENV') != null && ENV == 'dev' }
            }
            steps {
                echo "项目部署中.."
                sshPublisher(publishers: [sshPublisherDesc(configName: 'jsfk-application', sshCredentials: [encryptedPassphrase: '{AQAAABAAAAAgdPyIjjf2vcK04ARjEMRJQvTLoegYPTjaBoMleHT/5sTO5JeSHyKP1KUfcMaiMGX1}', key: '', keyPath: '', username: 'root'], transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "${SERVER_SCRIPT}", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: "", remoteDirectorySDF: false, removePrefix: '', sourceFiles: "${APP_TAR}")], usePromotionTimestamp: true, useWorkspaceInPromotion: true, verbose: true)])
            }
        }

        stage('Deploy:test') {
            when {
                expression { env.getProperty('ENV') != null && ENV == 'test' }
            }
            steps {
                echo "项目部署中.."
                sshPublisher(publishers: [sshPublisherDesc(configName: 'jsfk-application', sshCredentials: [encryptedPassphrase: '{AQAAABAAAAAgdPyIjjf2vcK04ARjEMRJQvTLoegYPTjaBoMleHT/5sTO5JeSHyKP1KUfcMaiMGX1}', key: '', keyPath: '', username: 'root'], transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "${SERVER_SCRIPT}", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: "", remoteDirectorySDF: false, removePrefix: '', sourceFiles: "${APP_TAR}")], usePromotionTimestamp: true, useWorkspaceInPromotion: true, verbose: true)])
            }
        }

    }


    post {
        success {
            script {
                if(env.getProperty('ENV') == null || env.getProperty('BRANCH_TAG') == null){
                    echo "项目初始化 成功 ^_^"
                }else{
                    echo "${APP_ENV} : ${BRANCH_TAG} 部署 成功 ^_^"
                }
            }

        }

        failure {
            script {

                if(env.getProperty('ENV') == null || env.getProperty('BRANCH_TAG') == null){
                    echo "项目初始化 失败!"
                }else{
                    echo "${APP_ENV} : ${BRANCH_TAG} 部署 失败!"
                }

            }
        }

    }

}




四、运行自动化部署

进入jenkins项目,点击 【立即构建】 ,后在下方Builds中查看当前构建输出

  • 无标签