我想在声明性Jenkins管道中使用git标记。我的詹金斯档案是这样的
pipeline {
agent any
stages {
stage('Setup') {
steps {
script {
env.MY_GIT_TAG = sh(returnStdout: true, script: 'git tag -l --points-at HEAD')
// ...
}
}
}
stage('Build'){
// build my code etc ....
}
stage('Publish') {
// push code somewhere depending on tag
sh "curl -X POST --upload-file ./MyDeployable https://someserver/uri/MyDeployable-${env.MY_GIT_TAG}"
}
}
}
但是环境变量MY_GIT_TAG
总是空的。经过一些调查,我在Jenkins的日志中注意到这一点:git抓取--no-tags--进度...
有没有办法告诉詹金斯跳过--无标签
参数?
因为我事先不知道提交是如何标记的,所以我想从git中签出标签并将其用作变量。所以这个问题的解决方案在这里是不可行的。
正如Tai Ly所提到的,这里描述了两种可能的解决方案
解决方案1)
您可以在Jenkinsfile中创建一个自定义签出,将noTags
设置为false。
checkout([
$class: 'GitSCM',
branches: scm.branches,
doGenerateSubmoduleConfigurations: scm.doGenerateSubmoduleConfigurations,
extensions: [[$class: 'CloneOption', noTags: false, shallow: false, depth: 0, reference: '']],
userRemoteConfigs: scm.userRemoteConfigs,
])
解决方案2)
在Jenkins Web界面的分支源行为中添加一个"高级克隆行为"条目。它也可以在组织/团队级别为GitHub/比特桶插件设置
正如注释中提到的,sh
不返回任何内容。您可以执行env.MY_GIT_TAG=sh(returStdout: true,脚本:'git tag-l--minst-at HEAD'). trim()
来返回stdout。
我们可以使用,sh(returStdout: true, cript:"git tag--ort=-creatordate|head-n 1"). trim()
将此转换为一个变量并使用它。
pipeline {
agent any
stages {
stage('get git tag') {
steps {
script {
latestTag = sh(returnStdout: true, script: "git tag --sort=-creatordate | head -n 1").trim()
env.BUILD_VERSION = latestTag
echo "env-BUILD_VERSION"
echo "${env.BUILD_VERSION}"
}
}
}
}
}
问题内容: 我想标记当前的git changeset并从Jenkinsfile内部推送标记。如果标签已经存在,则必须将其替换。 我想使用此逻辑来标记随标记传递的内部版本,该标记将是移动标记。 我怎样才能做到这一点? 问题答案: 这是我能够以这种方式实现的方法,但是,如果您知道更好的方法,我很乐意听到。
当前分支没有跟踪信息。请指定要与哪个分支合并。详见git-pull(1) 如果要设置此分支的跟踪信息,可以使用以下方法: 我希望只更新主分支,而不更新我当前的分支(反正它是一个标记)。这样的事情可能发生吗? 我需要这样做的原因是我有一个自动脚本,它总是git拉出存储库,当然会因为上面的错误而失败…
问题内容: 我是Shell脚本的新手,无法解决这个问题。如果您不熟悉,则命令git branch返回类似 ,其中星号标记当前已签出的分支。当我在终端中运行以下命令时: 我得到: 如预期的那样。 但是,当我跑步时 要么 然后 ,结果只是目录中文件的列表。我们如何使test =“ *开发”的价值? 然后,下一步(一旦我们将“ *开发”变成名为test的变量),就是要获得子字符串。只是以下内容吗? 我正
在 Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase。 在本节中我们将学习什么是“变基”,怎样使用“变基”,并将展示该操作的惊艳之处,以及指出在何种情况下你应避免使用它。 变基的基本操作 请回顾之前在 分支的合并 中的一个例子,你会看到开发任务分叉到两个不同分支,又各自提交了更新。 Figure 35. 分叉的提交历史 之前介绍过,整合分支最容易的方法是 merge
问题内容: 通过执行以下任一操作,我可以找到当前的git分支名称: 但是,当处于分离的HEAD状态时,例如在Jenkins maven构建的后期构建阶段(或在Travis git fetch中),这些命令将不起作用。 我当前的工作解决方案是这样的: 它显示在HEAD提示上具有最后提交的任何分支名称。这可以正常工作,但我认为使用git-fu更强的人可能有更漂亮的解决方案? 问题答案: 更瓷器的方式:
代码合并主分支后,分支上显示合并过来的提交记录。 我想查看该分支原本的开发记录比较困难,比如我想看看当时我改了哪些内容,很难知道哪次提交是当时的开发。 所以如何查看分支当时的开发记录,而不是合并过来的。