智能提醒助理系列-容器化部署

        本系列文章记录“智能提醒助理”wx公众号 建设历程。

 

一、需求出发点

当前系统开发使用springboot技术栈,需要打包发布、部署到服务器,同时需要区分不同的环境配置。

 

二、实现方案分析

1、本地打jar包,上传到服务器、启动的时候引用本地配置文件,通过脚本启停。

nohup java -Xms128m -Xmx256m -Duser.timezone=Asia/Shanghai -Dfile.encoding=UTF-8 -javaagent:/root/apache-skywalking-apm-bin/agent/skywalking-agent.jar -Dskywalking.agent.service_name=xx-admin -Dskywalking.collector.backend_service=localhost:11800 -jar ${_JAR_PATH}/${_JAR_NAME}  --spring.config.location=${_JAR_PATH}/conf/application.yml > ${_JAR_PATH}/logs/`date +%Y%m%d`-stdout.log &

2、通过Coding devops 持续发布,使用docker 方式部署。

可实现 提交代码 合并分支 即可 触发部署。

 

三、最终方案

通过Coding devops 持续发布,使用docker 方式部署

1、创建构建计划

e5d2a445b29745b8b33790095715143c.png

2、构建计划基础信息配置

cf9fec85542f4df6b5bf973a22f2b6a4.png

3、构建流程配置

48ddad047d0942c08ed4a786e2ccc479.png

4、构建脚本编辑 

选择 文本编辑,输入 构建脚本:

逻辑过程:

1、检出编译

2、构建docker镜像

3、发布docker镜像到镜像仓库

4、登录服务器,拉取镜像,停止旧版本,启动新版本

pipeline {
  agent any
  stages {
    stage('检出') {
      steps {
        checkout([$class: 'GitSCM',
        branches: [[name: GIT_BUILD_REF]],
        userRemoteConfigs: [[
          url: GIT_REPO_URL,
          credentialsId: CREDENTIALS_ID
        ]]])
      }
    }
    stage('编译') {
      steps {
        sh 'pwd'
        sh 'ls *'
        sh 'env'
        sh 'mvn clean package -Dmaven.test.skip=true'
      }
    }
    stage('DockerBuild') {
      steps {
        sh """
        cd ${PROJECT} // 切换目录到当前应用
        docker build -t ${DOCKER_IMAGE_URL} . 
        echo ${REGISTRY_PASS} | docker login -u ${REGISTRY_USER} --password-stdin ${CODING_DOCKER_REG_HOST}
        docker push --disable-content-trust ${DOCKER_IMAGE_URL}
        """
      }
    }
    stage('发布') {
      steps {
        withCredentials([usernamePassword(
          credentialsId: "${REMOTE_CRED}",
          passwordVariable: 'password',
          usernameVariable: 'userName'
        )]) {
          script {
            remoteConfig = [:]
            remoteConfig.name = "deloy-server"
            remoteConfig.host = "${SERVER_IP}"
            remoteConfig.allowAnyHosts = true
            remoteConfig.user = userName
            // SSH 登录密码
            remoteConfig.password = password

            // 远程登录
            sshCommand(remote: remoteConfig, command: "docker login -u ${REGISTRY_USER} -p ${REGISTRY_PASS} ${CODING_DOCKER_REG_HOST}",sudo: true)
            // 拉取新镜像
            sshCommand(remote: remoteConfig, command: "docker pull ${DOCKER_IMAGE_URL}",sudo: true)
            // 停止
            sshCommand(remote: remoteConfig, command: "docker rm -f ${PROJECT} | true",sudo: true)
            // 启动
            sshCommand(remote: remoteConfig, command: "docker run \
            -p 7001:7001 \
            -p 7081:7081 \
            --name ${PROJECT} \
            --privileged=true \
            --restart unless-stopped \
            -v /root/znzl/${PROJECT}/logs:/root/logs \
            -v /root/znzl/${PROJECT}/application.yml:/root/application.yml \
            -e JAVA_OPTS='-Xms128m -Xmx256m -Duser.timezone=Asia/Shanghai -Dfile.encoding=UTF-8' \
            -e PARAMS='--spring.config.location=application.yml' \
            -d ${DOCKER_IMAGE_URL}",sudo: true)
          }

        }

      }
    }
  }
  environment {
    CODING_DOCKER_REG_HOST = "${CCI_CURRENT_TEAM}-docker.pkg.${CCI_CURRENT_DOMAIN}"
    CODING_DOCKER_IMAGE_NAME = "${PROJECT_NAME.toLowerCase()}/${DOCKER_REPO_NAME}/${PROJECT}"
    DOCKER_IMAGE_URL = "${CODING_DOCKER_REG_HOST}/${CODING_DOCKER_IMAGE_NAME}:${CI_BUILD_NUMBER}" // 镜像地址
  }
}

 5、环境变量配置

ac7ae469a72b4e7fa108d9acc2abe614.png

6、触发方式

1、手动点击触发。

2、代码更新触发。

3、定时触发。

4、API触发。

cfa99ab5e6eb418591ff2f8e3fc1c69b.png

 

ecd05ec60b7540ff8dbdefbb779fc209.png

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值