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

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

目标

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

  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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356650.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

比较排序算法的时间复杂度 c语言,c语言四种排序算法时间复杂度比较(10页)-原创力文档...

1、方案设计&#xff1a;我这次实验通过随机生成300&#xff10;0个随机数&#xff0c;把随机数存到数组中,用这同一组随机数据分别进行四种排序&#xff0c;直接插入排序、直接选择排序、冒泡排序和快速排序。还通过了调用txt文件把运算所需时间导出&#xff0c;分别输出各个算…

三维漫游的实现

一、本文主要是展示一个demo&#xff0c;实现的是画一个三维的立方体&#xff0c;通过滑动屏幕来旋转方向&#xff0c;上下左右来移动。直接上代码&#xff1a; MainActivity&#xff1a;package com.example.zp.a3dword;import android.graphics.Bitmap;import android.graphi…

MySQL JDBC驱动程序如何处理准备好的语句

准备的语句类型 在研究《 高性能Java持久性》一书中的“ 语句缓存”一章时&#xff0c;我有机会比较了Oracle&#xff0c;SQL Server&#xff0c;PostgreSQL和MySQL处理预准备语句的方式。 感谢Jess Balint &#xff08;MySQL JDBC驱动程序贡献者&#xff09;&#xff0c;他在…

Nodejs学习(三)-安装nodejs supervisor,提高点效率吧。

安装好了express准备写项目&#xff0c;可是发现随便改一下js都要使用npm start重新启动才能生效&#xff0c;这个很不好&#xff0c;搜索一下发现有这么一个模块supervisor。那就安装一下吧。 1.安装&#xff0c;这个必须是全局安装那就开始吧。 npm -g install supervisor 设…

网络语言不c,哪些网络用语不文明?

满意答案林昨末sk2013.02.26采纳率&#xff1a;47% 等级&#xff1a;11已帮助&#xff1a;8049人Q1. 你认为在网络上出现的不文明用语情况_B___&#xff1f;A.是人们宣泄情绪的一种重要方式 B.是当今社会的一个缩影&#xff0c;没有办法C.不应当提倡&#xff0c;应加大管理力…

android 无限旋转动画,android ——不停旋转动画

xml文件android:fromDegrees"359"android:toDegrees"0"android:duration"1000"android:repeatCount"-1"android:pivotX"50%"android:pivotY"50%"/>代码/开始旋转/public voidstartRotateAnimation(View view, …

九章算法强化班 - 课程大纲

第1章 FLAG算法面试难度提高&#xff1f;如何准备&#xff1f; 各类IT企业的面试算法难度及风格 如何解决中等难度以上的算法题 如果解决follow up问题 Two sum   1. Two sum follow up I   2. Two sum follow up II - Triangle count Kth largest element   1. 第…

JavaOne演讲者选择了您不应该错过的10个会话

确保您的会议安排中包含这些JavaOne会话 JavaOne 2015从这个星期日开始&#xff0c;数百个会话同时进行&#xff0c;因此很难筛选所有会话并选择要参加的会话。 这就是为什么我们邀请5位我们最喜欢的JavaOne发言人让我们了解他们的会议&#xff0c;并选择他们最期待的会议。 好…

谷歌发布最新版安卓Android,谷歌正式除名华为,安卓12华为首发无望,但鸿蒙将迎难顶上!...

原标题&#xff1a;谷歌正式"除名"华为&#xff0c;安卓12华为首发无望&#xff0c;但鸿蒙将迎难顶上&#xff01;前几天谷歌正式发布了新一代的安卓12系统。这也是安卓的第十二个大更新版本&#xff0c;从安卓1.0发布的2008年算起&#xff0c;安卓系统已经走过13个年…

android sd卡 格式化 rom,Android开发之获取SD卡及手机ROM容量的方法

本文实例讲述了Android获取SD卡及手机ROM容量的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;这里通过一个简单的小例子&#xff0c;来获取SD卡的容量和手机ROM的容量&#xff0c;代码如下&#xff1a;package com.urovo.sdcardspace;import java.io.File;impor…

未知的生成错误 因为没有预加载,所以无法解析程序集 GalaSoft.MvvmLight

使用wpf开发时&#xff0c;在ViewModel中引用了DevExpress注册的GalaSoft.MvvmLight命名空间&#xff0c;使用其ViewModelBase&#xff0c;在View界面中绑定事件时出现错误&#xff1a; 错误 13 未知的生成错误“因为没有预加载&#xff0c;所以无法解析程序集“GalaSoft.MvvmL…

maven原型_Maven原型创建技巧

maven原型我最近需要为姜黄SOA项目创建一些Maven原型。 对于不了解的人来说&#xff0c; Maven原型是一种基于一些预先罐装的项目模板生成项目的方法。 对于当前的姜黄SOA原型&#xff0c;它将创建一个多模块Maven项目&#xff0c;其中包含Interface和Service项目以及基本的WSD…

android 副mic测试,【收藏】Android Audio Framework CTS Verifier 测试方法

This new suite of tests requires human intervention and some external hardware including a Loopback Plug, a USB reference microphone and external speakers. For devices without 3.5 mm (⅛”) headset port, the user will be able to skip the test and mark it a…

python的数与字符串

数的类型&#xff1a; >>符号整数型(int)&#xff1a;0、1、-1 >>长整型(long)&#xff1a;88888888、999999999 >>浮点型(float)&#xff1a;2.77777、3.4445544 >>布尔型(bool)&#xff1a;True、False >>复数型(complex)&#xff1a;42j、-92…

Java在几乎所有方面都可以胜任本机响应

我与一位同事讨论了Java与JavaScript的话题&#xff0c;这是一个有问题的话题。 然后&#xff0c;他提到React Native多么出色&#xff0c;我决定我必须研究一下&#xff0c;也许要为Codename One掌握一些想法…… 那里有一些不错的主意&#xff0c;但是它们都不是革命性的或例…

魅蓝android底层是什么,魅蓝E2的手机系统是什么

魅蓝E2的手机系统是什么魅蓝E2的手机系统是Flyme 6系统。魅蓝E2搭载了基于YunOS底层深度定制的Flyme 6系统&#xff0c;相交于Flyme 5系列&#xff0c;Flyme 6拥有更轻巧明快的设计元素&#xff0c;辅以让人称颂的人工智能技术One Mind&#xff0c;可以有效保障魅蓝E2日常使用流…

android夜间模式揭露动画,Android Material Design系列之夜间模式

今天我们讲讲夜间模式的实现&#xff0c;这篇文章的名字应该叫&#xff1a;《Android Material Design系列之夜间模式》。在Android 5.0 之后&#xff0c;实现夜间模式并非很难了&#xff0c;支持的5.0库提供了非常简单的实现方式。不信&#xff0c;你就往下看。首先说&#xf…

reader dc

https://get.adobe.com/cn/reader/otherversions/转载于:https://www.cnblogs.com/zengkefu/p/5981109.html

jboss drools_JBoss Drools –入门

jboss drools这篇文章是关于我如何掌握JBoss Drools的 。 其背后的原因是&#xff1a;SAP收购了我公司当前的规则引擎&#xff0c;而Drools是我们将寻找的另一种选择&#xff0c;只要有人有能力提高概念验证的能力。 尽管似乎有大量的文档&#xff0c;但是我总是会通过示例来发…

Android开发环境(IDE)

一&#xff1a;Eclipse 1、装JDK&#xff1b; 2、装Eclipse&#xff1b;//应与JDK同为32/64位。 3、装ADT&#xff1b; 4、装android sdk&#xff1b; 推荐下载ADT bundle包&#xff08;包含Eclipse&#xff0c;Android SDK Manager&#xff0c;sdk&#xff09;。此Eclipse已经…