草庐IT

持续集成Jenkins (四)Jenkins+git+maven项目构建、自动化部署

鮀城小帅 2024-01-13 原文
  1. GIT配置

1.1 前言:需要安装 git 客户端.

yum install git

1.2 Jenkins 配置插件  Git 

在仪表盘选择Manage Jenkins>>Plugin Manager>>进入如下页面,可以选择可选的插件,安装完成后的插件在installed里面可以看到,我这里已经安装了

1.3 Jenkins 选择 git 路径

在后面的构建过程可以看到,使用的就是 /usr/bin/git 去拉取远程 git 仓库。

2. Jenkins 配置Git

2.1 新建任务

2.2 创建任务

2.3 配置Source Code Management

这里选择Git,然后如图配置:输入仓库地址,填入验证信息。其他按需更改。

登录gitee账号选择仓库地址获取: 

2.4 配置Credentials

当前使用 username+password类型,并填写访问 git 的用户名、密码。

2.5 配置构建步骤

从 pom.xml 进行构建 maven 项目,并配置编译打包的命令。打包命令,不要加mvn,默认前缀会加;一般为空即可,如果有需要再添加内容;可添加maven命令。

clean package -Dmaven.test.skip=true(清除以前的包,重新打包,并跳过测试) 

3. 开始构建

点击立即构建

查看Console Output查看信息,如下图所示:可以看见由Git从仓库拉取代码,并在本地执行的一个过程。

构建成功:

4. 构建过程中的问题

4.1 maven依赖问题

/m2/repository/org/springframework/boot/spring-boot-starter-parent/2.2.3.RELEASE/spring-boot-starter-parent-2.2.3.RELEASE.pom.part.lock (没有那个文件或目录)
ERROR: Failed to parse POMs
org.apache.maven.project.ProjectBuildingException: Some problems were encountered while processing the POMs:
[WARNING] 'dependencies.dependency.(groupId:artifactId:type:classifier)' must be unique: org.projectlombok:lombok:jar -> duplicate declaration of version (?) @ line 71, column 21
[FATAL] Non-resolvable parent POM for com.glorysoft:redis_tools:1.0-SNAPSHOT: Could not transfer artifact org.springframework.boot:spring-boot-starter-parent:pom:2.2.3.RELEASE from/to alimaven (http://maven.aliyun.com/nexus/content/groups/public/): /m2/repository/org/springframework/boot/spring-boot-starter-parent/2.2.3.RELEASE/spring-boot-starter-parent-2.2.3.RELEASE.pom.part.lock (没有那个文件或目录) and 'parent.relativePath' points at no local POM @ line 12, column 13

    at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:397)
    at hudson.maven.MavenEmbedder.buildProjects(MavenEmbedder.java:370)
    at hudson.maven.MavenEmbedder.readProjects(MavenEmbedder.java:340)
    at hudson.maven.MavenModuleSetBuild$PomParser.invoke(MavenModuleSetBuild.java:1330)
    at hudson.maven.MavenModuleSetBuild$PomParser.invoke(MavenModuleSetBuild.java:1124)
    at hudson.FilePath.act(FilePath.java:1200)
    at hudson.FilePath.act(FilePath.java:1183)
    at hudson.maven.MavenModuleSetBuild$MavenModuleSetBuildExecution.parsePoms(MavenModuleSetBuild.java:985)
    at hudson.maven.MavenModuleSetBuild$MavenModuleSetBuildExecution.doRun(MavenModuleSetBuild.java:689)
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:522)
    at hudson.model.Run.execute(Run.java:1896)
    at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:543)
    at hudson.model.ResourceController.execute(ResourceController.java:101)
    at hudson.model.Executor.run(Executor.java:442)
Finished: FAILURE

构建过程发生上面的报错,原因是maven拉取依赖失败。需要修改 setting.xml 中的配置,我使用的配置内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

  <localRepository>/usr/local/maven_repository</localRepository>

  <pluginGroups>  
  </pluginGroups>

  <proxies>
  </proxies>

  <servers>
  </servers>

  <mirrors>
    <mirror>
     <id>alimaven</id>
     <mirrorOf>central</mirrorOf>
     <name>aliyun maven</name>
     <url>https://maven.aliyun.com/repository/central</url>
    </mirror>

    <mirror> 
    <id>alimaven</id> 
    <name>aliyun maven</name> 
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url> 
     <mirrorOf>central</mirrorOf> 
     </mirror> 
  </mirrors>
  <profiles>   
  </profiles>
</settings>

4.2 权限问题

由于我jenkins使用的不是 root 用户,而是 jenkins 用户,所以在build生成 war 后,没有权限将 war 生成到 maven 目录下,需要进行授权:

chown -R jenkins /usr/local/maven_repository

5. 自动化部署(未完……)

5.1 插件安装

(1)安装SSH插件

如果没有安装SSH插件的话,是不支持配置远程SSH的,这里可以去插件里面看下,是否安装了。 (2) 新增全局配置

环境配置, 管理Jenkins-->Configure System 找到 Publish over SSH,点击新增,新增SSH Server,输入Hostname,Username,Password,点击Test Configuration,提示:Success 代表SSH连通远端服务器,保存即可。

注:如果没有勾选 Use password authentication, or use a different key这个选项,点击测试连接,会报错:jenkins.plugins.publish_over.BapPublisherException: Failed to connect and initialize SSH connection

创建Jenkins访问私钥:SSH

6. 单独编译子模块

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

配置:

  1. Root POM指向父pom.xml

  1. Goals and options指定构建模块的参数:mvn -pl service01-web -am clean package,单独构建jsoft-web项目以及它所依赖的其它项目。

  1. 编译多个子模块,使用多个 -pl 参数,为: -pl service01 -pl service02 。

通过上面的操作之后确实能单独构建了,但可能会同时触发Jenkins上的其它模块的项目,可以通过屏蔽下游项目来限制

选中即可实现不自动触发下游的项目。

有关持续集成Jenkins (四)Jenkins+git+maven项目构建、自动化部署的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  3. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的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服务器更新战俘

  4. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的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="

  5. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  6. ruby-on-rails - 如何使辅助方法在 Rails 集成测试中可用? - 2

    我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel

  7. ruby-on-rails - 我如何将 Hoptoad 与 DelayedJob 和 DaemonSpawn 集成? - 2

    我一直很高兴地使用DelayedJob习惯用法:foo.send_later(:bar)这会调用DelayedJob进程中对象foo的方法bar。我一直在使用DaemonSpawn在我的服务器上启动DelayedJob进程。但是...如果foo抛出异常,Hoptoad不会捕获它。这是任何这些包中的错误...还是我需要更改某些配置...或者我是否需要在DS或DJ中插入一些异常处理来调用Hoptoad通知程序?回应下面的第一条评论。classDelayedJobWorker 最佳答案 尝试monkeypatchingDelayed::W

  8. Ruby 从大范围中获取第 n 个项目 - 2

    假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit

  9. ruby - 在 Ruby 中构建长字符串的简洁方法 - 2

    在编写Ruby(客户端脚本)时,我看到了三种构建更长字符串的方法,包括行尾,所有这些对我来说“闻起来”有点难看。有没有更干净、更好的方法?变量递增。ifrender_quote?quote="NowthatthereistheTec-9,acrappyspraygunfromSouthMiami."quote+="ThisgunisadvertisedasthemostpopularguninAmericancrime.Doyoubelievethatshit?"quote+="Itactuallysaysthatinthelittlebookthatcomeswithit:themo

  10. ruby-on-rails - 从应用程序中自定义文件夹内的命名空间自动加载 - 2

    我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty

随机推荐