与詹金斯一起将GitLab中的Gradle项目发布到Artifactory
我將詳細(xì)展示如何定期構(gòu)建您的項(xiàng)目,然后如何進(jìn)行發(fā)布。 它涉及許多工具的協(xié)作,我發(fā)現(xiàn)這些工具難以正確設(shè)置,這就是我編寫(xiě)此代碼的原因。
目標(biāo)
我將向您展示如何實(shí)現(xiàn)以下兩種方案。 第一個(gè)是如何進(jìn)行常規(guī)開(kāi)發(fā)的非發(fā)行版:
第二個(gè)也是更有趣的目標(biāo)是當(dāng)您要構(gòu)建發(fā)行版本時(shí):
情況
我將演示描述使用Gradle構(gòu)建的真實(shí)Scala項(xiàng)目的過(guò)程。 構(gòu)建服務(wù)器是Jenkins 。 二進(jìn)制工件被發(fā)布到運(yùn)行Artifactory免費(fèi)版的服務(wù)器上。 版本控制系統(tǒng)是GitLab的免費(fèi)社區(qū)版本。 我確信您可以對(duì)任何Java應(yīng)用程序遵循本指南。 為了使本指南更加清楚,我們假設(shè)您的URL在以下位置:
- GitLab存儲(chǔ)庫(kù)(SSH)= git@gitlab.local:com.buransky / release-example.git
- Jenkins服務(wù)器= http:// jenkins /
- Artifactory服務(wù)器= http:// artifactory /
項(xiàng)目結(jié)構(gòu)
沒(méi)什么特別的。 我使用常見(jiàn)的目錄結(jié)構(gòu):
<project root>+ build (build output)+ gradle (Gradle wrapper)+ src (source code)+ main+ scala+ test+ scala- build.gradle- gradle.properties- gradlew- gradlew.bat- settings.gradle搖籃項(xiàng)目
我使用Gradle包裝器,如果尚未在機(jī)器上安裝Gradle本身,它只是下載和安裝Gradle本身的便捷工具。 不需要。 但是您需要具有以下三個(gè)文件:
settings.gradle –用于多個(gè)項(xiàng)目的通用Gradle設(shè)置,對(duì)于我們來(lái)說(shuō)并不是必需的
rootProject.name = namegradle.properties –包含組名稱,項(xiàng)目名稱和版本
group=com.buransky name=release-example version=1.0.0-SNAPSHOTbuild.gradle – Gradle項(xiàng)目的主要定義
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}' }添加以下內(nèi)容以生成帶有源的JAR文件:
task sourcesJar(type: Jar, dependsOn: classes) {classifier = 'sources'from sourceSets.main.allSource }artifacts {archives sourcesJararchives jar }讓我們測(cè)試一下。 從shell運(yùn)行此命令:
$ gradle assemble :compileJava :compileScala :processResources :classes :jar :sourcesJar :assembleBUILD SUCCESSFUL現(xiàn)在,您應(yīng)該在build / libs目錄中有兩個(gè)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由于我尚未使用必需的參數(shù)運(yùn)行發(fā)布任務(wù),因此該構(gòu)建是交互式的,要求我首先輸入(或確認(rèn))發(fā)布版本1.0.0。 然后,它再次要求我輸入下一個(gè)工作版本,該插件自動(dòng)建議該版本為1.0.1-SNAPSHOT。 我什么都沒(méi)輸入,我只是按回車鍵確認(rèn)了默認(rèn)值。
查看Git歷史記錄,您應(yīng)該在本地存儲(chǔ)庫(kù)以及GitLab中看到一個(gè)名為v1.0.0的標(biāo)簽。 還要打開(kāi)gradle.properties文件,您應(yīng)該看到該版本已更改為version = 1.0.1-SNAPSHOT。
發(fā)布任務(wù)需要做很多事情。 例如,您的工作目錄不得包含未提交的更改。 或您所有的項(xiàng)目依賴項(xiàng)都必須是發(fā)行版(它們不能是快照)。 否則您當(dāng)前的分支必須是主分支。 另外,您還必須具有在GitLab中推送到master分支的權(quán)限,因?yàn)榘l(fā)布插件將執(zhí)行g(shù)it push。
設(shè)置工廠
在Artifactory方面沒(méi)有特殊要求。 我假設(shè)它已經(jīng)啟動(dòng)并在http:// artifactory /運(yùn)行。 當(dāng)然,您的網(wǎng)址可能有所不同。 默認(rèn)安裝已經(jīng)有兩個(gè)存儲(chǔ)庫(kù),我們將發(fā)布這些存儲(chǔ)庫(kù):
- libs-release-local
- libs-snapshot-local
Jenkins Artifactory插件
該插件將Jenkins與Artifactory集成在一起,從而可以發(fā)布來(lái)自Jenkins構(gòu)建的工件。 安裝插件,轉(zhuǎn)到Jenkins配置,在Artifactory部分中添加新的Artifactory服務(wù)器并進(jìn)行以下設(shè)置:
- 網(wǎng)址= http:// artifactory /(您有所不同)
- 默認(rèn)部署者憑證
- 為有權(quán)部署的現(xiàn)有Artifactory用戶提供用戶名和密碼
單擊測(cè)試連接按鈕,以確保該部分正常工作。
持續(xù)集成Jenkins構(gòu)建
這是在每次向master分支提交并推送到GitLab之后運(yùn)行的構(gòu)建。 將其創(chuàng)建為新的自由式項(xiàng)目,并為其命名。 這是此構(gòu)建的步驟和設(shè)置的列表:
- 源代碼管理– Git
- 儲(chǔ)存庫(kù)URL = git@gitlab.local:com.buransky / release-example.git(您有所不同)
- 構(gòu)建觸發(fā)器
- 輪詢SCM(這是必需的,以便GitLab上的Webhook起作用)
- 搭建環(huán)境
- Gradle-Artifactory集成(需要Artifactory插件)
- 人工配置
- Artifactory服務(wù)器= http:// artifactory /(您有所不同)
- 構(gòu)建–調(diào)用Gradle腳本
- 使用Gradle包裝器
運(yùn)行構(gòu)建,然后轉(zhuǎn)到Artifactory,以檢查快照是否已成功發(fā)布。 我使用樹(shù)瀏覽器導(dǎo)航到libs-snapshot-local / com / buransky / release-example / 1.0.1-SNAPSHOT。 在那里您應(yīng)該找到:
- 二進(jìn)制JAR
- 源JAR
- POM文件
每次運(yùn)行此構(gòu)建時(shí),都會(huì)在此處添加新的三個(gè)文件。 您可以配置Artifactory刪除舊快照以節(jié)省空間。 我只保留5張最新快照。
從GitLab觸發(fā)Jenkins構(gòu)建
我們太懶了,無(wú)法手動(dòng)運(yùn)行我們剛剛創(chuàng)建的持續(xù)集成Jenkins構(gòu)建。 我們可以將GitLab配置為在每次推送后自動(dòng)為我們完成。 轉(zhuǎn)到您的GitLab項(xiàng)目設(shè)置的Web Hooks部分。 輸入以下內(nèi)容,然后單擊“添加Web掛鉤”按鈕:
- 網(wǎng)址= http:// jenkins / git / notifyCommit?url=git@gitlab.local:com.buransky / release-example.git
- 嘿!
- 觸發(fā)=推送事件
如果嘗試測(cè)試此掛鉤并單擊“測(cè)試掛鉤”按鈕,可能會(huì)驚訝于沒(méi)有觸發(fā)任何構(gòu)建。 原因(通常)可能是該機(jī)制非常智能,如果沒(méi)有新的提交,則不會(huì)運(yùn)行該構(gòu)建。 因此,請(qǐng)?jiān)谠创a中進(jìn)行更改,提交,推送,然后觸發(fā)Jenkins構(gòu)建。
休息一下,喝杯咖啡
這已經(jīng)是很多工作了。 我們現(xiàn)在可以做很多事情。 服務(wù)器工作并相互通信。 我希望您可能需要在各個(gè)計(jì)算機(jī)之間設(shè)置SSH,但這超出了此范圍。 準(zhǔn)備繼續(xù)嗎? 讓我們釋放這個(gè)sh * t。
通用Jenkins構(gòu)建后將發(fā)布發(fā)布給Artifactory
我們將創(chuàng)建一個(gè)參數(shù)化的Jenkins構(gòu)建,該構(gòu)建從git中檢出發(fā)行版本,進(jìn)行構(gòu)建并將工件部署到Artifactory。 此構(gòu)建是通用的,因此可以將其重新用于單個(gè)項(xiàng)目。 讓我們從新的自由式Jenkins項(xiàng)目開(kāi)始,然后設(shè)置以下內(nèi)容:
- 項(xiàng)目名稱=向Artifactory發(fā)布發(fā)行
- 此構(gòu)建已參數(shù)化
- 字符串參數(shù)
- 源代碼管理– Git
- 存儲(chǔ)庫(kù)URL = $ GIT_REPOSITORY_URL
- 搭建環(huán)境
- 開(kāi)始構(gòu)建之前刪除工作區(qū)
- 人工配置
- Artifactory服務(wù)器= http:// artifactory /(您有所不同)
- 構(gòu)建–調(diào)用Gradle腳本
- 使用Gradle包裝器
通用Jenkins構(gòu)建以發(fā)布Gradle項(xiàng)目
我們還需要一個(gè)可重用的參數(shù)化Jenkins構(gòu)建,該構(gòu)建使用提供的參數(shù)運(yùn)行Gradle版本插件,然后觸發(fā)我們已經(jīng)創(chuàng)建的通用發(fā)布Jenkins構(gòu)建。
- 項(xiàng)目名稱= Release Gradle項(xiàng)目
- 此構(gòu)建已參數(shù)化
- 字符串參數(shù)
- 源代碼管理– Git
- 存儲(chǔ)庫(kù)URL = $ GIT_REPOSITORY_URL
- 其他行為
- 簽到特定的本地分支機(jī)構(gòu)
- 構(gòu)建–調(diào)用Gradle腳本
- 使用Gradle包裝器
- 觸發(fā)器/調(diào)用建立在另一個(gè)項(xiàng)目上(需要參數(shù)化觸發(fā)器插件)
- 要構(gòu)建的項(xiàng)目=將發(fā)布發(fā)布到Artifactory
最終版本
現(xiàn)在,我們終于準(zhǔn)備好為我們的項(xiàng)目創(chuàng)建一個(gè)構(gòu)建,該構(gòu)建將創(chuàng)建一個(gè)發(fā)行版。 它只會(huì)調(diào)用先前創(chuàng)建的通用內(nèi)部版本。 上一次,創(chuàng)建新的自由式Jenkins項(xiàng)目,然后:
- 項(xiàng)目名稱=示例發(fā)行版
- 此構(gòu)建已參數(shù)化
- 字符串參數(shù)
- 為運(yùn)行準(zhǔn)備環(huán)境
- 保留Jenkins環(huán)境變量
- 源代碼管理– Git
- 從另一個(gè)項(xiàng)目使用SCM
- 搭建環(huán)境
- 開(kāi)始構(gòu)建之前刪除工作區(qū)
- 建立
- 使用其他項(xiàng)目中的構(gòu)建器
讓我們嘗試發(fā)布示例項(xiàng)目。 如果按照我的步驟進(jìn)行操作,則該項(xiàng)目當(dāng)前應(yīng)為1.0.1-SNAPSHOT版本。 將發(fā)布版本1.0.1,并將當(dāng)前項(xiàng)目版本提升到下一個(gè)開(kāi)發(fā)版本1.0.2-SNAPSHOT。 因此,只需運(yùn)行示例發(fā)布版本并進(jìn)行設(shè)置:
- 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
結(jié)論
我確信本指南中肯定有一些錯(cuò)誤,也許我也忘記提及關(guān)鍵步驟了。 如果您遇到任何問(wèn)題,請(qǐng)告訴我,我們將嘗試解決。 它可以在我的機(jī)器上工作,因此必須有一種方法使其在您的機(jī)器上工作。
翻譯自: https://www.javacodegeeks.com/2015/09/release-gradle-project-in-gitlab-with-jenkins-to-artifactory.html
總結(jié)
以上是生活随笔為你收集整理的与詹金斯一起将GitLab中的Gradle项目发布到Artifactory的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 终端客户是什么意思 终端客户解释
- 下一篇: 未月是农历几月 什么时候是未月