簡體   English   中英

Jenkins如何通過用戶名和密碼憑證進行結帳提取操作

[英]How Jenkins is passing username and password credentials for checkout pull operations

我有Jenkins / Mercurial最新版本。 機器是Red Hat Linux 6.6。

我在Jenkins中使用Release插件。 用於在項目上進行發布過程的Maven插件(maven-scm-plugin,maven-version-plugin和maven-enforcer-plugin)。 所有這些版本都使用最新的可用版本,並且配置正確。

在詹金斯(Jenkins)的工作中,我正在從位於RhodeCode(Mercurial hg)后面的項目中檢查源代碼。 在此處輸入圖片說明

輸出顯示如下:

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:簽到
scm:標簽
等等,它們在被調用時會啟動底層版本控制命令(在我的情況下,是hg分支,hg傳出,hg推送命令)。

目前,上述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插件中調用的hg命令正在發起SCM:簽入 / SCM:標簽的目標,其結束調用汞柱命令(HG 傳出 ,HG 推送 )/所有hg的命令,而設定〜/ .hgrc和安裝mercurial_keyring?

找到了解決方案:

  1. 即使用戶(jenkins)在目標RhodeCode / Merurial存儲庫上具有有效的WRITE訪問權限,並且成功配置了〜/ .hgrc或mercurial_keyring設置(即,在手動輸入一次后,用戶名/密碼少了hg操作),Maven SCM插件scm: checkin和scm:tag操作仍然失敗。

原因是(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命令時,由於某種原因,它不起作用。

解決方案是:

  1. 將-Dusername = $ username -Dpassword = $ password變量傳遞給scm:checkin / scm:tag目標

  2. 確保〜/ .hgrc設置了用戶名/密碼變量--OR mercurial_keyring設置為可與存儲庫一起使用(不提示輸入用戶名和密碼)。

  3. Maven SCM插件目標..調用hg命令不起作用的原因是由於我猜插件存在問題。 解決方法是使用-D pushChanges = false調用這些目標,這樣,目標將不會調用底層版本控制推送操作,因此它將成功。 然后,您必須以“執行Shell /執行Windows批處理命令”方式在“釋放詹金斯配置中的插件”中手動添加另一步驟,以運行“汞推”。 然后,它將起作用,在這種情況下,您無需將-Dusername和-Dpassword參數傳遞給這些目標。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM