与詹金斯一起将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 sourcesJar
  archives jar
}

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

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

BUILD 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:commitNewVersion

BUILD 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-快照

使用的工具

结论

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值