我有一个Java多分支管道项目,其中maven是构建工具,而git是SCM。
它被配置为检测标签并从这些标签的提交运行构建。它还针对不同的配置文件和节点,特定的配置文件和节点通过标记名称进行区分。例如:
我有一个staging
分支,它针对登台环境,当我要部署时,将所需的提交标记为staging-0.1.0
(版本只是一个示例)并将其推送到存储库。此推送触发jenkins,该仓库检查回购并从Jenkinsfile执行作业。 Jenkinsfile检测配置文件并找出目标节点,例如:
string tag = env.BRANCH_NAME // 'staging-0.1.0'
def profiles = [staging: 'staging']
def nodes = [staging: 'staging-node']
def profile = profiles.get(tag.tokenize('-')[0]) // 'staging'
def nodeLabel = nodes.get(profile) // 'staging-node'
node(nodeLabel){...}
然后是结帐,测试,构建和所有其他内容
我想部署项目,但是如果部署失败,我想恢复以前的版本,例如:
try {
sh "mvn tomcat7:deploy -P${profile}"
} catch (Exception e) {
echo(message: "Deploy failure, ${e.toString()}")
input(message: 'Would you like to restore previous version?')
// Restore it!!!
}
如果构建成功,我将归档工件以供将来使用:
archiveArtifacts artifacts: 'target/*.war'
我想做的是从同一配置文件的最新成功构建中获取工件(将其命名为staging-0.0.9
)并进行部署,我知道如何使用复制来实现插件,但我不太确定如何用这种配置文件找到上次构建的正确名称,因为就我所知,staging-0.0.128
也是一样,所以我不能只降低当前版本。
是否可以在jenkins作业中存储一些变量并从管道脚本中读取它?这样,每次成功构建后,我将能够为此变量分配最新的构建版本。 >
我也不能仅使用复制工件插件来获得最新的jenkins构建,因为它可能是生产构建之一,有点production-0.0.1
,其中可能包含完全不同的代码
由于我对DevOps还是很陌生,而我解决此问题的方法可能不正确,因此我将不胜感激,为所描述的问题提供不同的解决方案