当前位置:   article > 正文

腾讯coding.net 持续集成部署spring-cloud项目_coding 平台持续部署 net core

coding 平台持续部署 net core


前言

CODING 作为一站式云端开发平台,从诞生之初就生长在云端,充分利用腾讯云的能力为客户提供弹性可靠的服务。而且标准版本每月提供免费的使用时长 相当于白嫖了一波服务器。
在这里插入图片描述


一、coding 是什么?

coding devops高效的云上研发工作流,提供一站式开发协作工具,帮助研发团队快速落地敏捷开发与 DevOps 开发方式,实现研发效能升级.
● 实践敏捷开发打开即用的 Scrum 敏捷开发工作流,适用于团队项目管理与协作。
● 构建 DevOps 工作方式一站式 DevOps 工具,适用于研发团队快速搭建 DevOps ,实现可持续发布。
● 代码开发协同Git/SVN 代码仓库服务,免费、超大高可用仓库,适用于研发团队协作开发。
● 测试管理协作在线组织和管理测试用例及测试计划,将测试团队工作搬到云上。

二、项目准备

准备一个用于CI/CD的项目。
1665541748756(1).png

  • roca-shop-common 项目通用模块、工具类模块
  • roca-shop-gateway 路由模块 负责请求转发和鉴权功能
  • roca-shop-modulees 业务模块受保护的API服务,用户鉴权通过后可以访问该服务
  • roca–shop-oauth 鉴权模块 负责对登录用户进行认证

并在需要打包的模块根目录中添加 Dockerfile
1665546973480.png
例如roca–shop-oauth模块

FROM openjdk:8-jdk-alpine

EXPOSE 8202

COPY /roca-shop-oauth/target/roca-shop-oauth-1.0.0.jar roca-shop-oauth.jar

ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-Dfile.encoding=UTF-8", "-jar", "roca-shop-oauth.jar"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

准备一台服务器(我这里使用的是1核2G1M阿里云)
1665543808134.png

安装启动docker以及相关的容器,在服务器~目录下创建docker-compose文件和master.env文件
1665562012611.png

version: '3.5'
services:
  roca-shop-gateway:
    container_name: roca-shop-gateway
    image: qingzhouyilian-docker.pkg.coding.net/shop/roca/roca-shop-gateway:master
    env_file:
      - ./master.env
    environment:
      - JAVA_TOOL_OPTIONS=-Xms256m -Xmx256m -Xmn128m
    ports:
      - "8005:8005"
    volumes:
      - /usr/local/magese/magese-api/logs:/usr/local/magese/magese-api/logs
      - /etc/timezone:/etc/timezone
      - /etc/localtime:/etc/localtime

  roca-system:
    container_name: roca-system
    image: qingzhouyilian-docker.pkg.coding.net/shop/roca/roca-system:master
    env_file:
      - ./master.env
    environment:
      - JAVA_TOOL_OPTIONS=-Xms256m -Xmx256m -Xmn128m
    ports:
      - "8006:8006"
    volumes:
      - /usr/local/magese/magese-api/logs:/usr/local/magese/magese-api/logs
      - /etc/timezone:/etc/timezone
      - /etc/localtime:/etc/localtime

  roca-shop-oauth:
    container_name: roca-shop-oauth
    image: qingzhouyilian-docker.pkg.coding.net/shop/roca/roca-shop-oauth:master
    env_file:
      - ./master.env
    environment:
      - JAVA_TOOL_OPTIONS=-Xms256m -Xmx256m -Xmn128m
    ports:
      - "8007:8007"
    volumes:
      - /usr/local/magese/magese-api/logs:/usr/local/magese/magese-api/logs
      - /etc/timezone:/etc/timezone
      - /etc/localtime:/etc/localtime

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

image.png

三、创建项目

在coding上面创建项目
1665565329352.png

四、创建构建计划

1.新建构建计划

选择java+Spring+Docker模板
1665565498849.png

2.构建过程

选择自己项目的位置选择对应的仓库,取消单元测试,编译构建暂时不做更改,镜像名字自己命名。

1665565624488.png

3.新建制品库

新建的项目是没有制品的 我们新建制品 然后命名
1669012142379.png
选择创建的制品
1669012401746.png

4.远端服务配置

录入凭据
1669012796742.png

ssh-keygen -m PEM -t ed25519 -C "your.email@example.com"
cat ~/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
JvKE3WXugDp2YuswF4MAJq/o+R9kRKZzNfeM9A6NWjwjnIYP4yUVwqa/20MYmVpT
......
  • 1
  • 2
  • 3
  • 4
  • 5

输入服务器地址 选择服务器的凭据
1669012909977.png

4.修改生成的模板配置信息

使用文本编辑器打开流程配置
1669013341119.png
修改编译步骤

    stage('编译') {
      steps {
        sh 'mvn clean package -Dmaven.javadoc.skip=true -Dmaven.test.skip=true'
      }
    }
  • 1
  • 2
  • 3
  • 4
  • 5

增加登录制品库步骤

    stage('登录 CODING Docker 制品库') {
      steps {
        sh "docker login -u ${DOCKER_USERNAME} -p ${DOCKER_PASSWORD} ${CODING_DOCKER_REG_HOST}"
      }
    }
  • 1
  • 2
  • 3
  • 4
  • 5

构建推送模块

    stage('构建推送gateway 模块') {
      steps {
        sh """
        docker build -t ${GATEWAY_IMAGE_NAME}:${DOCKER_IMAGE_VERSION} -f /root/workspace/${GATEWAY_IMAGE_NAME}/Dockerfile ${DOCKER_BUILD_CONTEXT}
        docker images ${GATEWAY_IMAGE_NAME}
        docker tag ${GATEWAY_IMAGE_NAME}:${DOCKER_IMAGE_VERSION} qingzhouyilian-docker.pkg.coding.net/shop/roca/${GATEWAY_IMAGE_NAME}:${DOCKER_IMAGE_VERSION}
        docker push qingzhouyilian-docker.pkg.coding.net/shop/roca/${GATEWAY_IMAGE_NAME}:${DOCKER_IMAGE_VERSION}
        """
      }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

修改部署步骤

   stage('部署') {
      steps {
        script {
          def remoteConfig = [:]
          remoteConfig.name = "my-remote-server"
          remoteConfig.host = "${REMOTE_HOST}"
          remoteConfig.port = "${REMOTE_SSH_PORT}".toInteger()
          remoteConfig.allowAnyHosts = true

          withCredentials([
            sshUserPrivateKey(
              credentialsId: "${REMOTE_CRED}",
              keyFileVariable: "privateKeyFilePath"
            )
          ]) {
            // SSH 登陆用户名
            remoteConfig.user = "${REMOTE_USER_NAME}"
            // SSH 私钥文件地址
            remoteConfig.identityFile = privateKeyFilePath

            sshCommand(
              remote: remoteConfig,
              command: "docker-compose -f ${DOCKER_COMPOSE_PATH} down --rmi all",
              sudo: true,
            )

            sshCommand(
              remote: remoteConfig,
              command: "docker-compose -f ${DOCKER_COMPOSE_PATH} up -d",
              sudo: true,
            )

            echo "Deploy success! Go to http://api.magese.com/doc.html for a preview."
          }
        }

      }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

完整的配置文件

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 'mvn clean package -Dmaven.javadoc.skip=true -Dmaven.test.skip=true'
      }
    }

    stage('登录 CODING Docker 制品库') {
      steps {
        sh "docker login -u ${DOCKER_USERNAME} -p ${DOCKER_PASSWORD} ${CODING_DOCKER_REG_HOST}"
      }
    }

    stage('构建推送gateway 模块') {
      steps {
        sh """
        docker build -t ${GATEWAY_IMAGE_NAME}:${DOCKER_IMAGE_VERSION} -f /root/workspace/${GATEWAY_IMAGE_NAME}/Dockerfile ${DOCKER_BUILD_CONTEXT}
        docker images ${GATEWAY_IMAGE_NAME}
        docker tag ${GATEWAY_IMAGE_NAME}:${DOCKER_IMAGE_VERSION} qingzhouyilian-docker.pkg.coding.net/shop/roca/${GATEWAY_IMAGE_NAME}:${DOCKER_IMAGE_VERSION}
        docker push qingzhouyilian-docker.pkg.coding.net/shop/roca/${GATEWAY_IMAGE_NAME}:${DOCKER_IMAGE_VERSION}
        """
      }
    }

    stage('构建推送ouath模块') {
      steps {
        sh """
        docker build -t ${AUTH_IMAGE_NAME}:${DOCKER_IMAGE_VERSION} -f /root/workspace/${AUTH_IMAGE_NAME}/Dockerfile ${DOCKER_BUILD_CONTEXT}
        docker images ${AUTH_IMAGE_NAME}
        docker tag ${AUTH_IMAGE_NAME}:${DOCKER_IMAGE_VERSION} qingzhouyilian-docker.pkg.coding.net/shop/roca/${AUTH_IMAGE_NAME}:${DOCKER_IMAGE_VERSION}
        docker push qingzhouyilian-docker.pkg.coding.net/shop/roca/${AUTH_IMAGE_NAME}:${DOCKER_IMAGE_VERSION}
        """
      }
    }

    stage('构建推送system模块') {
      steps {
        sh """
        docker build -t ${SYSTEM_IMAGE__NAME}:${DOCKER_IMAGE_VERSION} -f /root/workspace/${MODULES_IMAGE_NAME}/${SYSTEM_IMAGE__NAME}/Dockerfile ${DOCKER_BUILD_CONTEXT}
        docker images ${SYSTEM_IMAGE__NAME}
        docker tag ${SYSTEM_IMAGE__NAME}:${DOCKER_IMAGE_VERSION} qingzhouyilian-docker.pkg.coding.net/shop/roca/${SYSTEM_IMAGE__NAME}:${DOCKER_IMAGE_VERSION}
        docker push qingzhouyilian-docker.pkg.coding.net/shop/roca/${SYSTEM_IMAGE__NAME}:${DOCKER_IMAGE_VERSION}
        """
      }
    }

    stage('部署') {
      steps {
        script {
          def remoteConfig = [:]
          remoteConfig.name = "my-remote-server"
          remoteConfig.host = "${REMOTE_HOST}"
          remoteConfig.port = "${REMOTE_SSH_PORT}".toInteger()
          remoteConfig.allowAnyHosts = true

          withCredentials([
            sshUserPrivateKey(
              credentialsId: "${REMOTE_CRED}",
              keyFileVariable: "privateKeyFilePath"
            )
          ]) {
            // SSH 登陆用户名
            remoteConfig.user = "${REMOTE_USER_NAME}"
            // SSH 私钥文件地址
            remoteConfig.identityFile = privateKeyFilePath

            sshCommand(
              remote: remoteConfig,
              command: "docker-compose -f ${DOCKER_COMPOSE_PATH} down --rmi all",
              sudo: true,
            )

            sshCommand(
              remote: remoteConfig,
              command: "docker-compose -f ${DOCKER_COMPOSE_PATH} up -d",
              sudo: true,
            )

            echo "Deploy success! Go to http://api.magese.com/doc.html for a preview."
          }
        }

      }
    }

  }
  environment {
    CODING_DOCKER_REG_HOST = "${CCI_CURRENT_TEAM}-docker.pkg.${CCI_CURRENT_DOMAIN}"
    CODING_DOCKER_IMAGE_NAME = "${PROJECT_NAME.toLowerCase()}/${DOCKER_REPO_NAME}/${DOCKER_IMAGE_NAME}"
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104

4.修改变量信息

脚本中用到的变量需要根据自己的情况修改保存
1669013896447.png

5.构建项目全部是绿色就ok了 红色的点击进去查看原因解决

1669014071164.png

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/698981
推荐阅读
相关标签
  

闽ICP备14008679号