jenkins构建go及java项目
jenkins构建go及java项目
写在前面
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项目的更多相关文章
- 三、使用Maven构建简单的java项目
前边,我刚搭建了Maven环境,还有给大家推荐了学习资源,这个小节,我们来就来,,简单的玩玩maven. 1.所需工具: 1.Eclipse 2.apache-maven-3.3.9 3. ...
- Jenkins构建Maven多模块项目时,单独编译子模块,并且不触发构建其它模块
一.Jenkins构建Maven多模块项目时,单独编译子模块 配置: 1.Root POM指向父pom.xml 2.Goals and options指定构建模块的参数:mvn -pl jsoft-w ...
- Jenkins+Gradle+Sonar进行Java项目代码分析
Jenkins+Maven+Sonar与Jenkins+Gradle+Sonar配置方法很相似,区别就是Java项目所用的编译工具不同,一个是maven,一个是gradle 使用maven编译工具的可 ...
- Ant构建与部署Java项目---入门
原文地址:http://tech.it168.com/j/2007-11-09/200711091344781.shtml Ant是一个Apache基金会下的跨平台的构件工具,它可以实现项目的自动构建 ...
- Gradle入门(3):构建第一个Java项目
Gradle插件通过引入特定领域的约定和任务来构建你的项目.Java插件是Gradle自身装载的一个插件.Java插件提供的基本功能远比源代码编译和打包多.它为你的项目建立了一个标准的项目布局,并确保 ...
- 使用Maven构建和测试Java项目
我们在创建项目时要学习的是如何使用 Maven 来创建一个 Java 应用程序.现在将学习如何构建和测试应用程序. 进入到 C:\MVN 目录我们准备创建来 java应用程序.打开 consumerB ...
- 使用jenkins构建一个自由风格的项目
一.创建一个freestyle风格的构建项目 二.输入任务名称和选择任务类型 三.配置项目 3.1:选择代码托管 3.2:到gitlab上去配置deploy key 3.3:到jenkins服务器去生 ...
- jenkins 构建一个前端web项目
Jenkins发布web前端代码 “系统管理”“管理插件”“已安装” 检查是否有“Git plugin”和“Publish Over SSH”两个插件,如果没有,则需点击“可选插件”,找到它并安装 ...
- [Jenkins]Jenkins构建时提示java.io.IOException: No space left on device
突然发现Jenkins的Job全部都停了,打开Jenkins发现所有的slave机器,均提示: 点开Dead(!),提示Thread has died,如下图: 看图好像说是Jenkins所在的服务器 ...
随机推荐
- javascript & call & apply & bind & new
javascript & call & apply & bind & new Javascript call() & apply() vs bind()? ht ...
- gitpod & free online ide
gitpod & free online ide Dev Environments as Code for modern DevOps teams. https://www.gitpod.io ...
- JS Calendar API
JS Calendar API js 如何获取当天是周几(一周的第几天) const date = new Date(); // Mon Mar 23 2020 15:15:36 GMT+0800 ( ...
- py django
创建项目 $ django-admin startproject server 运行项目 $ cd server $ python manage.py runserver 创建一个模块 $ pytho ...
- Swift 5.1
Swift 5.1 WebView & WKWebView https://developer.apple.com/swift-playgrounds/ https://developer.a ...
- 「NGK每日快讯」12.4日NGK公链第31期官方快讯!
- jetty的jndi
jetty的jndi和tomcat的用法 tomcat的jndi是内置的,在web.xml文件里直接默认支持的,所有web项目可以直接使用 <resources> <!-- < ...
- mysql事务的实现原理
此篇文章算是对mysql事务的一个总结,基本把mysql事务相关的知识点都涵盖到了,面试问来问去无非也就是这些,在了解这些之前我们先对mysql在执行的过程中 有一个整体的认识,如下图 如上图所示,M ...
- Spring Data Solr
1.什么是spring data solr? Solr是一个开源搜索平台,用于构建搜索应用程序.简单的来说就是作为一个搜索引擎使用. 2.solr的安装(本地安装,远程安装同) 1)解压一个tomca ...
- 缓存cache和缓冲区buffer
一.cache 1.cache的定义.从宏观上讲,缓存是处理速度不匹配的问题.可以是静态缓存(内存缓存.磁盘缓存).动态缓存(前端的缓存)和数据库缓存.另一个角度,从CPU来看,可以是寄存器和内存之间 ...