我刚刚通过debian安装步骤(使用apt-get install)在我的Ubuntu服务器上安装了Jenkins.我希望我的构建从GitHub上的私有git存储库中提取.有了这个,我需要使用SSH访问来访问我的存储库.
我的大多数搜索结果刚刚说是以Jenkins用户身份登录并为我的GitHub帐户生成SSH密钥,但是通过debian软件包管理器安装,我没有Jenkins用户的密码.
那么如何为我的Jenkins服务器生成SSH密钥呢?
我已经为Jenkins添加了SSH凭证.
不幸的是,我忘记了SSH密码,现在想从Jenkins的凭证存档中获取它,该存档位于${JENKINS_HOME}/credentials.xml.
这XML文档似乎在XML标签加密凭证<passphrase>或<password>.
如何检索明文密码?
我正在使用Jenkins Multiple SCM插件在我的Jenkins作业中将三个git存储库检入三个子目录.然后,我执行一组命令来构建一组工件,其中包含从所有三个存储库中提取的信息和代码.
现在折旧了多个SCM,文本建议移动到管道.我试过了,但我无法弄清楚如何让它发挥作用.
这是我有兴趣从Jenkins作业目录的顶层看到的目录结构:
$ ls
Combination
CombinationBuilder
CombinationResults
Run Code Online (Sandbox Code Playgroud)
这三个子目录中的每一个都签出了一个git repo.使用多个SCM,我使用git,然后添加"checkout to a subdirectory"行为.这是我尝试使用管道脚本:
node('ATLAS && Linux') {
sh('[ -e CalibrationResults ] || mkdir CalibrationResults')
sh('cd CalibrationResults')
git url: 'https://github.com/AtlasBID/CalibrationResults.git'
sh('cd ..')
sh('[ -e Combination ] || mkdir Combination')
sh('cd Combination')
git url: 'https://github.com/AtlasBID/Combination.git'
sh('cd ..')
sh('[ -e CombinationBuilder ] || mkdir CombinationBuilder')
sh('cd CombinationBuilder')
git url: 'https://github.com/AtlasBID/CombinationBuilder.git'
sh 'cd ..'
sh('ls')
sh('. CombinationBuilder/build.sh')
}
Run Code Online (Sandbox Code Playgroud)
但是,git命令似乎在工作区的顶级目录中执行(这有一定意义),并且根据语法,似乎没有checkout-to-sub-directory行为.
我正在按照指南如何使用Jenkins签署Android apk.我已经使用KSTOREPWD和KEYPWD参与了Jenkins的工作.Jenkins的作业配置(Build-> Execute shell)的一部分是获取这些参数并将它们存储为环境变量:
export KSTOREPWD=${KSTOREPWD}
export KEYPWD=${KEYPWD}
...
./gradlew assembleRelease
Run Code Online (Sandbox Code Playgroud)
问题是当构建结束时,任何人都可以访问构建"控制台输出"并查看输入的密码; 部分输出:
08:06:57 + export KSTOREPWD=secretStorePwd
08:06:57 + KSTOREPWD=secretStorePwd
08:06:57 + export KEYPWD=secretPwd
08:06:57 + KEYPWD=secretPwd
Run Code Online (Sandbox Code Playgroud)
所以我想在export命令输出之前抑制回声并在export命令后重新启用echo .
我目前正在对Jenkins Pipeline插件(以前称为Workflow插件)进行一些评估.阅读文档我发现我目前无法使用env.WORKSPACE以下方法检索工作区路径
:
工作流脚本中当前不可使用以下变量:
NODE_LABELS
工作区
特定于SCM的变量,例如SVN_REVISION
有没有其他方法如何获得当前工作区的绝对路径?我需要运行一些测试,然后获取一些参数(一些可执行文件的绝对路径).我已经尝试new File("").absolutePath()在一个@NonCPS部分内部使用,但看起来非CPS的东西总是在主服务器上执行.
有没有人知道如何在不运行某些批处理脚本的情况下获取此路径,该脚本将路径存储到某个文件中,以后可以再次读入该文件?
我正在尝试让Jenkins运行并使用GitHub托管存储库(使用Jenkins Git插件).存储库有多个git子模块,所以我不确定我是否想尝试管理多个部署密钥.
我个人的GitHub用户帐户是我希望用Jenkins引入的每个项目的合作者,因此我在其中生成了一个SSH密钥/var/lib/jenkins/.ssh并将其添加到我的个人GitHub帐户中.
但是,当我尝试将存储库URL添加到我的Jenkins项目配置时,我得到:
Failed to connect to repository : Command "git ls-remote -h git@github.com:***/***.git HEAD" returned status code 128:
stdout:
stderr: Host key verification failed.
fatal: The remote end hung up unexpectedly
Run Code Online (Sandbox Code Playgroud)
同样,当我安排构建时,我得到:
stderr: Host key verification failed.
fatal: The remote end hung up unexpectedly
Run Code Online (Sandbox Code Playgroud)
我也尝试过设置这里概述的SSH配置文件,但无济于事.
谁能摆脱任何光明?谢谢
编辑
我应该补充一点,我正在运行CentOS 5.8
我正在使用Jenkins v2.1和集成的交付管道功能(https://jenkins.io/solutions/pipeline/)来编排两个现有的构建(构建和部署).
在我的参数化构建中,我有3个用户参数设置,也需要在管道中进行选择.
管道脚本如下:
node: {
stage 'build'
build job: 'build', parameters: [[$class: 'StringParameterValue', name: 'target', value: target], [$class: 'ListSubversionTagsParameterValue', name: 'release', tag: release], [$class: 'BooleanParameterValue', name: 'update_composer', value: update_composer]]
stage 'deploy'
build job: 'deploy', parameters: [[$class: 'StringParameterValue', name: 'target', value: target]]
}
Run Code Online (Sandbox Code Playgroud)
这个工作正常,除了BooleanParameterValue.当我构建管道时,抛出以下错误:
java.lang.ClassCastException: hudson.model.BooleanParameterValue.value expects boolean but received class java.lang.String
Run Code Online (Sandbox Code Playgroud)
如何解决此类型转换错误?或者甚至更好,是否有一种不那么麻烦的方式,我可以将所有管道参数传递给下游作业.
我有一个在Android Studio上成功构建的Android项目.
现在我想在Jenkins上构建它.但是当我正在做的时候我得到了以下错误:Gradle build daemon意外地消失了(它可能已被杀死或可能已经崩溃)
例外情况是:
org.gradle.launcher.daemon.client.DaemonDisappearedException: Gradle build daemon disappeared unexpectedly (it may have been killed or may have crashed)
at org.gradle.launcher.daemon.client.DaemonClient.handleDaemonDisappearance(DaemonClient.java:222)
at org.gradle.launcher.daemon.client.DaemonClient.monitorBuild(DaemonClient.java:198)
at org.gradle.launcher.daemon.client.DaemonClient.executeBuild(DaemonClient.java:162)
at org.gradle.launcher.daemon.client.DaemonClient.execute(DaemonClient.java:125)
at org.gradle.launcher.daemon.client.DaemonClient.execute(DaemonClient.java:80)
at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:43)
at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:173)
at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:241)
at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:214)
at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35)
at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)
at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:207)
at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169)
at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
at org.gradle.launcher.Main.doAction(Main.java:33)
at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:55)
at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:36)
at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
Run Code Online (Sandbox Code Playgroud)
我阅读了相关主题,但没有用.我尝试使用gradle守护进程构建它,没有它,但问题仍然存在.