我有Jenkins / Mercurial最新版本。机器是Red Hat Linux 6.6。
我在Jenkins中使用Release插件。Maven插件(maven-scm-plugin,maven-version-plugin和maven-enforcer-plugin),用于在项目上进行发布过程。所有这些版本都使用最新的可用版本,并且配置正确。
在詹金斯(Jenkins)的工作中,我正在从位于RhodeCode(Mercurial hg)后面的Project中签出源代码。
输出显示如下:
06:00:02 Started by timer
06:00:02 [EnvInject] - Loading node environment variables.
06:00:03 Building on master in workspace /main/jenkins/instance2/workspace/MyCoolProject
06:00:06 [MyCoolProject] $ hg --config auth.jenkins.prefix=* --config ******** --config ******** --config "auth.jenkins.schemes=http https" showconfig paths.default
06:00:06 [MyCoolProject] $ hg --config auth.jenkins.prefix=* --config ******** --config ******** --config "auth.jenkins.schemes=http https" pull --rev default
06:00:12 pulling from http://mercurialserver.my.company.com:9001/csa/MyCoolProject/
06:00:12 no changes found
06:00:12 [MyCoolProject] $ hg --config auth.jenkins.prefix=* --config ******** --config ******** --config "auth.jenkins.schemes=http https" update --clean --rev default
06:00:13 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
06:00:13 [MyCoolProject] $ hg --config auth.jenkins.prefix=* --config ******** --config ******** --config "auth.jenkins.schemes=http https" --config extensions.purge= clean --all
06:00:13 [MyCoolProject] $ hg --config auth.jenkins.prefix=* --config ******** --config ******** --config "auth.jenkins.schemes=http https" log --rev . --template {node}
06:00:13 [MyCoolProject] $ hg --config auth.jenkins.prefix=* --config ******** --config ******** --config "auth.jenkins.schemes=http https" log --rev . --template {rev}
06:00:13 [MyCoolProject] $ hg --config auth.jenkins.prefix=* --config ******** --config ******** --config "auth.jenkins.schemes=http https" log --rev
如上所示,由于我们指定了用户在Mercurial DVCS工具中执行读取/签出操作,因此Jenkins在启动hg命令时传递了一堆参数,例如
--config auth.jenkins.prefix = * --config ******** --config ******** --config“ auth.jenkins.schemes = http https”
当我使用Maven SCM插件及其目标时,我试图找出发送方法。
scm:checkin
scm:tag
等被调用时,会启动底层版本控制命令(在我的情况下,是hg分支,hg传出,hg push命令)。
目前,上述hg命令失败,原因是用户没有〜/ .hgrc文件,其中包含用户名和密码变量集,或者用户没有对目标RhodeCode / Mercurial存储库的“写”访问权限。
20:16:26 [INFO] --- maven-scm-plugin:1.9.4:checkin (default-cli) @ MyCoolProject ---
20:16:27 [INFO] EXECUTING: /bin/sh -c cd /main/jenkins/instance2/workspace/MyCoolProject && hg branch
20:16:27 [INFO] EXECUTING: /bin/sh -c cd /main/jenkins/instance2/workspace/MyCoolProject && hg outgoing
20:16:29 [INFO] EXECUTING: /bin/sh -c cd /main/jenkins/instance2/workspace/MyCoolProject && hg status
20:16:29 [INFO] [pom.xml:modified]
20:16:29 [INFO] [jenkins-MyCoolProject-43.appVersion.txt:unknown]
20:16:29 [INFO] [pom.xml.versionsBackup:unknown]
20:16:29 [INFO] EXECUTING: /bin/sh -c cd /main/jenkins/instance2/workspace/MyCoolProject && hg commit --message '"CM Jenkins - Release plugin auto check-in and creation of release tag = 0.0.29'
20:16:30 [INFO] EXECUTING: /bin/sh -c cd /main/jenkins/instance2/workspace/MyCoolProject && hg push http://cmprod2merc.my.company.com:9001/csa/MyCoolProject
20:16:34 [ERROR]
20:16:34 EXECUTION FAILED
20:16:34 Execution of cmd : push failed with exit code: 255.
20:16:34 Working directory was:
20:16:34 /main/jenkins/instance2/workspace/MyCoolProject
20:16:34 Your Hg installation seems to be valid and complete.
20:16:34 Hg version: 1.9.2 (OK)
我尝试配置〜/ .hgrc文件(根据Mercurial docs),如果您在此文件中指定的用户名对目标源代码存储库/项目具有有效的WRITE访问权限,则一切正常,那么上述错误消息将不会出现。
如果我在构建机器上安装/配置密钥环和mercurial_keyring扩展/插件,也可以解决此问题(根据在线mercurial密钥环文档,这很容易)。
我想找出的是:
如何将--config xxxxx参数(例如Jenkins在执行结帐/提取操作时正在传递-由于我们在Jenkins作业的“源代码管理”下输入的设置值而来)传递给的汞被调用时命令的Maven SCM插件正在启动SCM:签入/ SCM:标签,其最终调用目标汞柱命令(HG传出,汞推)/无设定〜/ .hgrc和安装mercurial_keyring所有汞柱命令?
找到了解决方案:
原因是(Maven SCM插件的)scm:checkin / scm:tag目标调用了版本工具命令(在我的情况下是hg命令),但未传递身份验证参数(用户名/密码)。为此,我可以使用maven-scm-plugin插件的配置在项目pom.xml中添加和值,或者在〜/ .m2 / settings.xml中添加-和(或 (更安全的方法是)创建/使用2个新的Jenkins全局级别的变量(具有密码类型)以创建用户名/密码变量,并将其使用/传递给scm:checkin / scm:tag目标,同时在Jenkins的Release插件的配置设置中调用这些目标,即-Dusername = $ username和-Dpassword = $密码(由于这些值来自Jenkins,因此将被自动屏蔽)。
我沿用了Jenkins路由,并在“配置系统”>“全局参数/密码”部分下的Jenkins全局配置中创建了2个密码类型的全局变量,然后将它们传递给scm:checkin / tag目标,同时在Invoke Maven步骤中调用它们(在Release插件中) Jenkins中的配置)。
我发现,如果您在〜/ .hgrc中设置了仅用户名,则Jenkins checkout / pull命令开始失败,因为Jenkins进程停止使用我用来拉/克隆源代码的凭据(看起来像是当Jenkins作业/进程正在使用jenkins用户运行时,优先使用〜/ .hgrc用户名,并且因为在〜/ .hgrc中未设置密码变量/字段,因此pull / clone由于某种原因而失败(它应该如果我将〜/ .hgrc移至〜/ .hgrc-backup,则Jenkins的checkout / pull / clone可以正常工作(因为它使用了凭据)我在“ Mercurial”的“源代码管理”部分提到的内容,但在Maven SCM插件未处理底层hg命令的过程中仍然失败。
PS:在工作区上运行“ hg push”已成功运行(独立运行,在命令行上),但是当Maven SCM插件调用这些目标并且目标正在调用hg命令时,由于某种原因,它不起作用。
解决方案是:
将-Dusername = $ username -Dpassword = $ password变量传递给scm:checkin / scm:tag目标
确保〜/ .hgrc设置了用户名/密码变量--OR mercurial_keyring设置为可与存储库一起使用(不提示输入用户名和密码)。
Maven SCM插件目标..调用hg命令不起作用的原因是由于插件的问题。解决方法是使用-D pushChanges = false调用这些目标,这样,目标将不会调用底层版本控制推送操作,因此它将成功。然后,您必须以“执行Shell /执行Windows批处理命令”方式在“发布詹金斯配置中的插件”中手动添加另一步骤,以运行“汞推”。然后,它将起作用,在这种情况下,您无需将-Dusername和-Dpassword参数传递给这些目标。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句