在我们公司的Jira Bamboo Bitbucket设置中,我有以下任务要完成。
我们希望Jira触发Bamboo构建并为项目分配正确的版本号。
我们使用Ant来执行构建。
目前,由于构建计划中的变量,Bamboo管理项目版本控制。
为了从Bamboo或Eclipse运行我的构建脚本,我做了以下
<input addproperty="project.version" message="Input current version or use arguments" />
----
<jar compress="true" destfile="build/publish/${project.name}-${project.version}.jar">
上面几行的意思是,我可以将-Dproject.version=${bamboo.projectVersion}
作为Ant参数传递,也可以被Ant询问要构建哪个版本号。如果我从Eclipse运行构建,我要么键入版本号,要么对本地构建使用传统的版本控制。
现在我想向前迈进一步,使用Jira我知道Jira可以覆盖Bamboo中的计划变量,它有一个非常方便的UI。但我的老板要求使用内置的${jira.version}
变量,以避免指示人们重写变量。
所以我想:这个想法应该是要么选择Jira提供的版本号,要么使用Bamboo配置的版本号或最终询问用户。
我最终得到了在本地Eclipse环境中工作的以下代码
<condition property="version" value="${jira.version}" if:set="jira.version">
<isset property="jira.version" />
</condition>
<condition property="version" value="${project.version}" if:set="project.version">
<isset property="project.version" />
</condition>
<input addproperty="version" message="Input current version or use arguments" />
我尝试了一些组合或运行配置,它们都符合我的要求。
渴望在Bamboo中进行测试,我编辑了我的构建脚本,以便通过项目和Jira版本的
Target
"2 - jar" -Dproject.version="${bamboo.project.version}.${bamboo.buildNumber}" -Djira.version="${jira.version}" -Dbuild.number="${bamboo.buildNumber}"
可悲的是,当我试图从独立和Jira触发器运行该计划时,我受到了愤怒的Chuck的欢迎。。。嗯。。。Bamboo说出了问题
/usr/share/ant/bin/ant: line 336: -Djira.version=${jira.version}: bad substitution
Ant似乎接受了Jira之外的任何变量。如何让Ant使用Jira指定的版本号?或者,更一般地说,Jira规定的属性?
似乎是我理解Jira变量替换的错误
错误的
-Djira.version="${jira.version}"
纠正
-Djira.version="${bamboo.jira.version}"
Bamboo实际上将所有变量置于其范围内。无论他们是由Jira注入还是由项目控制。
解决方案的另一部分是在构建计划中定义默认变量jira.version
,以避免出现错误的替换错误。
这意味着,如果我从Bamboo手动运行构建(例如,测试最近的提交),那么-Dproject.version
将进入version
,但如果Bamboo是由Jira触发的,则-Djira.version
将具有优先级