本文介绍使用Jenkins自动打包发布spring boot项目,我们在没有使用持续集成工具的情况下,开发好的spring boot项目,通过maven打包,上传jar包到服务器上,通过java -jar的形式启动项目;现在我们将这样的流程交给Jenkins去做,那么Jenkins需要负责更新最新的代码以及打包和发布服务,Jenkins需要有实现这些功能的插件和软件才能去完成这些任务,所以前提条件是安装Jenkins的机器上本身就有安装jdk、git、maven等软件,如果是centos系统可以参考 centos7安装jdk、git、maven ,并且Jenkins中还需要安装maven集成插件、git插件等;全局插件配置中需要配置jdk、maven、git路径等等(因为Jenkins需要知道这些软件的路径然后去使用这些软件完成工作)。
Jenkins下载安装
1.插件安装
在可选插件中搜索选中要安装的插件之后,页面最下方有两个安装按钮:分别是 Install without restart和Download now and install after restart;其中Install without restart会立刻安装并可以勾选自动重启,那么在jenkins中就可以立即感知到安装的插件,Download now and install after restart是立刻安装稍后重启,那么需要后面手动重启之后jenkins才能感知到安装的插件(有些新版本的Jenkins不需要重启也能感知到安装的插件)。
如果需要手动重启的话:
a、运行jenkins的时候未后台运行的情况下那么关闭终端或者ctril+c关闭jenkins服务
b、如果是后台运行jenkins的情况下则kill掉Jenkins的进程
再次执行java -jar jenkins.war命令启动jenkins服务,重新登录之后就可以看到刚刚安装的插件。
安装maven插件 Maven Integration/Maven Integration plugin
这一步是在Jenkins本身不能新建maven项目的任务的情况下才安装maven集成插件,如果你的Jenkins已经支持maven项目的任务的话就不需要进行安装即当你新建任务的时候有maven项目的选项就不需要安装(因为本文介绍的发布spring boot项目的方式采用的是Jenkins的 maven项目 的任务,所以需要安装 maven插件 ,如果采用比如 Pipeline 流水线等任务发布则可以不安装此maven插件):

没有的话进行安装:

选择 Install without restart 立即安装

可勾选如下多选框,进行自动重启Jenkins

重启Jenkins之后,就可以在已安装的插件里面搜索到刚刚安装的插件,并且创建任务时也有 maven项目 的选项:

GitHub/GitHub plugin安装
在开始使用Jenkins之前,我们进行了Jenkins推荐插件的安装,一般在那里就已经安装了github plugin,所以在已安装里面可以直接搜索到github plugin,如果没有的话则进行安装

GitLab/GitLab Plugin和Gitlab Hook/Gitlab Hook Plugin 两个插件安装 有些jenkins版本可能这两个插件都在GitLab/GitLab Plugin中,所以只需要安装这一个插件即可

2.全局插件配置
将jdk、git、maven配置好之后在页面的最下方有 保存 按钮

页面顶部maven配置默认即可不需要修改

jdk配置
a、自动安装:


提供了以下几种方式,可以选择从官网直接安装

b、选择本地目录安装-填写本地jdk目录(即环境变量中JAVA_HOME的路径)

如果是centos系统的话,JAVA_HOME是配置在 /etc/profile 文件中的,可以通过 vi/vim 打开。

如果centos中jdk采用的yum安装,并且没有在 /etc/profile 中配置JAVA_HOME的话,路径是 /usr/lib/jvm

git配置
也提供了自动安装和本地安装-本地安装填写到git.exe文件的路径

centos中采用tar.gz安装的git的话也在 /etc/profile 中配置了GIT_HOME即git的安装路径,这个路径下面的bin目录中的 git 所在的路径就是这里需要填写的路径;或者填写 /bin/git (centos安装git之后会在bin目录中加入git可执行文件,所以填写这个路径也可以)


maven配置
本地安装填写到maven根目录

centos中采用的tar.gz安装的maven的话,同样在 /etc/profile 中配置了MAVEN_HOME路径即解压maven压缩包之后的路径


注意:这里只是采用的 maven项目 的任务完成spring boot项目的持续集成持续部署,也可以采用比如 Pipeline 流水线等任务实现。
1.新建maven项目的任务

2.配置git仓库
因为Jenkins需要拉取git上的代码,在Jenkins中配置git仓库的SSH地址即可
复制GitHub仓库中项目的SSH地址

Jenkins中填写SSH地址

如果填写GitHub仓库的SSH地址之后,出现如下错误:
An internal error occurred during form field validation (HTTP 403). Please reload the page and if the problem persists, ask the administrator for help.
按照提示刷新页面即可,只是刷新页面之前填写的数据会丢失,需要重新填写;一般来说刷新之后再次填写SSH地址之后,不会出现该错误了,但是有可能会出现如下的错误:

解决方式:
首先引起这个问题的原因可能是以下两个原因:
1.Jenkins中没有安装github插件或者Jenkins的全局插件配置没有配置到本机上的可执行的git文件目录(即git.exe的目录)- - -这两点的配置在前面准备工作中已做
2.未在git仓库中配置git账号的SSH公钥或者未在Jenkins中配置git账号的私钥即Credentials(可以选SSH私钥或者用户名密码模式)
Jenkins中配置Credentials:

选择SSH私钥(默认是用户名和密码形式即输入对应的GitHub账号和密码):

输入Credentials名称和粘贴私钥:

Windows上的git公私钥地址一般在 C:\Users\Administrator.ssh

centos上的git公私钥地址一般在 /root/.ssh/

保存之后可以看到有刚刚添加的Credentials,选择这个Credentials,鼠标移开过会儿错误提示就会消失

选择对哪个分支进行构建/build
一般是对master分支进行构建

3.maven设置
Pre Steps即在bulid项目之前需要做的操作,比如执行shell脚本,不需要的话就不选择

设置maven命令即build项目的命令,不设置Jenkins也会执行maven打包,我设置的 clean install -Dmaven.test.skip=true
勾选Add timestamps to the Console Output之后Jenkins会将构建项目的日志输出在Jenkins的控制台

Maven Version出现如下提示的话需要在全局插件配置中设置本地maven的目录-在前面准备工作中已做
全局插件配置中设置好maven之后,错误提示消失

如果在pom.xml下面提示未找到pom.xml的话先不用管,后面执行任务会成功,再来看这里的时候,错误提示会消失。
Post Steps即在bulid项目之后需要做的操作,比如执行shell脚本,不需要的话就不选择

因为我们发布的是spring boot的项目,我们需要在构建完成后执行启动spring boot项目的脚本命令,选择Run only if build succeeds(仅在构建成功时运行) -> Execute shell(执行shell)

在输入框里面写入需要执行的脚本命令
mv /root/.jenkins/workspace/Test01/my-test-member/my-test-member-biz/target/my-test-member-biz-0.0.1-SNAPSHOT.jar /usr/project/member/my-test-member-biz-0.0.1-SNAPSHOT.jar
cd /usr/project/member/
BUILD_ID=dontKillMe nohup java -Xms512m -Xmx512m -jar my-test-member-biz-0.0.1-SNAPSHOT.jar &
这里的三条命令:
第一条命令:将Jenkins打包成功后生成的 my-test-member-biz-0.0.1-SNAPSHOT.jar 包,移动到 /usr/project/member/ 目录下,所以需要先创建好 /usr/project/member/ 目录
第二条命令:切换到 /usr/project/member/ 目录下
第三条命令:BUILD_ID=dontKillMe执行启动命令,nohup java -Xms512m -Xmx512m -jar my-test-member-biz-0.0.1-SNAPSHOT.jar &,如果不写BUILD_ID=dontKillMe则不会将后面的java启动命令当作是启动项目的命令执行,可能会遇到项目启动后自动关闭不进行后台运行
注意: 第一条命令 /root/.jenkins/workspace/Test01 是我的项目Jenkins打包之后存放jar包的路径,根据任务的名称不一样这个路径也不一样,/usr/project/member 是我想将启动的jar包统一放在该目录下,所以也根据自己情况来。
如果不清楚Jenkins打包之后的jar包路径,这里可以先不写,直接进行后面打包操作,在控制台中看jar包存放的路径。

4.项目构建后发送邮件
需要发送邮件的话就填写

5.手动执行
在My Views中找到刚刚创建的任务,点击右边的执行按钮,执行任务

执行成功-如果安装Jenkins的机器上的maven没有build过这个项目,第一次build的话需要下载很多的包,时间会长一些

点进去该任务->工作空间 可以看到构建之后的项目结构

Jenkins构建的项目jar包的位置
点击对应的构建记录

查看控制台输出

或者在控制台输出的最下方,有每个jar包的具体目录


如果前面配置了项目构建完成后执行的shell脚本的话,控制台输出的最下面可以看到执行shell脚本的日志:

前面只是实现了简单的项目发布(只是实现了手动执行Jenkins任务拉取项目、打包、启动项目的操作,比如项目jar包的备份、启动服务之前先停止之前的服务等都没有),下面实现项目的启动、关闭、jar包备份以及实现Jenkins自动在master分支发生变化时部署项目。
6.实现项目的启动、关闭、jar包备份
上面的 shell 中实现了项目的启动,这里增加项目关闭及jar包的备份
关闭已运行的该服务的进程
filename=my-test-member-biz-0.0.1-SNAPSHOT.jar
PID=$(ps -ef | grep $filename | grep -v grep | awk '{ print $2 }')
if [ ${PID} ];
then
echo 'Application is stpping...'
echo kill $PID DONE
kill -9 $PID
else
echo 'Application is already stopped...'
fi
备份jar包
filename=my-test-member-biz-0.0.1-SNAPSHOT.jar
var=$(date +%Y%m%d%H%M)
cp $filename $var$filename
echo "backup jar success!"
将项目关闭、启动、备份的脚本合并如下
filename=my-test-member-biz-0.0.1-SNAPSHOT.jar
PID=$(ps -ef | grep $filename | grep -v grep | awk '{ print $2 }')
if [ ${PID} ];
then
echo 'Application is stpping...'
echo kill $PID DONE
kill -9 $PID
else
echo 'Application is already stopped...'
fi
mv /root/.jenkins/workspace/Test01/my-test-member/my-test-member-biz/target/$filename /usr/project/member/$filename
cd /usr/project/member/
BUILD_ID=dontKillMe nohup java -Xms512m -Xmx512m -jar $filename &
var=$(date +%Y%m%d%H%M)
cp $filename $var$filename
echo "backup jar success!"
脚本内容太多的话,可以考虑在服务器上创建一个或多个脚本(vim 脚本名称.sh),写入上面的内容,然后赋予这些脚本可执行权限(chmod +x 脚本名称.sh);那么在Jenkins中只需要执行对应的脚本即可(sh 脚本名称.sh(注意路径,最好写需要执行的脚本的绝对路径如:sh /usr/jenkins/jenkins.sh))。
7.实现master分支提交代码,Jenkins自动更新
实现此功能需要在git远程仓库中进行如下配置,码云、GitHub、gitlab都支持该功能,只是设置的地方不同而已,这里以GitHub为例。
a、设置 Webhooks
选中GitHub中该项目的远程仓库 Settings->Webhooks->Add webhook

填写Jenkins中对应任务的地址


地址在Jenkins中的位置:


b、GitHub生成token




页面末尾点击创建


重新进入到 Personal access tokens 页面确认下生成的token确实存在GitHub中(上面点击 Generate token 之后,正常就已经保存了,没有看到刚刚生成的token则重新生成下)

c、将GitHub中生成的token配置在Jenkins中

找到GitHub

输入信息并且添加GitHub生成的token

填入token信息


d、修改任务配置
点击对应任务 -> Configure

勾选 GitHub hook trigger for GITScm polling 选项并应用保存

到此 GitHub和Jenkins中关于实现GitHub远程仓库提交了代码通知Jenkins执行对应的任务完成。
确认下GitHub中配置的 webhook 是否正常
如果配置的地址如下(绿色的勾)则说明这个地址正常,那么GitHub可以通知Jenkins执行对应任务,也就是配置成功。

如果配置的地址如下(红色的感叹号)则说明这个地址异常,需要解决这个问题GitHub才能正常通知Jenkins。

如上提示403,解决方案如下:
上面的配置中除了在GitHub中配置 webhook 以及 生成token之外,在Jenkins中 勾选了对应任务的 GitHub hook trigger for GITScm polling 选项 以及 将GitHub中生成的token配置在Jenkins中,所以再检查一遍这些工作是否都做了(有可能做了但是未保存);如果都有配置还是403,那么再次设置Jenkins中的这两处设置(因为已经确定设置好了所以不需要再次设置只需要进入对应的设置页面重新点击 Apply 和 Save 即可)

然后GitHub中点击 webhook 中对应地址右边的 Edit 按钮,不需要修改地址,点击 Update webhook 更新即可。

再次查看 webhook 应该会看到两个地址,第二个地址是可以正常通知的地址(绿色的勾),这个地址就是上面 Update webhook 之后GitHub自动更新的地址,此时就可以正常GitHub中提交了代码通知Jenkins中对应任务执行了。(第一个地址是我们自己填写的地址还是红色感叹号可以点击右边 Delete 删除掉)

还有可能是 防止跨站点请求伪造 的影响,可以在Jenkins中将这个勾选去掉。



删除任务:


错误原因:拉取代码使用的https的仓库地址,然后没有配置github账号和密码或者账号或密码错误。
解决方案:配置正确的github账号和密码,或者采用SSH的仓库地址(推荐使用SSH)

错误原因:我们在全局插件配置中设置了maven根目录,一般情况是可以使用mvn命令的,但是通过shell脚本执行mvn命令的时候(比如:流水线即Pipeline的任务中使用shell脚本执行mvn命令),是从/usr/bin目录中找 mvn 命令的,然后在/usr/bin目录中未找到mvn命令所以报错。
解决方案:为mvn命令创建软链接
ln -s/-T mvn命令目录 /usr/bin/mvn #mvn命令目录,比如:/usr/maven/apache-maven-3.8.1/bin/mvn

错误原因:在设置了全局插件配置中的maven根目录以及创建mvn软链接之后,正常情况下是可以使用mvn命令的,但是创建软链接的时候,mvn命令目录,未配置为maven中的bin目录下的mvn的话就会出现这个错误。
解决方案:创建软链接时设置为maven中bin目录下的mvn即可

错误原因:之前执行过这个任务并且未构建成功,然后因为在/root/.jenkins/workspace目录下已存在该任务的文件夹所以失败。
解决方案:将/root/.jenkins/workspace目录下的该任务的文件夹删除,再次执行任务即可
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘
我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="
我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie
假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit
我可以在Azure网站上部署RubyonRails吗? 最佳答案 还没有。目前仅支持.NET和PHP。 关于ruby-on-rails-RubyonRails可以部署在Azure网站上吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/12964010/
我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions
前置步骤我们都操作完了,这篇开始介绍jenkins的集成。话不多说,看操作1、登录进入jenkins后会让你选择安装插件,选择第一个默认的就行。安装完成后设置账号密码,重新登录。2、配置JDK和Git都需要执行路径,所以需要先把执行路径找到,先进入服务器的docker容器,2.1JDK的路径root@69eef9ee86cf:/usr/bin#echo$JAVA_HOME/usr/local/openjdk-82.2Git的路径root@69eef9ee86cf:/#whichgit/usr/bin/git3、先配置JDK和Git。点击:ManageJenkins>>GlobalToolCon
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal
Ocra无法处理需要“tk”的应用程序require'tk'puts'nope'用奥克拉http://github.com/larsch/ocra不起作用(如链接中的一个问题所述)问题:https://github.com/larsch/ocra/issues/29(Ocra是1.9的"new"rubyscript2exe,本质上它用于将rb脚本部署为可执行文件)唯一的问题似乎是缺少tcl的DLL文件我不认为这是一个问题据我所知,问题是缺少tk的DLL文件如果它们是已知的,则可以在执行ocra时将它们包括在内有没有办法知道tk工作所需的DLL依赖项? 最佳答