Jenkins Git分支变量未正确替换为值

时间:2015-01-23 09:48:15

标签: git jenkins

我目前在使用Jenkins构建时遇到了麻烦,更具体地说是将Git插件与参数结合使用,但仅限于特定的工作。

我有一个Jenkins工作,负责构建我们软件的发布版本。该软件位于Git的一个名为' release /' (例如发布/ 06.03)。因为有多个版本是可能的,我有一个属性文件,其中定义了可能的发布git分支,我使用Extented Choice Parameter来制作单个选择下拉框

enter image description here

用户选择一个release_branch选项并输入补丁版本号,然后可以构建作业。这个完全相同的设置适用于我使用完全相同的设置和相同的属性文件的其他发布作业。除了一份工作外。

该过程的第一步(用于调试目的)是一个Windows批处理命令,我回显%release_branch%变量。

enter image description here

然后我使用$ release_branch变量从Git中检出代码(我已从下面的屏幕截图中删除了敏感信息,填写了正确的存储库和凭据)

enter image description here

在检出存储库后,将启动一个groovy脚本,其中根据签出的软件确定其他参数。

现在,当我执行这项工作并检查记录时,发生了一些奇怪的事情(我再次更换了一些敏感信息:

  • 客户名已替换为< customer>
  • 代理网址已替换为< proxy ip and port>
  • git网址已替换为< git repository url> .git

敏感信息已经确认并且确实有效:


以下Jenkins记录来自出错的作业

Started by user Rick Veenstra
[EnvInject] - Loading node environment variables.
Building in workspace D:/Jenkins/builds/git/repositories\<customer>
Running Prebuild steps
[<customer>] $ cmd /c call C:\Windows\TEMP\hudson48240663439325326.bat

D:\Jenkins\builds\git\repositories\<customer>>echo Will checkout from Git using branch: release/06.03 
Will checkout from Git using branch: release/06.03

D:\Jenkins\builds\git\repositories\<customer>>exit 0 
Success build forhudson.tasks.BatchFile@f3d5a79
Wiping out workspace first.
Cloning the remote Git repository
Cloning repository <git repository url>.git
 > D:\Program Files (x86)\Git\bin\git.exe init D:\Jenkins\builds\git\repositories\<customer> # timeout=10
Fetching upstream changes from <git repository url>.git
 > D:\Program Files (x86)\Git\bin\git.exe --version # timeout=10
using .gitcredentials to set credentials
 > D:\Program Files (x86)\Git\bin\git.exe config --local credential.helper store --file=\"C:\Windows\TEMP\git1134080240648513421.credentials\" # timeout=10
Setting http proxy: <proxy ip and port>
 > D:\Program Files (x86)\Git\bin\git.exe -c core.askpass=true fetch --tags --progress <git repository url>.git +refs/heads/*:refs/remotes/refs/heads/release/06.03/*
 > D:\Program Files (x86)\Git\bin\git.exe config --local --remove-section credential # timeout=10
 > D:\Program Files (x86)\Git\bin\git.exe config remote.refs/heads/release/06.03.url <git repository url>.git # timeout=10
 > D:\Program Files (x86)\Git\bin\git.exe config remote.refs/heads/release/06.03.fetch +refs/heads/*:refs/remotes/refs/heads/release/06.03/* # timeout=10
 > D:\Program Files (x86)\Git\bin\git.exe config remote.refs/heads/release/06.03.url <git repository url>.git # timeout=10
Fetching upstream changes from <git repository url>.git
using .gitcredentials to set credentials
 > D:\Program Files (x86)\Git\bin\git.exe config --local credential.helper store --file=\"C:\Windows\TEMP\git993807724023012035.credentials\" # timeout=10
Setting http proxy: <proxy ip and port>
 > D:\Program Files (x86)\Git\bin\git.exe -c core.askpass=true fetch --tags --progress <git repository url>.git +refs/heads/*:refs/remotes/refs/heads/release/06.03/*
 > D:\Program Files (x86)\Git\bin\git.exe config --local --remove-section credential # timeout=10
 > D:\Program Files (x86)\Git\bin\git.exe rev-parse "refs/remotes/refs/heads/$release_branch/release/06.03^{commit}" # timeout=10
 > D:\Program Files (x86)\Git\bin\git.exe rev-parse "refs/remotes/refs/heads/$release_branch/refs/heads/release/06.03^{commit}" # timeout=10
Checking out Revision 64e002379c30c545cbf05e6c062df2a78990cb1e (refs/remotes/refs/heads/$release_branch/release/06.03)
 > D:\Program Files (x86)\Git\bin\git.exe config core.sparsecheckout # timeout=10
 > D:\Program Files (x86)\Git\bin\git.exe checkout -f 64e002379c30c545cbf05e6c062df2a78990cb1e
 > D:\Program Files (x86)\Git\bin\git.exe rev-list 64e002379c30c545cbf05e6c062df2a78990cb1e # timeout=10
Notified Stash for commit with id 64e002379c30c545cbf05e6c062df2a78990cb1e
==============================
[-- STARTING GROOVY SCRIPT --]
==============================
Based on the git branch and client the Jenkins parameters will be determined and set.
-- Branch: refs/heads/release/06.03/release/06.03

如您所见,Windows Batch将%release_branch%参数打印为&#34; release / 06.03&#34;这是正确的。但是然后参数在Git插件中使用,事情搞砸了。首先一切看起来都不错,但是参数名称$ release_branch后面印有替换值。

D:\Program Files (x86)\Git\bin\git.exe rev-parse "refs/remotes/refs/heads/$release_branch/release/06.03^{commit}" #timeout=10
D:\Program Files (x86)\Git\bin\git.exe rev-parse "refs/remotes/refs/heads/$release_branch/refs/heads/release/06.03^{commit}"
# timeout=10 Checking out Revision 64e002379c30c545cbf05e6c062df2a78990cb1e
(refs/remotes/refs/heads/$release_branch/release/06.03)

然后在groovy脚本中,第一个$ release_branch再次被该值替换,因此它显示release / 06.03两次

-- Branch: refs/heads/release/06.03/release/06.03

我不知道为什么参数没有正确替换,为什么我不知道这个术语的来源&#39;正如我在其他记录中看到的那样,因为我只定义了一个远程git服务器,我期待下面的内容


以下Jenkins记录来自其他正常工作的作业

[EnvInject] - Loading node environment variables.
Building in workspace D:/Jenkins/builds/git/repositories/<customer 2>
Wiping out workspace first.
Cloning the remote Git repository
Cloning repository <git repository url 2>.git
 > D:\Program Files (x86)\Git\bin\git.exe init D:\Jenkins\builds\git\repositories\<customer 2># timeout=10
Fetching upstream changes from <git repository url 2>.git
 > D:\Program Files (x86)\Git\bin\git.exe --version # timeout=10
using .gitcredentials to set credentials
 > D:\Program Files (x86)\Git\bin\git.exe config --local credential.helper store --file=\"C:\Windows\TEMP\git6918391337668560662.credentials\" # timeout=10
Setting http proxy: 10.30.60.218:8080
 > D:\Program Files (x86)\Git\bin\git.exe fetch --tags --progress <git repository url 2>.git +refs/heads/*:refs/remotes/origin/*
 > D:\Program Files (x86)\Git\bin\git.exe config --local --remove-section credential # timeout=10
 > D:\Program Files (x86)\Git\bin\git.exe config remote.origin.url <git repository url 2>.git # timeout=10
 > D:\Program Files (x86)\Git\bin\git.exe config remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10
 > D:\Program Files (x86)\Git\bin\git.exe config remote.origin.url <git repository url 2>.git # timeout=10
Fetching upstream changes from <git repository url 2>.git
using .gitcredentials to set credentials
 > D:\Program Files (x86)\Git\bin\git.exe config --local credential.helper store --file=\"C:\Windows\TEMP\git6568474183277604659.credentials\" # timeout=10
Setting http proxy: 10.30.60.218:8080
 > D:\Program Files (x86)\Git\bin\git.exe fetch --tags --progress <git repository url 2>.git +refs/heads/*:refs/remotes/origin/*
 > D:\Program Files (x86)\Git\bin\git.exe config --local --remove-section credential # timeout=10
 > D:\Program Files (x86)\Git\bin\git.exe rev-parse "refs/remotes/origin/release/06.03^{commit}" # timeout=10
 > D:\Program Files (x86)\Git\bin\git.exe rev-parse "refs/remotes/origin/refs/heads/release/06.03^{commit}" # timeout=10
Checking out Revision ed0da50edd4e55e8ea1f5fc3c711d191ad217534 (refs/remotes/origin/release/06.03)
 > D:\Program Files (x86)\Git\bin\git.exe config core.sparsecheckout # timeout=10
 > D:\Program Files (x86)\Git\bin\git.exe checkout -f ed0da50edd4e55e8ea1f5fc3c711d191ad217534
 > D:\Program Files (x86)\Git\bin\git.exe rev-list 6d3be94009a76663e3efec2daa72dff2754ccab6 # timeout=10
Notified Stash for commit with id ed0da50edd4e55e8ea1f5fc3c711d191ad217534
==============================
[-- STARTING GROOVY SCRIPT --]
==============================
Based on the git branch and client the Jenkins parameters will be determined and set.
-- Branch: origin/release/06.03

有谁知道究竟出了什么问题以及如何解决问题?

亲切的问候, 瑞克

我正在运行以下(最新)版本:

  • Jenkins:1.597
  • Git插件:2.3.4
  • Git参数插件:0.4.0&#39;
  • 扩展选择参数插件:0.34

1 个答案:

答案 0 :(得分:0)

在&#34;分支中建立&#34; field - 用花括号括起参数,所以看起来应该像`refs / heads / $ {release_branch}。这也包括Windows。

相关问题