把一个SpringBoot项目在DevOps一站式研发平台coding编译成jar远程部署到服务器分为几步?答:3步。

  • 1、编译生成构建产物-jar包;
  • 2、SCP 上传到远端服务器;
  • 3、远程执行shell命令运行项目;

coding的持续集成,已经可以实现版本发布自动上线,原理如下图:

  • DevOps自动上线原理



    常见的持续集成有:

商业化的 CircleCI、开源的 Jenkins,以及 Jenkins 云服务—Coding

coding持续集成说明https://coding.net/products/ci?cps_source=PIevZ6Jr


自动化部署实战演示

自动化部署的两种方式

服务器环境-centos7.2

方式一(传统自动化部署)

使用技术如下:

工具 用途
jenkins 持续集成工具
git 分布式版本控制工具
maven 项目管理工具-用于构建项目
jdk java项目运行环境
  • 上述工具需要在安装到服务器上(jenkins集成ssh功能,可以不用安装到服务器)

    示例服务器:

    公司内网测试机192.168.1.91
[root@bogon data-view]# pwd
/opt/webapps/dataview-src/ty-data-view/data-view
[root@bogon data-view]# ll
总用量 36
-rw-r--r--. 1 root root 1206 4月 20 14:29 build.sh
drwxr-xr-x. 4 root root 43 4月 20 14:30 common
drwxr-xr-x. 4 root root 61 4月 20 14:31 d-view
-rw-r--r--. 1 root root 11858 4月 17 14:28 init_db.sql
-rw-r--r--. 1 root root 4434 4月 20 14:29 pom.xml
-rw-r--r--. 1 root root 14 1月 2 14:46 README.md
-rw-r--r--. 1 root root 7491 4月 20 14:29 settings.xml
drwxr-xr-x. 3 root root 20 4月 20 14:31 target
[root@bogon data-view]# git branch -a
dev
* test
remotes/origin/HEAD -> origin/dev
remotes/origin/dev
remotes/origin/master
remotes/origin/test
[root@bogon data-view]#
  • 通过jenkins的ssh功能远程执行shell命令实现自动化部署流程

  • jenkins 控制台日志输出

  • 备注:传统的jenkins流水线构建需要设置的参数比较繁琐,需要配置项目git地址、maven路径、jdk路径有时候一处不对就会造成整体流程不通。

方式二 一站式DevOps研发平台coding持续集成(coding完美的集成了jenkins)

CODING 的持续集成本质上就是每次实例化一台 CVM,再把 Jenkins 安装进去,和我们在普通的云服务器上部署是一样的。

CODING 持续集成会为每个构建任务分配一台 VM 作为构建资源,您可以通过内置的 agent label 来使用不同的环境进行构建。目前支持的构建环境有三种:

  • 默认环境:在 CODING 提供的云主机上执行 Pipeline 或 stage
  • Docker 环境:在指定的 Docker 镜像启动的容器环境中执行 Pipeline 或 stage
  • Dockerfile 环境:使用代码仓库中指定的 Dockerfile 脚本构建的容器环境中执行 Pipeline 或 stage
  • 首先需要创建coding平台和远端服务器连接

预装的软件 SDK

默认环境中提供的 SDK 以及对应的版本如下(更新日期:2019 年 11 月 30 日):

android-sdk: 26.1.1

build-essential

java: 1.8.0_191

python: 2.7.12

python3: 3.5.2

python3.7: 3.7.3

nodejs: 10.15.3

php: 7.3.5

ruby: 2.6.0

go: 1.12.4

dotnet-core: 2.2

erlang: Erlang/OTP 21

elixir: 1.8.1

预装的命令行工具

默认环境中提供的命令行工具以及对应的版本如下(更新日期:2019 年 11 月 30 日):

cmake: 3.5.1

maven: 3.6.1

gradle: 4.10.3

nvm: 0.34.0

yarn: 1.15.2

composer: 1.8.5

bundler: 1.17.2

rvm: 1.29.7

docker: 18.09.1

docker-compose: 1.23.1

kubectl: 1.14

rancher: 2.2.0

helm: 2.13.1

coscmd: 1.8.5.36

tccli: 3.0.67.1

svn: 1.9.3

mercurial: 3.7.3

git: 2.7.4

git-lfs: 2.7.2

jq: 1.5-1-a5b5cbe

pigz: 2.3.1

sshpass: 1.05

vsftpd: 3.0.3

SpringBoot项目自动化部署具体步骤如下:
  • 服务器创建SSH公私钥

    命令如下:
ssh-keygen -m PEM -t rsa -b 4096 -C "your.email@example.com"
  • 创建好后会在目录/root/.ssh生成两个文件(id_rsa是私钥|id_rsa.pub是公钥)
[root@VM_0_3_centos .ssh]# pwd
/root/.ssh
[root@VM_0_3_centos .ssh]# ll
total 16
-rw------- 1 root root 743 Apr 10 14:32 authorized_keys
-rw------- 1 root root 3243 Apr 10 13:20 id_rsa
-rw-r--r-- 1 root root 742 Apr 10 13:20 id_rsa.pub
pipeline {
agent any
stages {
stage('检出') {
steps {
checkout(
[$class: 'GitSCM', branches: [[name: env.GIT_BUILD_REF]],
userRemoteConfigs: [[url: env.GIT_REPO_URL, credentialsId: env.CREDENTIALS_ID]]]
)
}
}
stage('构建') {
steps {
sh 'du -h --max-depth=1 ~/.m2/repository'
sh 'env'
dir(path: 'user-authority/') {
echo '构建中...'
sh 'env'
sh 'pwd'
sh 'mvn -T 1C clean install -D maven.test.skip=true -D maven.compile.fork=true -s ./settings.xml'
echo '构建完成.'
script {
def exists = fileExists 'README.md'
if (!exists) {
writeFile(file: 'README.md', text: '权限中心-test')
}
} } archiveArtifacts(artifacts: '**/target/*.jar', fingerprint: true)
}
}
stage('部署') {
steps {
echo '部署中...'
script {
// 声明服务器信息
def remote = [:]
remote.name = 'web-server'
remote.allowAnyHosts = true
remote.host = '121.36.19.189'
remote.port = 22
remote.user = 'root' // 把「CODING 凭据管理」中的「凭据 ID」填入 credentialsId,而 id_rsa 无需修改
withCredentials([sshUserPrivateKey(credentialsId: "9274aafa-72fc-472b-8ae4-xxxxxx", keyFileVariable: 'id_rsa')]) {
remote.identityFile = id_rsa // SSH 上传文件到远端服务器
sshPut remote: remote, from: 'user-authority/target/user-authority-0.0.1-SNAPSHOT.jar', into: '/opt/'
sshCommand remote: remote, command: "sh /opt/test.sh"
}
}
echo '部署完成'
}
}
}
}
  • 此处maven构建过程中遇到一个坑

由于项目需要拉取私服的依赖包,需要加载项目中使用的settings.xml文件

把使用私服配置的settings.xml文件放到项目src目录下

  • 配置maven依赖包的缓存

  • 注释原有settings.xml的repository路径,走coding默认环境的maven。

  • 使用maven构建命令并指向需要加载的settings.xml文件

mvn -T 1C clean install -D maven.test.skip=true -D maven.compile.fork=true -s ./settings.xml

  • 写好pipeline构建脚本后,点击【立即构建】coding会根据Jenkinsfile自动完成脚本,构建成后会生成项目jar包,并把项目jar包推送至远端服务器,远程执行test.sh脚本运行SpringBoot项目。

  • 通过coding构建控制台日志可以看到项目已成功启动,访问结果如下:

  • coding自动构建--触发规则

    可以根据项目中源码变动情况来触发自动构建job



通过上图可以设置根据不同的触发规则来自动构建项目达到自动发布的目的。


更多测试技术分享、学习资源以及一些其他福利可关注公众号:【Coding测试】获取:

记录:coding持续集成之自动发布项目的更多相关文章

  1. 使用Docker构建持续集成与自动部署的Docker集群

    为什么使用Docker " 从我个人使用的角度讲的话  部署来的更方便 只要构建过一次环境 推送到镜像仓库 迁移起来也是分分钟的事情 虚拟化让集群的管理和控制部署都更方便 hub.docke ...

  2. 利用Travis CI+GitHub实现持续集成和自动部署

    前言 如果你手动部署过项目,一定会深感持续集成的必要性,因为手动部署实在又繁琐又耗时,虽然部署流程基本固定,依然容易出错. 如果你很熟悉持续集成,一定会同意这样的观点:"使用它已经成为一种标 ...

  3. 持续集成~Jenkins构建GitHub项目的实现

    有了前两讲的基础,这回我们就可以把github上的项目做到CI(jenkins)里了,让它自动去集成部署,持续集成~Jenkins里的NuGet和MSBuild插件,持续集成~Jenkins里的pow ...

  4. gitlab持续集成,自动部署

    写这篇文章的目的是,实现提交代码到gitlab上的一个项目时,自动打包,并将包发布到另一台服务器上,重启tomat.如有问题,可以联系本人QQ:409838567 gitlab-ci,是基于gitla ...

  5. AspNetCore&Coding持续集成

    对于现有很多持续集成工具来讲,功能越来越高级,使用了 Coding 有大半年时间,越发觉好用,特别是没钱续费服务器时,找到了新的羊毛. 一.众多持续集成工具 现在可用的持续集成工具繁多,各大云服务商都 ...

  6. Jenkins+Maven+Svn搭建持续集成环境持续集成和自动部署

    Jenkins和Hudson有很深的渊源,Jenkins目前更新频繁,目前选用Jenkins为持续集成工具和自动部署 Jenkins的使用有很多的介绍,主要记录如下要点: 192.168.1.240: ...

  7. Jenkins持续集成_02_添加python项目&设置定时任务

    前言 自动化测试脚本编写后,最终目的都是持续集.持续集成可以实现一天多次部署运行自动化脚本,对功能进行不断监控测试.由于小编使用python编写的自动化脚本,这里仅讲解下如何在Jenkins中添加py ...

  8. 基于TeamCity的asp.net mvc/core,Vue 持续集成与自动部署

    一 Web Server(Windows)端的配置 1.配置IIS,重要的是管理服务 1.1 配置FTP(前端NPM项目需要) 该步骤略,如果是在阿里云ESC上,需要开启端口21(用来FTP认证握手) ...

  9. Jenkins持续集成实践之java项目自动化部署

    关于Linux安装Jenkins可以参考我的这篇博文Ubuntu16.04环境安装jenkins 1.安装部署插件 进入插件管理,并搜索该插件Deploy to container Plugin进行安 ...

  10. 剑指架构师系列-持续集成之Maven实现项目的编译、发布和部署

    Maven组织项目进行编译.部署 Maven项目基本的结构说明如下: mazhi  // 控制所有荐的编译.部署.发布 mazhi-app-parent  // 项目的父项目,有一些公共的设置可以被子 ...

随机推荐

  1. 10. 从0学ARM-基于Exynos4412的pwm详解

    一.什么是PWM PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码 ...

  2. C语言基础函数

    C语言 文件操作 fopen(filename, "r") // 只读模式打开文件 -r // 只读 -w // 可写 -b // 二进制 fgetc(fd) // 从fd获取ch ...

  3. element UI el-table 合并单元格

    效果图如下: template 代码: <el-table ref="fundBalanceDailyReportTable" :span-method="obje ...

  4. VMware 安装 OpenWrt

    准备 OpenWrt VMDK 固件映像 你可以直接下载 VMDK 版本的 OpenWrt 固件映像,或者自己构建一个,或者从 IMG 映像文件转换.一般来说 IMG 映像文件较为容易获取,因此下面介 ...

  5. 操作 JAR 文件

    列出 JAR 文件内容 使用 jar 命令来列出 JAR 文件的内容: jar tf myapp.jar -t 选项表示列出文件,-f 表示指定 JAR 文件. 解压 JAR 文件 使用 jar 命令 ...

  6. Vert.x HttpClient调用后端服务时使用Idle Timeout和KeepAlive Timeout的行为分析

    其实网上有大量讨论HTTP长连接的文章,而且Idle Timeout和KeepAlive Timeout都是HTTP协议上的事情,跟Vert.x本身没有太大关系,只不过最近在项目上遇到了一些问题,用到 ...

  7. ASP.NET Core – Razor Pages 冷知识

    Multiple Form Binding 问题 在一个 page 里面有 2 张 form, 那么就会有 2 个 model binding. 当任何一个 submit 的时候. 由于 2 个 mo ...

  8. 适用于 VitePress 的公告插件开发实记

    前言 笔者维护的 VitePress 博客主题在近1年多的时间里集成了非常多功能,不少用户希望将里面的部分功能分离出来,方便在其它 VitePress 站点也可以独立使用. 其中分离的第一个组件类型的 ...

  9. 【漏洞分析】20240507-SATURN:当闪电贷遇上有缺陷的通缩机制

    背景信息 2024 年 5 月 6 日,SATURN 代币遭受价格操控攻击,损失 15 BNB.攻击发生的原因是由于 SATURN 代币的代币通缩机制设计不合理,使得攻击者可以通过燃烧池子中的 SAT ...

  10. WPF中的ListBox怎么添加删除按钮并删除所在行

    直接上代码: 第一步:创建测试类 public class BeautifulGirl { public string Name { get; set; } } 第二步:创建viewmodel和数据源 ...