jenkins创建项目流水线

1,287 阅读2分钟

用jenkins创建一个流水线项目,实现自动打包、部署的功能。

一、创建项目

image.png

点击新建Item,进入以下页面

image.png

填写任务名称,也就是项目名称,选择流水线,点击确定,进入以下页面,

image.png 在脚本中填写的我们的执行脚本。

二、 创建凭据

点击图1的凭据,进入的页面如下,有一个创建按钮,点击,

image.png 选择ssh模式,填写ID、Username、Private Key。ID为该凭据的唯一标识,在pipline脚本中用于和服务器进行身份验证的凭证。Username是登录服务器的用户名、Private Key是服务器的私钥。

image.png 一切填写完毕之后,点击Create按钮。

三、 编写脚本

def date = new Date().format('yyyy-MM-dd')

pipeline {
    parameters {
        choice choices: ['deploy', 'rollback'], description: '请选择构建操作:发布、回滚', name: 'MODE'
        choice(name: 'GIT_BRANCH', choices:['dev', 'release'], description:'进行deploy时,请选择即将构建的分支')
        choice(name: 'IS_INSTALL', choices:['false', 'true'], description:'进行deploy时,请选择是否安装依赖')
    }

    // triggers {
    //     pollSCM ('H/10 * * * *')
    // }

    agent {
        node {
           // 这里的label值为前端node的节点,可以问运维
            label 'xxx'
        }
    }
    // 默认
    environment {
        // 项目名称
        project = "www"
        // git地址
        git_url = "git@git.xxxx.git"
        // 分支
        git_branch = "dev"
        // 部署机器的IP地址
        deploy_host = '127.0.0.1'
        // 当前git_branch分支对应的凭据名称
        userId = 'test1'
    }
    stages {
        stage('初始化') {
            steps{
                script {
                    git_branch="${params.GIT_BRANCH}"
                }
            }
            
        }
        stage('检出代码') {
            when {
                environment name: 'MODE', value: 'deploy'
            }
            steps {
                echo "开始拉取最新代码"
                echo "当前分支${git_branch}"
                // 这里的credentialsId值为前端的节点,可以问运维
                git credentialsId: 'fe-xx', branch: "${git_branch}", url: "${git_url}"
                echo "代码检出成功"

            }
        }
        stage('安装依赖') {
            when {
                allOf{
                    environment name: 'MODE', value: 'deploy'
                    environment name: 'IS_INSTALL', value:'true'
                }
            }   
            steps {
                echo '安装依赖'
                sh  "ls"
                sh 'npm install'
                echo '依赖安装完成'
            }
        }
        stage('编译打包') {
            when {
                environment name: 'MODE', value: 'deploy'
            }

            steps {
                echo '开始打包'
                sh 'npm run dll'
                sh 'npm run dist'
                echo '打包完成'
            }
        }

        stage('远程部署') {
            when {
                environment name: 'MODE', value: 'deploy'
            }

            steps {
                script {
                    switch(git_branch) {
                        case 'dev':
                            deploy_host='127.0.0.1'
                            userId='test1'
                            break

                        case 'release':
                            deploy_host='127.0.0.2'
                            userId='test2'
                            break

                    }
                }
                echo "开始部署"
                echo "部署环境为: ${git_branch}(${deploy_host})"
                withCredentials([sshUserPrivateKey(credentialsId:  "${userId}", keyFileVariable: 'keyfile')]){

                    sh "scp -o StrictHostKeyChecking=no -i ${keyfile} -r ./dist/* root@${deploy_host}:/data/front/"
                }
                
                echo '部署完成'
            }
        }

    }

    post {
        success {
            // One or more steps need to be included within each condition's block.
            echo "${MODE}成功"
        }

        unsuccessful {
            // One or more steps need to be included within each condition's block.
            echo "构建失败"
        }
    }
}
    

这里不同的环境,应该有自己的唯一凭据。