我将详细展示如何定期构建您的项目,然后如何进行发布。 它涉及许多工具的协作,我发现这些工具难以正确设置,这就是我编写此代码的原因。

目标

我将向您展示如何实现以下两种方案。 第一个是如何进行常规开发的非发行版:

  1. 实现一些东西,提交并推送到GitLab。
  2. 通过GitLab的Web钩子触发Jenkins构建。
  3. 生成,测试,组装然后将二进制JAR发布到Artifactory存储库。

第二个也是更有趣的目标是当您要构建发行版本时:

  1. 运行使用Gradle版本插件的参数化Jenkins构建:

    1. 验证项目符合要发布的特定条件。
    2. 使用发行版本号创建Git标签。
    3. 修改Gradle项目版本以允许进一步开发。
    4. 提交此更改并将其推送到GitLab。
  2. 触发另一个通用参数Jenkins构建,以将发布工件发布到Artifactory。

情况

我将演示描述使用Gradle构建的真实Scala项目的过程 构建服务器是Jenkins 。 二进制工件被发布到运行Artifactory免费版的服务器上。 版本控制系统是GitLab的免费社区版本。 我确信您可以对任何Java应用程序遵循本指南。 为了使本指南更加清楚,我们假设您的URL在以下位置:

  • GitLab存储库(SSH)= git@gitlab.local:com.buransky / release-example.git
  • Jenkins服务器= http:// jenkins /
  • Artifactory服务器= http:// artifactory /

项目结构

没什么特别的。 我使用常见的目录结构:

<project root>+ build (build output)+ gradle (Gradle wrapper)+ src (source code)+ main+ scala+ test+ scala- build.gradle- gradle.properties- gradlew- gradlew.bat- settings.gradle

摇篮项目

我使用Gradle包装器,如果尚未在机器上安装Gradle本身,它只是下载和安装Gradle本身的便捷工具。 不需要。 但是您需要具有以下三个文件:

settings.gradle –用于多个项目的通用Gradle设置,对于我们来说并不是必需的

rootProject.name = name

gradle.properties –包含组名称,项目名称和版本

group=com.buransky
name=release-example
version=1.0.0-SNAPSHOT

build.gradle – Gradle项目的主要定义

buildscript {repositories {mavenCentral()maven { url 'http://repo.spring.io/plugins-release' }}...
}plugins {id 'scala'id 'maven'id 'net.researchgate.release' version '2.1.2'
}group = group
version = version...release {preTagCommitMessage = '[Release]: 'tagCommitMessage = '[Release]: creating tag 'newVersionCommitMessage = '[Release]: new snapshot version 'tagTemplate = 'v${version}'
}

添加以下内容以生成带有源的JAR文件:

task sourcesJar(type: Jar, dependsOn: classes) {classifier = 'sources'from sourceSets.main.allSource
}artifacts {archives sourcesJararchives jar
}

让我们测试一下。 从shell运行此命令:

$ gradle assemble
:compileJava
:compileScala
:processResources
:classes
:jar
:sourcesJar
:assembleBUILD SUCCESSFUL

现在,您应该在build / libs目录中有两个JAR文件:

  • 版本示例1.0.0-SNAPSHOT.jar
  • 版本示例1.0.0-SNAPSHOT-sources.jar

好的,所以如果这可行,让我们尝试释放它:

$ gradle release
:release
:release-example:createScmAdapter
:release-example:initScmAdapter
:release-example:checkCommitNeeded
:release-example:checkUpdateNeeded
:release-example:unSnapshotVersion
> Building 0% > :release > :release-example:confirmReleaseVersion
??> This release version: [1.0.0]
:release-example:confirmReleaseVersion
:release-example:checkSnapshotDependencies
:release-example:runBuildTasks
:release-example:beforeReleaseBuild UP-TO-DATE
:release-example:compileJava UP-TO-DATE
:release-example:compileScala
:release-example:processResources UP-TO-DATE
:release-example:classes
:release-example:jar
:release-example:assemble
:release-example:compileTestJava UP-TO-DATE
:release-example:compileTestScala
:release-example:processTestResources
:release-example:testClasses
:release-example:test
:release-example:check
:release-example:build
:release-example:afterReleaseBuild UP-TO-DATE
:release-example:preTagCommit
:release-example:createReleaseTag
> Building 0% > :release > :release-example:updateVersion
??> Enter the next version (current one released as [1.0.0]): [1.0.1-SNAPSHOT]
:release-example:updateVersion
:release-example:commitNewVersionBUILD SUCCESSFUL

由于我尚未使用必需的参数运行发布任务,因此该构建是交互式的,要求我首先输入(或确认)发布版本1.0.0。 然后,它再次要求我输入下一个工作版本,该插件自动建议该版本为1.0.1-SNAPSHOT。 我什么都没输入,我只是按回车键确认了默认值。

查看Git历史记录,您应该在本地存储库以及GitLab中看到一个名为v1.0.0的标签。 还要打开gradle.properties文件,您应该看到该版本已更改为version = 1.0.1-SNAPSHOT。

发布任务需要做很多事情。 例如,您的工作目录不得包含未提交的更改。 或您所有的项目依赖项都必须是发行版(它们不能是快照)。 否则您当前的分支必须是主分支。 另外,您还必须具有在GitLab中推送到master分支的权限,因为发布插件将执行git push。

设置工厂

在Artifactory方面没有特殊要求。 我假设它已经启动并在http:// artifactory /运行。 当然,您的网址可能有所不同。 默认安装已经有两个存储库,我们将发布这些存储库:

  • libs-release-local
  • libs-snapshot-local

Jenkins Artifactory插件

该插件将Jenkins与Artifactory集成在一起,从而可以发布来自Jenkins构建的工件。 安装插件,转到Jenkins配置,在Artifactory部分中添加新的Artifactory服务器并进行以下设置:

  • 网址= http:// artifactory /(您有所不同)
  • 默认部署者凭证
    • 为有权部署的现有Artifactory用户提供用户名和密码

单击测试连接按钮,以确保该部分正常工作。

持续集成Jenkins构建

这是在每次向master分支提交并推送到GitLab之后运行的构建。 将其创建为新的自由式项目,并为其命名。 这是此构建的步骤和设置的列表:

  • 源代码管理– Git

    • 储存库URL = git@gitlab.local:com.buransky / release-example.git(您有所不同)
  • 构建触发器
    • 轮询SCM(这是必需的,以便GitLab上的Webhook起作用)
  • 搭建环境
    • Gradle-Artifactory集成(需要Artifactory插件)
  • 人工配置
    • Artifactory服务器= http:// artifactory /(您有所不同)
  • 构建–调用Gradle脚本
    • 使用Gradle包装器

运行构建,然后转到Artifactory,以检查快照是否已成功发布。 我使用树浏览器导航到libs-snapshot-local / com / buransky / release-example / 1.0.1-SNAPSHOT。 在那里您应该找到:

  • 二进制JAR
  • 源JAR
  • POM文件

每次运行此构建时,都会在此处添加新的三个文件。 您可以配置Artifactory删除旧快照以节省空间。 我只保留5张最新快照。

从GitLab触发Jenkins构建

我们太懒了,无法手动运行我们刚刚创建的持续集成Jenkins构建。 我们可以将GitLab配置为在每次推送后自动为我们完成。 转到您的GitLab项目设置的Web Hooks部分。 输入以下内容,然后单击“添加Web挂钩”按钮:

  • 网址= http:// jenkins / git / notifyCommit?url=git@gitlab.local:com.buransky / release-example.git

    • 嘿!
  • 触发=推送事件

如果尝试测试此挂钩并单击“测试挂钩”按钮,可能会惊讶于没有触发任何构建。 原因(通常)可能是该机制非常智能,如果没有新的提交,则不会运行该构建。 因此,请在源代码中进行更改,提交,推送,然后触发Jenkins构建。

休息一下,喝杯咖啡

这已经是很多工作了。 我们现在可以做很多事情。 服务器工作并相互通信。 我希望您可能需要在各个计算机之间设置SSH,但这超出了此范围。 准备继续吗? 让我们释放这个sh * t。

通用Jenkins构建后将发布发布给Artifactory

我们将创建一个参数化的Jenkins构建,该构建从git中检出发行版本,进行构建并将工件部署到Artifactory。 此构建是通用的,因此可以将其重新用于单个项目。 让我们从新的自由式Jenkins项目开始,然后设置以下内容:

  • 项目名称=向Artifactory发布发行
  • 此构建已参数化
    • 字符串参数
  • 源代码管理– Git
    • 存储库URL = $ GIT_REPOSITORY_URL
  • 搭建环境
    • 开始构建之前删除工作区
  • 人工配置
    • Artifactory服务器= http:// artifactory /(您有所不同)
  • 构建–调用Gradle脚本
    • 使用Gradle包装器

通用Jenkins构建以发布Gradle项目

我们还需要一个可重用的参数化Jenkins构建,该构建使用提供的参数运行Gradle版本插件,然后触发我们已经创建的通用发布Jenkins构建。

  • 项目名称= Release Gradle项目
  • 此构建已参数化
    • 字符串参数
  • 源代码管理– Git
    • 存储库URL = $ GIT_REPOSITORY_URL
  • 其他行为
    • 签到特定的本地分支机构
  • 构建–调用Gradle脚本
    • 使用Gradle包装器
  • 触发器/调用建立在另一个项目上(需要参数化触发器插件)
    • 要构建的项目=将发布发布到Artifactory

最终版本

现在,我们终于准备好为我们的项目创建一个构建,该构建将创建一个发行版。 它只会调用先前创建的通用内部版本。 上一次,创建新的自由式Jenkins项目,然后:

  • 项目名称=示例发行版
  • 此构建已参数化
    • 字符串参数
  • 为运行准备环境
    • 保留Jenkins环境变量
  • 源代码管理– Git
    • 从另一个项目使用SCM
  • 搭建环境
    • 开始构建之前删除工作区
  • 建立
    • 使用其他项目中的构建器

让我们尝试发布示例项目。 如果按照我的步骤进行操作,则该项目当前应为1.0.1-SNAPSHOT版本。 将发布版本1.0.1,并将当前项目版本提升到下一个开发版本1.0.2-SNAPSHOT。 因此,只需运行示例发布版本并进行设置:

  • RELEASE_VERSION = 1.0.1
  • NEW_VERSION = 1.0.2-快照

使用的工具

  • 斯卡拉 2.11
  • 摇篮 2.4
    • Gradle Release插件 2.1.2
  • 詹金斯 1.617
    • Artifactory插件 2.3.1
  • Artifactory 3.3.0
  • 亚搏体育app 7.7.2

结论

我确信本指南中肯定有一些错误,也许我也忘记提及关键步骤了。 如果您遇到任何问题,请告诉我,我们将尝试解决。 它可以在我的机器上工作,因此必须有一种方法使其在您的机器上工作。

翻译自: https://www.javacodegeeks.com/2015/09/release-gradle-project-in-gitlab-with-jenkins-to-artifactory.html

与詹金斯一起将GitLab中的Gradle项目发布到Artifactory相关推荐

  1. 詹金斯搭建_与詹金斯一起将GitLab中的Gradle项目发布到Artifactory

    詹金斯搭建 我将详细展示如何定期构建您的项目,然后如何进行发布. 它涉及许多工具的协作,我发现很难正确设置这些工具,这就是我编写此代码的原因. 目标 我将向您展示如何实现以下两种方案. 第一个是如何进 ...

  2. gitstack连接詹金斯_詹金斯的Maven报告

    gitstack连接詹金斯 代码质量是一个敏感的话题. 它会影响您的维护成本以及客户满意度. 更不用说您的开发人员使用代码的动力. 谁想要修复难看的代码,对吗? 讨论代码质量总是需要事实和数字! 因此 ...

  3. 詹金斯搭建_与詹金斯一起连续交付Heroku

    詹金斯搭建 如果您安装了Jenkins Git插件,那么利用Jenkins并针对Heroku的连续交付管道的设置就非常简单. 通过此管道,对特定Git分支的更改将导致Heroku部署. 为了使此部署过 ...

  4. 詹金斯搭建_詹金斯的Maven报告

    詹金斯搭建 代码质量是一个敏感的话题. 它会影响您的维护成本以及客户满意度. 更不用说您的开发人员使用代码的动力了. 谁想要修复难看的代码,对吗? 讨论代码质量总是需要事实和数字! 因此,这是一个简短 ...

  5. 詹金斯的Maven报告

    代码质量是一个敏感的话题. 它会影响您的维护成本以及客户满意度. 更不用说您的开发人员使用代码的动力. 谁想要修复难看的代码,对吗? 讨论代码质量总是需要事实和数字! 因此,这是一个简短的教程,介绍如 ...

  6. 詹金斯搭建_詹金斯用户大会巴黎

    詹金斯搭建 我很荣幸能协助2012年巴黎詹金斯用户大会,以下是我从不同的谈话中获得的一些笔记. 考虑到我是法语,不习惯于听很多英语 川口浩辅的欢迎辞. 首先介绍一下历史. 詹金斯(Jenkins)无辜 ...

  7. 与詹金斯一起连续交付Heroku

    如果您安装了Jenkins Git插件,那么利用Jenkins并针对Heroku的连续交付管道的设置就非常简单. 通过此管道,对特定Git分支的更改将导致Heroku部署. 为了使此部署过程正常运行, ...

  8. idea自动下载gradle_如何在IDEA中下载Gradle项目的依赖源?

    看来eclipse插件使用以下机制来执行此操作: apply plugin: 'java' apply plugin: 'eclipse' eclipse { classpath { download ...

  9. idea2019配置gradle详解_Java学习之——Gradle的安装配置、IDEA中创建Gradle的Java项目...

    Java作为一门世界级的主流编程语言,有一款高效易用的项目管理工具是Java开发者共同追求的心愿和目标.先是2000年Ant,后有2004年Maven两个工具的诞生,都在Java市场上取得了巨大的成功 ...

最新文章

  1. Java语言中小数的取整
  2. 《Effective Java》读书笔记八(异常)
  3. 为什么需要使用到多线程
  4. 20141230 mysql数值类型和列属性二
  5. SSD1306 控制核心思想 2021-08-18
  6. php大文件上传失败的原因及解决方法
  7. mysql4函数_MySQL-4.常见函数
  8. 初试 spring web mvc
  9. php 防止access token过期,微信調用接口,防止Access_token過期的方法
  10. (转)华兴资本包凡:我们这么屌,是有原因的
  11. 如何让imageView铺满屏幕?
  12. Unity播放序列帧
  13. RPG Maker MV常用的一些插件
  14. 淘宝/天猫API:item_search_jupage-天天特价
  15. Java垃圾回收器详解
  16. openwrt 19 overlay 空间不足_新桥胡同拆除19处违建!背街小巷“瘦身”后宽敞多了...
  17. 浅谈代理服务器的作用
  18. ASP.NET 安全认证(二)——灵活运用 Form 表单认证中的 deny 与 allow 及保护 .htm 等文件...
  19. python调用百度地图实现路径规划提取坐标点
  20. Debian服务器环境搭建

热门文章

  1. maven安装遇到的坑
  2. 【Python】urllib爬取动漫图片
  3. [编程入门]宏定义之闰年判断:给年份year,定义一个宏,以判别该年份是否闰年。提示:宏名可以定义为LEAP_YEAR,形参为y,既定义宏的形式为 #define LEAP_YEAR(y) (读者设计
  4. win10硬盘修复工具使用教程
  5. php中对象的遍历输出,PHP中的对象遍历技巧
  6. 如何确定python开发环境已经配置好_搭建 python 开发环境 前面安装选位置我直接回车了现在我想测试查看目录该怎么办...
  7. rabbitmq-消息追踪rabbitmq_tracing
  8. 分类器评估参数——准确度和精度的区别(足球荔枝)
  9. kafka异步发送数据_在Kafka上异步发送数据
  10. java编程学习方法_在线学习Java编程的最佳方法