我正在使用Jenkins管道自动构建和部署我的Java应用程序。我还使用maven发布插件来执行maven部署到Artifactory。
问题是我的Jenkinsfile(或Jenkins管道配置):
您知道最后一步会创建一个无限循环,即使没有有用的提交。
以下是我的詹金斯档案中有趣的部分:
sshagent([git_credential]) {
sh "${maven_bin} --settings ${maven_settings} -DreleaseVersion=${release_version} -DdevelopmentVersion=${development_version} release:prepare release:perform -B"
}
如何打破循环(避免Jenkins在Maven提交GIT时触发新构建)?
谢谢
如果有人在循环中有同样的问题,或者后续构建被触发,但有一个触发器在每次推送到存储库时启动jenkins管道(而不是轮询)。
这是我做的人:我检查了最后一次提交是否在评论中包含“[maven-frease-plugin]”。
文件中的代码:
def lastCommit = sh returnStdout: true, script: 'git log -1 --pretty=%B'
if (lastCommit.contains("[maven-release-plugin]")){
sh "echo Maven release detected" //dont trigger build
} else {
sh "echo Last commit is not from maven release plugin" //do build steps
<..build Job...>
}
感谢@Daniel Omoto的评论,我发现Jenkins为GIT轮询提供了选项。其中一个正是我所需要的(提供的示例是针对maven release插件的!):
随着git和pull请求的出现,我认为使用maven发布插件或maven版本插件和Jenkins管道不是一个好主意。
使用这里提到的版本控制技术的多分支管道更符合持续交付:https://axelfontaine.com/blog/dead-burried.html
使用上面的版本控制技术,pom。xml现在如下所示:
<project>
...
<version>${revision}</version>
<properties>
<!-- Sane default when no revision property is passed in from the commandline -->
<revision>0-SNAPSHOT</revision>
</properties>
<scm>
<connection>scm:git:your-git-repo-url</connection>
</scm>
<distributionManagement>
<repository>
<id>artifact-repository</id>
<url>your-artifact-repo-url</url>
</repository>
</distributionManagement>
<build>
<plugins>
<plugin>
<artifactId>maven-scm-plugin</artifactId>
<version>1.9.5</version>
<configuration>
<tag>${project.artifactId}-${project.version}</tag>
</configuration>
</plugin>
</plugins>
</build>
...
</project>
现在,您可以非常轻松地在Jenkins服务器上生成版本,方法是使用Jenkinsfile配置多分支管道,以构建在所有分支上,并仅从主分支部署:
pipeline {
agent any
environment {
REVISION = "0.0.${env.BUILD_ID}"
}
triggers {
pollSCM('')
}
options {
disableConcurrentBuilds()
buildDiscarder(logRotator(numToKeepStr: '30'))
}
tools {
maven '3.5.2'
jdk 'jdk8'
}
stages {
stage ('Initialize') {
steps {
sh '''
echo "PATH = ${PATH}"
echo "M2_HOME = ${M2_HOME}"
'''
}
}
stage ('Build') {
steps {
sh 'mvn clean package'
}
}
stage ('Deploy') {
when {
branch 'master'
}
steps {
script {
currentBuild.displayName = "${REVISION}"
}
sh 'mvn deploy scm:tag -Drevision=${REVISION}'
}
}
}
}
请参阅有关如何配置多分支管道的https://jenkins.io/blog/2017/02/07/declarative-maven-project/#set-up。
使用这种技术,您只能在非主分支上开发。然后创建一个拉取请求以将您的更改合并回主分支。然后这应该会自动将您的工件部署到您的工件存储库。
补遗
使用上述方法发布到Maven存储库时,pom。xml将没有正确的版本。要让Maven发布正确的版本,请使用Flatte Maven插件:http://www.mojohaus.org/flatten-maven-plugin/usage.html.
另外,看看:https://maven.apache.org/maven-ci-friendly.html
问题内容: 我还没有找到任何有关此的信息,所以我希望你们能在这一方面帮助我 我在bitbucket中托管了一个maven项目,该项目的BitBucket WebHook指向someurl / bitbucket-hook /,此钩子触发由具有以下结构的管道定义的我的项目的构建: 问题是maven版本插件将更改推送到BitBucket,这又触发了jenkins脚本,使构建无限循环,是否有办法防止这种
我想执行一个maven版本,在运行于jdk 1.7的Jenkins安装上编译java 1.8代码 我有一个使用JDK参数插件用Java1.8编译的项目。它在进行常规构建时有效。 当我使用maven发布插件进行maven发布时,它会将JVM与java 1.7相结合,而不是插件上指定的版本。我猜它需要环境中的java版本。 如果我将JAVA_HOME for the job设置为1.8,它就会工作。
我最近尝试使用,因为它显然是Maven宇宙中构建和包发布的推荐方式。 但是我想在Eclipse中使用它,因为我的开发工作流程的其余部分是基于Eclipse的。我通常通过作为Eclipse Juno(4.2)的一部分提供的m2eclipse插件运行Maven命令 当我尝试在 Eclipse 中运行 “release:prepare” 时,我注意到了一些奇怪的事情: 在根项目目录中创建了一些额外的文件
我试图在Jenkins管道中使用JenkinsArtiFactory Plugin-Release Management功能,但我在文档中没有看到任何管道步骤(https://www.jfrog.com/confluence/display/RTF/Declarative管道语法)。 我正在寻找管道步骤,无论是脚本化/声明性步骤"阶段Maven发布构建"。PFA的截图,可以通过正常的maven工作
我有一个Maven SpringBoot项目。我想把它推到云工厂。为此,我为Jenkins编写了一个groovy管道脚本。我要补充什么?在脚本和/或pom中。xml将其发布到Artifactory中,这样Jenkins将从Git中提取代码并将其发布到Artifactory。在另一个环境中,我将拉出artifactory版本化的JAR,并将其推送到Cloud Foundry。 假设我的项目的grou
我以一个新的gradle用户的身份创建gradle版本,但我过去曾与maven合作过。 我试图重现maven发布插件的动作: 将分支版本更改为发行号(在svn提交) 如您所见,我正在使用: Nexus OSS作为版本控制库 SVN作为scm Gradle(2.8) 我正试图通过这两个插件实现我的目标: > 将分支版本更改为发行号(在svn提交) 创建标签(位于svn) 将分支版本更改为新快照编号(