我将详细展示如何定期构建您的项目,然后如何进行发布。 它涉及许多工具的协作,我发现这些工具难以正确设置,这就是我编写此代码的原因。
目标
我将向您展示如何实现以下两种方案。 第一个是如何进行常规开发的非发行版:
- 实现一些东西,提交并推送到GitLab。
- 通过GitLab的Web钩子触发Jenkins构建。
- 生成,测试,组装然后将二进制JAR发布到Artifactory存储库。
第二个也是更有趣的目标是当您要构建发行版本时:
- 运行使用Gradle版本插件的参数化Jenkins构建:
- 验证项目符合要发布的特定条件。
- 使用发行版本号创建Git标签。
- 修改Gradle项目版本以允许进一步开发。
- 提交此更改并将其推送到GitLab。
- 触发另一个通用参数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