jenkins构建go及java项目

转载请注明出处https://www.cnblogs.com/funnyzpc/p/14554017.html

写在前面

jenkins作为java的好基友,经历过单体项目时代->集群项目时代->容器集群分布式时代,使用稳定可靠,cpu友好(就泪存有点儿难看),如果有问题就。。。



(当然这种情况不多(_) ) , 至于后期又有了jenkins x(容器版),对于非容器环境这里这里就不介绍啦

然后简略介绍我自己的项目情况吧,说说我的思路;首先我的项目有一个后台mee(java)、mee-api(多个,为Java项目)以及gee-api项目(多个,go项目),后台项目暂不集群分布(目前够用),

mee-api及gee-api项目只是个模子,主要做分布式或集群微服务,目前只有这三个微服务在跑,整个打包部署过程。。。纯手工(很麻烦),因为专注于开发目前ci/cd也不复杂,所以就借用了本人之前写的windows自动部署小工具,目测够用,但有一点儿较为麻烦,就是对于纯开发配置较为麻烦,每次运行还是需要配合服务端脚本,同时运行命令也较为复杂(偶尔也会有莫名其妙的问题),遂~这次特意研究了下jenkins(主要是近几个公司全用这个来构建;因为我本人使用的win本,所以以下配置对于win的构建比较友好哈~(如果您是linux部署请自行将cmd脚本更改为shell脚本 目测就好)

准备

首先,你得需要安装jenkins(自不必多说了。。。),以下为jenkins宿主机(windows)系统下需要~

  • jenkins
  • maven
  • jdk
  • go

jenkins下安装插件(这里简要描述)

  • 安装

    • 路径: Manage Jenkins(jenkins管理)->Manage Plugins(插件管理)->搜索可用插件
    • 安装可用插件 ssh、git(或svn,视需求)、maven(或gradle,视需求)、
    • 配置权限模块(如果需要的话) Manage Jenkins(jenkins管理)->Global Security(全局安全)
    • 配置ssh账号(略)
    • 配置git或svn账号(略)
  • 基础配置

    • 路径: Manage Jenkins(jenkins管理)->Global Tool Configuration(全局工具配置)
    • 配置jdk

    • 配置git

    • 配置maven

    注意::在全局工具配置中无需配置go环境,这里后面再说(大坑...)

添加视图标签

  • 添加视图标签New View(构建任务会放在指定标签下)

添加java构建

  • 选择(鼠标点击)新建的视图标签,然后选择左侧的New Item

  • 填写构建的基本信息

  • 构建配置详情

添加go构建

首先说,默认按照插件的方式配置go的构建十分的麻烦(无法下载go sdk以及go项目依赖也无法拉取),当然解决的方式也很简单;

  • go mod无法下载依赖::在window cmd命令中加入对go env的GOPROXY的设置(同理对于go打包的配置也是一致的)

  • 无法使用go的命令:: 在windows cmd命令行中使用绝对路径调用其命令

以上问题的解决详见下图,具体不做解释

相关脚本

  • jenkins 执行远程脚本命令

    • go应用执行脚本

    /usr/bin/sh /mnt/sh/deploy_go.sh external-api /mnt/app/gee >/dev/null 2>&1 &

    • java(springboot)应用执行脚本

      /usr/bin/sh /mnt/sh/deploy_go.sh external-api /mnt/app/gee >/dev/null 2>&1 &

  • java 部署脚本deploy.sh,记得部署的时候使用chmod a+x deploy.sh

#!/bin/sh
export BUILD_ID=dontKillMe
export JAVA_HOME=/usr/local/java/jdk1.8.0_222
export JRE_HOME=/usr/local/java/jdk1.8.0_222/jre #项目名称 xxx.jar
project_name=$1
#部署路径
deploy_path=$2
#文件路径
upload_path=/mnt/pkg/$1 if [ -f "${upload_path}" ]; then
# kill process
ps -ef|grep ${project_name}|grep java|awk '{print $2}'|xargs kill -9
# remove file
rm -rf ${deploy_path}/${project_name}
# backup file
cp -r ${upload_path} ${deploy_path}/${project_name}_`date "+%Y%m%d%H%M%S"`
# move file
mv ${upload_path} ${deploy_path}/${project_name}
# exec deploy
cd ${deploy_path} && nohup java -jar ${deploy_path}/${project_name} >/dev/null 2>&1 &
else
exit 0
fi
  • go 部署脚本deploy_go.sh,创建脚本后同样需要chmod a+x deploy_go.sh
#!/bin/sh
export BUILD_ID=dontKillMe #example gee
project_name=$1
#deploy path
deploy_path=$2
#file path
upload_path=/mnt/pkg/$1 if [ -f "${upload_path}" ]; then
# kill process
kill -9 `ps -C ${project_name} -o pid=`
# remove file
rm -rf ${deploy_path}/${project_name}
# backup file
cp -r ${upload_path} ${deploy_path}/${project_name}_`date "+%Y%m%d%H%M%S"`
# move file
mv ${upload_path} ${deploy_path}/${project_name}
# add exec auth
chmod a+x ${deploy_path}/${project_name}
# exec deploy
cd ${deploy_path} && nohup ./${project_name} > ./${project_name}.log 2>&1 &
else
exit 0
fi

=>完结,如能有谬误之处请留言哈<=

jenkins构建go及java项目的更多相关文章

  1. 三、使用Maven构建简单的java项目

    前边,我刚搭建了Maven环境,还有给大家推荐了学习资源,这个小节,我们来就来,,简单的玩玩maven. 1.所需工具: 1.Eclipse     2.apache-maven-3.3.9   3. ...

  2. Jenkins构建Maven多模块项目时,单独编译子模块,并且不触发构建其它模块

    一.Jenkins构建Maven多模块项目时,单独编译子模块 配置: 1.Root POM指向父pom.xml 2.Goals and options指定构建模块的参数:mvn -pl jsoft-w ...

  3. Jenkins+Gradle+Sonar进行Java项目代码分析

    Jenkins+Maven+Sonar与Jenkins+Gradle+Sonar配置方法很相似,区别就是Java项目所用的编译工具不同,一个是maven,一个是gradle 使用maven编译工具的可 ...

  4. Ant构建与部署Java项目---入门

    原文地址:http://tech.it168.com/j/2007-11-09/200711091344781.shtml Ant是一个Apache基金会下的跨平台的构件工具,它可以实现项目的自动构建 ...

  5. Gradle入门(3):构建第一个Java项目

    Gradle插件通过引入特定领域的约定和任务来构建你的项目.Java插件是Gradle自身装载的一个插件.Java插件提供的基本功能远比源代码编译和打包多.它为你的项目建立了一个标准的项目布局,并确保 ...

  6. 使用Maven构建和测试Java项目

    我们在创建项目时要学习的是如何使用 Maven 来创建一个 Java 应用程序.现在将学习如何构建和测试应用程序. 进入到 C:\MVN 目录我们准备创建来 java应用程序.打开 consumerB ...

  7. 使用jenkins构建一个自由风格的项目

    一.创建一个freestyle风格的构建项目 二.输入任务名称和选择任务类型 三.配置项目 3.1:选择代码托管 3.2:到gitlab上去配置deploy key 3.3:到jenkins服务器去生 ...

  8. jenkins 构建一个前端web项目

    Jenkins发布web前端代码 “系统管理”“管理插件”“已安装” 检查是否有“Git plugin”和“Publish Over SSH”两个插件,如果没有,则需点击“可选插件”,找到它并安装 ...

  9. [Jenkins]Jenkins构建时提示java.io.IOException: No space left on device

    突然发现Jenkins的Job全部都停了,打开Jenkins发现所有的slave机器,均提示: 点开Dead(!),提示Thread has died,如下图: 看图好像说是Jenkins所在的服务器 ...

随机推荐

  1. learning 2018

    learning 2018 https://scotch.io/courses https://laod.cn/hosts/ipv6-dns.html xgqfrms 2012-2020 www.cn ...

  2. Full Stack Web Development

    Full Stack Web Development Web Stacks MEAN (Mongo, Express, Angular and Node) LAMP (Linux, Apache, M ...

  3. 区块链项目NGK未来价值几何?

    没有人可以预知NGK未来会涨到多少钱,就像比特币只有10美分时,也无法预测它会涨到现在的价格⼀样.那时候人们把CPU超频挖矿只作为⼀种爱好和娱乐.所以,人们也没有办法预知NGK未来的价格.但可以知道的 ...

  4. NGK数字钱包的特点是什么?NGK钱包的优点和缺点是什么?

    说起区块链数字资产,那就离不开谈到数字钱包.数字钱包不仅有资产管理的功能,还可以进行资产理财.资产交易,甚至能为公链DAPP导流. 对于NGK公链而言,其数字钱包已然成为了解NGK公链的基础条件.NG ...

  5. 在.NET Core 中使用 FluentValidation 进行规则验证

    不用说,规则验证很重要,无效的参数,可能会导致程序的异常. 如果使用Web API或MVC页面,那么可能习惯了自带的规则验证,我们的控制器很干净: public class User { [Requi ...

  6. 关于电脑硬盘的二三事(SATA接口)

    @ 目录 前言 接口分类 SATA3接口 机械硬盘 机械硬盘的特点和主要参数 西部数据机械盘分类 绿·蓝·黑盘 红盘 紫盘 金盘 希捷机械盘分类 酷狼 酷鱼 酷鹰 银河 SATA3接口的固态硬盘 固态 ...

  7. TorchVision 预训练模型进行推断

    torchvision.models 里包含了许多模型,用于解决不同的视觉任务:图像分类.语义分割.物体检测.实例分割.人体关键点检测和视频分类. 本文将介绍 torchvision 中模型的入门使用 ...

  8. python实现斑马打印机网络打印

    最近一个礼拜调研了下斑马打印机怎样实现网络打印. 缘起: 之前实现打印方式是直接使用USB接口连接PC,使用串口通讯提供一套打印服务,在系统界面配置相关参数,即可调用打印服务: 后来业务需求变化,现场 ...

  9. 《C++ Primer》笔记 第12章 动态内存

    shared_ptr和unique_ptr都支持的操作 解释 shared_ptr sp或unique_ptr up 空智能指针,可以指向类型为T的对象 p 将p用作一个条件判断,若p指向一个对象,则 ...

  10. HDOJ-1686(KMP算法)

    Oulipo HDOJ-1686 本题的思路就是KMP,和HDOJ-1711思路一样,不再赘述详情可以看链接:1711题解 #include<iostream> #include<c ...