当前位置: 首页 > 知识库问答 >
问题:

葫芦Android“未找到密钥库”在詹金斯的领导下

慕承恩
2023-03-14

我有一个简单的android测试项目,我可以在自己登录的DOS shell中使用“\gradlew calabashDebug”进行测试。然而,当我在持续集成服务器上运行Jenkins下的项目时,它失败了,并显示“找不到密钥库”错误(请参阅下面的堆栈跟踪)。

07:54:04.462 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: STARTING
07:54:04.464 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Waiting until process started: command 'cmd'.
07:54:04.507 [INFO] [org.gradle.process.internal.ProcessParentingInitializer] An attempt to initialize for well behaving parent process finished.
07:54:04.513 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: STARTED
07:54:04.513 [DEBUG] [org.gradle.process.internal.ExecHandleRunner] waiting until streams are handled...
07:54:04.514 [INFO] [org.gradle.process.internal.DefaultExecHandle] Successfully started process 'command 'cmd''
07:54:05.111 [QUIET] [system.out] No test server found for this combination of app and calabash version. Recreating test server.
07:54:05.111 [QUIET] [system.out] No keystores found.
07:54:05.112 [QUIET] [system.out] Please create one or run calabash-android setup to configure calabash-android to use an existing keystore.
07:54:05.117 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: FAILED
07:54:05.118 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Process 'command 'cmd'' finished with exit value 1 (state: FAILED)
07:54:05.119 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Finished executing task ':calabashDebug'
07:54:05.119 [LIFECYCLE] [class org.gradle.TaskExecutionLogger] :calabashDebug FAILED
07:54:05.120 [INFO] [org.gradle.execution.taskgraph.AbstractTaskPlanExecutor] :calabashDebug (Thread[main,5,main]) completed. Took 0.666 secs.
07:54:05.120 [DEBUG] [org.gradle.execution.taskgraph.AbstractTaskPlanExecutor] Task worker [Thread[main,5,main]] finished, busy: 1.014 secs, idle: 0.016 secs
07:54:05.125 [ERROR] [org.gradle.BuildExceptionReporter] 
07:54:05.127 [ERROR] [org.gradle.BuildExceptionReporter] FAILURE: Build failed with an exception.
07:54:05.127 [ERROR] [org.gradle.BuildExceptionReporter] 
07:54:05.127 [ERROR] [org.gradle.BuildExceptionReporter] * What went wrong:
07:54:05.129 [ERROR] [org.gradle.BuildExceptionReporter] Execution failed for task ':calabashDebug'.
07:54:05.129 [ERROR] [org.gradle.BuildExceptionReporter] > Process 'command 'cmd'' finished with non-zero exit value 1
07:54:05.130 [ERROR] [org.gradle.BuildExceptionReporter] 
07:54:05.131 [ERROR] [org.gradle.BuildExceptionReporter] * Exception is:
07:54:05.132 [ERROR] [org.gradle.BuildExceptionReporter] org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':calabashDebug'.
07:54:05.132 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
07:54:05.132 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
07:54:05.133 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
07:54:05.133 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
07:54:05.133 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
07:54:05.134 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42)
07:54:05.134 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
07:54:05.134 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
07:54:05.134 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
07:54:05.135 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:289)
07:54:05.135 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79)
07:54:05.135 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63)
07:54:05.136 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51)
07:54:05.136 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$1.run(DefaultTaskPlanExecutor.java:33)
07:54:05.137 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.internal.Factories$1.create(Factories.java:22)
07:54:05.137 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.cache.internal.DefaultCacheAccess.longRunningOperation(DefaultCacheAccess.java:198)
07:54:05.137 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.cache.internal.DefaultCacheAccess.longRunningOperation(DefaultCacheAccess.java:266)
07:54:05.137 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.cache.internal.DefaultPersistentDirectoryStore.longRunningOperation(DefaultPersistentDirectoryStore.java:135)
07:54:05.138 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.changedetection.state.DefaultTaskArtifactStateCacheAccess.longRunningOperation(DefaultTaskArtifactStateCacheAccess.java:95)
07:54:05.138 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:31)
07:54:05.138 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:86)
07:54:05.138 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:29)
07:54:05.139 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61)
07:54:05.139 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)
07:54:05.139 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:67)
07:54:05.140 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
07:54:05.140 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61)
07:54:05.140 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:54)
07:54:05.140 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:166)
07:54:05.141 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:113)
07:54:05.141 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:81)
07:54:05.141 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:64)
07:54:05.142 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33)
07:54:05.142 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24)
07:54:05.142 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:35)
07:54:05.143 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)
07:54:05.143 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:50)
07:54:05.143 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:171)
07:54:05.144 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:201)
07:54:05.144 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:174)
07:54:05.144 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:170)
07:54:05.144 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:139)
07:54:05.145 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
07:54:05.145 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
07:54:05.145 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.Main.doAction(Main.java:46)
07:54:05.145 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
07:54:05.146 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.Main.main(Main.java:37)
07:54:05.146 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:50)
07:54:05.146 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:32)
07:54:05.147 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
07:54:05.147 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:33)
07:54:05.147 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:130)
07:54:05.148 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:48)
07:54:05.148 [ERROR] [org.gradle.BuildExceptionReporter] Caused by: org.gradle.process.internal.ExecException: Process 'command 'cmd'' finished with non-zero exit value 1
07:54:05.148 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.process.internal.DefaultExecHandle$ExecResultImpl.assertNormalExitValue(DefaultExecHandle.java:361)
07:54:05.149 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.process.internal.DefaultExecAction.execute(DefaultExecAction.java:31)
07:54:05.149 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.tasks.Exec.exec(Exec.java:63)
07:54:05.149 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63)
07:54:05.149 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:219)
07:54:05.150 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:212)
07:54:05.150 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:201)
07:54:05.150 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:533)
07:54:05.150 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:516)
07:54:05.151 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
07:54:05.151 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
07:54:05.151 [ERROR] [org.gradle.BuildExceptionReporter]    ... 52 more

问题是没有显示默认情况下密钥库的位置。我尝试将密钥库放在JENKINS_HOME目录下的. android\debug.keystore中。我还尝试将calabash_settings文件(也是.calabash_settings文件)与以下内容一起:

{"keystore_location":"C:\\Program Files (x86)\\Jenkins\\.android\\debug.keystore","keystore_password":"android","keystore_alias":"androiddebugkey"}

我发现一个问题是我在构建中使用的gradle葫芦android插件。gradle没有为它生成的葫芦gradle命令指定“-v”或“-verbose”。我创建了一个fork和pull请求,并对gradle-calabash-android插件项目进行了更改,以解决这个问题:github。com/Pedlar/gradle葫芦android插件/pull/6

在使用新版gradle葫芦android插件后,我得到了有用的调试输出:

15:29:02.455 [INFO] [org.gradle.process.internal.DefaultExecHandle] Successfully started process 'command 'cmd''
15:29:03.608 [QUIET] [system.out] 2014-04-23 15:29:03 - JDK found on PATH.
15:29:03.608 [QUIET] [system.out] 2014-04-23 15:29:03 - JDK found at: C:\Program Files\Java\jdk1.8.0
15:29:03.608 [QUIET] [system.out] 2014-04-23 15:29:03 - Android SDK found at: C:\AndroidSDK\adt-bundle-windows-x86_64-20140321\adt-bundle-windows-x86_64-20140321\sdk
15:29:03.608 [QUIET] [system.out] No test server found for this combination of app and calabash version. Recreating test server.
15:29:03.608 [QUIET] [system.out] 2014-04-23 15:29:03 - "\Program Files\Java\jdk1.8.0\bin/keytool.exe" -v -printcert -J"-Dfile.encoding=utf-8" -file "C:/Windows/Temp/d20140423-5912-102klgo/META-INF/CERT.RSA"
15:29:03.608 [QUIET] [system.out] 2014-04-23 15:29:03 - MD5 fingerprint for signing cert (C:/Users/jenkins/.jenkins/jobs/Toasty/workspace/build/apk/workspace-debug-unaligned.apk): 11:FC:53:97:85:19:6C:2F:FA:AF:00:B4:DC:A1:68:1E
15:29:03.608 [QUIET] [system.out] 2014-04-23 15:29:03 - C:/Users/jenkins/.jenkins/jobs/Toasty/workspace/build/apk/workspace-debug-unaligned.apk was signed with a certificate with fingerprint 11:FC:53:97:85:19:6C:2F:FA:AF:00:B4:DC:A1:68:1E
15:29:03.608 [QUIET] [system.out] 2014-04-23 15:29:03 - Trying to read keystore from: C:/Windows/system32/config/systemprofile/.android/debug.keystore - no such file
15:29:03.608 [QUIET] [system.out] 2014-04-23 15:29:03 - Trying to read keystore from: C:/Users/jenkins/.jenkins/jobs/Toasty/workspace/debug.keystore - no such file
15:29:03.608 [QUIET] [system.out] 2014-04-23 15:29:03 - Trying to read keystore from: C:/Windows/system32/config/systemprofile/.local/share/Xamarin/Mono/ for/ Android/debug.keystore - no such file
15:29:03.608 [QUIET] [system.out] 2014-04-23 15:29:03 - Trying to read keystore from: C:/Windows/system32/config/systemprofile/AppData/Local/Xamarin/Mono for Android/debug.keystore - no such file
15:29:03.608 [QUIET] [system.out] No keystores found.

现在我不知道为什么calabash-android尝试从“C:/Windows/system32/config/systemprofile/. android/debug.keystore”而不是“C:/用户/jenkins/. android/debug.keystore”读取密钥库。我让jenkins作为Windows系统服务运行,使用服务器上名为jenkins的用户的登录凭据。

所以我添加了一个文件C:\Windows\system32\config\systemprofile。android \调试。密钥库。仍然得到同样的错误,这是奇怪的。

我是Windows平台开发的新手,所以它可能是一些琐碎的东西,比如愚蠢的空白或斜线方向问题,但我还没能弄清楚。谢谢你的任何帮助。

共有2个答案

长孙鸿波
2023-03-14

今天,我们发现Windows 10下的Jenkins 2.9也是如此。Gradle试图将工件下载到\Windows\System32\config\systemprofile中。gradle \缓存\模块-2 \文件-2.1\,并失败。

我认为这是Jenkins的问题,仅与Calabash无关。Jenkins服务默认安装为“本地系统”运行。正如Farrukh Najmi发现的那样,这导致了问题。

您可以稍后重新配置Jenkins以作为另一个用户运行。事实上,我想知道您是否应该通常这样做。Jenkins作为LocalSystem被认为是一个安全问题(https://jenkins-ci.org/issue/27016)。

尽管如此,詹金斯不得按照之前的建议重新安装:

(From an Admin Terminal or Powershell)
sc.exe stop jenkins
sc.exe config "jenkins" obj= ".\Brian" password= "Brianspassword"
sc.exe start jenkins

...完成。(注意sc.exe语法中“=”后面令人惊讶的空格。)

在我第一次尝试时,服务启动失败

错误1069“由于登录失败,服务未启动。”

原因:用户可能没有授予运行服务的权限,请参阅https://serverfault.com/questions/197881/sc-exe-create-service-password-issue对于我们为Jenkins开发的任何新系统用户来说,情况尤其如此。

解决方案:我最简单的解决方案是运行服务。msc,右键单击GUI中的服务,选择属性。在此处修改用户密码。现在,作为一个副作用,服务。msc很友善地将缺失的权利授予用户。它会弹出一个对话框通知您。

另一个陷阱是密码中的特殊字符,需要在shell中进行转义。(我会选择只有字母的密码。或者,在services.msc.的GUI中键入密码)

毛德华
2023-03-14

事实证明,我最初的大部分问题源于这样一个事实,即我将Jenkins安装为作为本地系统帐户运行的服务(参见服务属性中的登录选项卡)。这导致Jenkins读取/写入各种系统目录中的内容,并可能遇到一些权限问题。

解决办法是:

  1. 删除jenkins windows服务
  2. 在服务器上创建jenkins本地帐户
  3. 以新jenkins用户身份登录,这次以jenkins用户身份重新安装jenkins
  4. 配置jenkins时,请确保使用服务属性/LogOn/This-Account/。\詹金斯
  5. 确保在所有操作完成后重新启动服务

这是我最后忘了做的最后一步——Doh!一旦我做到了,一切都很好!

 类似资料:
  • 问题内容: 我正在尝试将凭据从一个Jenkins迁移到另一个Jenkins,但是用户名/密码散列在$ {JENKINS_HOME} /credentials.xml中 我找到了这个答案,但是问题是它并没有说明有人可以在哪里找到加密密钥才能成功迁移凭据。 任何帮助是极大的赞赏! 编辑 :更多信息..我的${JENKINS_HOME}在一个单独的卷上,我将其分离并重新附加到新的VM上,但仍然无法使用。

  • 问题内容: 尝试粘贴到我安装了Java JDK的位置,但是Jenkins一直说: 还尝试并得到: 任何人最后一个文件夹/文件应该是什么?我假设bin \ java,但这给我带来麻烦。 问题答案: 应该指向

  • 有没有可能让詹金斯使用真正的浏览器而不是无头浏览器?我正在运行一些用TestNG编写的测试(使用Selenium webdriver)。当我运行testng时。在Eclipse中,浏览器启动并运行测试。但当我使用Jenkins并用maven运行测试时,它不会启动任何浏览器。

  • 我正在使用flatter开发一个需要SHA-1的应用程序。我打开了gradle的签约报告,但上面说缺少keystore。使用“keytool-alias”AndroidDebugKey-genkeypair,但我无法在系统上找到密钥库。我又试了一次,但它显示了java。lang.异常:未生成密钥对,别名已存在。我还做了%keytool-list-v-keystore/。android/debug。

  • 我打算有一个带有Jenkins的光盘管道,它接受我的应用程序,将码头工人映像发布到我的私人码头工人存储库。我想我知道怎么做。 我不确定的是库伯内特斯部分。我想把那个图像部署到我的私人库伯内特斯集群(目前是1个主集群) 问:安装了 kubectl 和 docker 的詹金斯从站是否需要成为 Kubernetes 集群的一部分才能触发部署?如何触发该部署?

  • 问题内容: 我想在詹金斯中设置很多变量。我试图把他们的,和该的用户,但是当构建正在发生詹金斯无法找到他们。 唯一可行的方法是将所有env变量放入其中,如下所示: 但是我不认为这是个好方法。 在詹金斯中设置环境变量的正确方法是什么? 问题答案: 在我看来,这很正常。并且应被视为文本凭据,您可以使用 指令添加环境变量。 如果你需要保持环境变量分开,你可以创建一个包含所有的常规文件,然后将该文件加载到使