jenkins声明式远程部署UNIAPP项目(docker打包)

注意项:
1. 所有可变字段全部用变量定义,方便同类型项目复用。
2. npm镜像设置,node节点上跑过一次之后,可以注释掉,节约点时间。
3. 普通vue项目也可参考此模式,略作调整即可。

pipeline {
    agent any
    environment {
       def DOCKER_REGISTER = "xxx.com"
       def DOCKER_NAMESPACE = "xxx"
       def DOCKER_IMAGE = "xxx"
       def DOCKER_TAG = "latest"
       def DOCKER_CONTAINER_NAME = "xxx"
    }
    //构建触发器,Jenkins自动构建条件
    triggers{
        //每1分钟判断一次代码是否有变化
        pollSCM('H/1 * * * *')
    }
    stages {
        stage('获取代码') {
            steps {
                checkout scmGit(branches: [[name: '*/master']], extensions: [cleanBeforeCheckout(deleteUntrackedNestedRepositories: true)], userRemoteConfigs: [[credentialsId: 'aliyun_codeup', url: 'https://xxx.git']])
            }
        }
        stage('编译代码') {
            steps {
                nodejs('node14') {
                    sh 'npm config set registry https://registry.npm.taobao.org'
                    //sh 'npm config set sass_binary_site=https://npm.taobao.org/mirrors/node-sass'
                    //sh 'npm i node-sass@4.14.1 sass-loader@7.3.1 --save -dev'
                    sh 'npm install'
                    sh 'npm run build:h5'
                }
            }
        }
        stage('镜像操作') {
            steps {
                tool name: 'docker', type: 'dockerTool'
                script{
                  def dockerPath = tool 'docker' //全局配置里的docker
                  env.PATH = "${dockerPath}/bin:${env.PATH}" //添加了系统环境变量上
                }
                withCredentials([usernamePassword(credentialsId: 'aliyun_docker', passwordVariable: 'password', usernameVariable: 'username')]) {
                    sh "docker login ${DOCKER_REGISTER} -u ${username} -p ${password}"
                    sh "docker build -t ${DOCKER_REGISTER}/${DOCKER_NAMESPACE}/${DOCKER_IMAGE}:${DOCKER_TAG} -f Dockerfile . "
                    sh "docker push  ${DOCKER_REGISTER}/${DOCKER_NAMESPACE}/${DOCKER_IMAGE}:${DOCKER_TAG}"
                    sh "docker rmi ${DOCKER_REGISTER}/${DOCKER_NAMESPACE}/${DOCKER_IMAGE}:${DOCKER_TAG}"
                }
            }
        }
        stage('更新远程服务'){
            steps {
                script {

                    def remote = [:]
                    remote.name = 'labs'
                    remote.host = '127.0.0.1'
                    remote.allowAnyHosts = true     // 必须要运行所有主机
                    withCredentials([usernamePassword(credentialsId: 'labs-server', passwordVariable: 'password', usernameVariable: 'username')]) {
                        remote.user = username
                        remote.password = password
                    }
                    withCredentials([usernamePassword(credentialsId: 'aliyun_docker', passwordVariable: 'password', usernameVariable: 'username')]) {
                        sshCommand remote: remote, command: """
                                                docker rm -f ${DOCKER_CONTAINER_NAME};
                                                docker rmi ${DOCKER_REGISTER}/${DOCKER_NAMESPACE}/${DOCKER_IMAGE}:${DOCKER_TAG};
                                                docker login ${DOCKER_REGISTER} -u ${username} -p ${password}
                                                docker run -d --name ${DOCKER_CONTAINER_NAME} ${DOCKER_REGISTER}/${DOCKER_NAMESPACE}/${DOCKER_IMAGE}:${DOCKER_TAG}
                                                exit
                                            """
                    }


                }
            }

        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值