Jenkins被用于从具有Git子模块的Git仓库构建工件.子模块与父项目不在同一个repo中,甚至不在同一端点.问题是父repo检查正常,因为凭证ssh密钥A与主/父repo相关联,但不出所料,在子模块上失败,因为凭证ssh密钥B与Jenkins的repo没有关联' 观点看法.
令人惊讶的是Jenkins对Git子模块没有更好的开箱即用支持; 贡献的时间.
在Docker机器上运行Jenkins(本地)
在CentOS上运行Jenkins(生产)
詹金斯版本:2.60.2(两者)
Git插件版本:3.6.4(两者)
我正在调查使用Jenkins Job-Builder(来自OpenStack)作为管理jenkins作业配置的方法.在这样做的过程中,我试图找出使用!include自定义标记从外部文件中包含作业模板的正确(最佳?)方式.
在当前的用例中,我们基本上会有一个模板将被很多工作使用.由于这里超出范围的原因,每个作业都需要存在于自己的文件中.
到目前为止,我已经得到了这个工作:
作业template.yml
name: 'pre-build-{proj}-{repo}'
project-type: freestyle
... etc ...
Run Code Online (Sandbox Code Playgroud)
作业1.yml
- job-template:
!include job-template.yml
- project:
name: job-1
proj: my-proj
repo: my-repo
jobs:
- 'build-config-{proj}-{repo}'
Run Code Online (Sandbox Code Playgroud)
这似乎是错误的,因为模板定义会在两个文件中分开,并且需要-job-template:在每个作业文件中进行不必要的重复行.我希望以下工作:
作业template.yml
- job-template:
name: 'pre-build-{proj}-{repo}'
project-type: freestyle
... etc ...
Run Code Online (Sandbox Code Playgroud)
作业1.yml
!include job-template.yml
- project:
name: job-1
proj: my-proj
repo: my-repo
jobs:
- 'build-config-{proj}-{repo}'
Run Code Online (Sandbox Code Playgroud)
不幸的是,后者导致行上的yaml解析错误- project::
yaml.scanner.ScannerError:"job-1.yml",第3行,第10列中不允许使用映射值
有没有办法将整个模板定义放入模板文件中?如果我们需要从多个文件中提取多个模板,这将变得特别烦人.
我有以下Jenkins Job定义:
- scm:
name: some-project
scm:
- git:
url: git@gitlab.****/some-project.git
credentials-id: some-ssh-username-with-private-key
branches:
- origin/master
- project:
name: some-project
jobs:
- '{name}':
triggers:
gitlab:
trigger-push: true
trigger-merge-request: false
trigger-open-merge-request-push: never
Run Code Online (Sandbox Code Playgroud)
现在这个工作可以上传到詹金斯没有错误,但如果我去Configure的页面some-project在詹金斯的Web UI,我可以看到,Build when a change is pushed to GitLab在触发器未启用部分.GitLab回购被正确配置- 源代码管理这项工作的部分有git@gitlab.****/some-project.git与some-ssh-username-with-private-key证书和分支origin/master配置.但没有工作触发器,这是没用的.
我究竟做错了什么?
请注意,我不是问如何配置GitLab WebHooks来触发Jenkins作业.我可以手动执行此操作并且工作正常.但是我们希望使用Jenkins Job构建器管理我们的Jenkins作业,以避免通过Web UI配置它们的错误过程并跟踪作业配置的变化 - 我们正在使用Jenkins作业定义创建git存储库.
我正在使用一个yaml文件来配置jenkins作业,并且遇到了该功能inject-passwords(请参阅此处)。但是,本文档既没有描述如何在jenkins环境中使用变量,也没有描述“加密”密码的含义(“ 如何加密”)。指向EnvInjectPlugin的链接也没有所需的信息。
在哪里可以找到有用的信息/文档?为什么本文档如此不完整?
内容:
我想以安全的方式将密码注入詹金斯工作。在此jenkins作业中,我想使用此密码作为登录在线服务的密码,以便测试该服务的多个方面。我需要测试脚本来获取该密码(环境变量?)才能登录服务。
未解决的参考文档中未回答的问题:
我们有一个 Jenkins 设置(目前未使用 Jenkins Job Builder 进行管理),其中每个 Web 项目都有 5 个非常相似的 Jenkins 作业。这是一个简化的 Jenkins Job Builder yaml 文件,可以满足我们的需求:
- defaults:
name: global
project-type: 'freestyle'
disabled: false
buildTargets: 'build'
- job-template:
name: '{jobNameFirstSegment}-{jobNameSecondSegment}'
defaults: global
builders:
- ant:
targets: '{buildTargets}'
buildfile: 'build.xml'
- project:
name: lorem
jobNameFirstSegment:
- foo:
displayNameFirstSegment: 'Foo'
urlGitRepository: 'git@bitbucket.org:mycompany/foo.git'
- bar:
displayNameFirstSegment: 'Bar'
urlGitRepository: 'git@bitbucket.org:mycompany/bar.git'
- baz:
displayNameFirstSegment: 'Baz'
urlGitRepository: 'git@bitbucket.org:mycompany/baz.git'
jobNameSecondSegment:
- lorem:
buildTargets: 'build-lorem'
- ipsum:
buildTargets: 'build-ipsum'
- dolor:
buildTargets: 'build-dolor'
- sit:
buildTargets: …Run Code Online (Sandbox Code Playgroud) 我们已安排 Jenkins 构建来创建 AWS VM,VM 已成功联机,但在归档工件时,作业失败并显示以下错误消息。
\n\nArchiving artifacts\nERROR: Step \xe2\x80\x98Archive the artifacts\xe2\x80\x99 aborted due to exception: \njava.lang.NoClassDefFoundError: Could not initialize class sun.nio.fs.LinuxNativeDispatcher\n at sun.nio.fs.LinuxUserDefinedFileAttributeView.copyExtendedAttributes(LinuxUserDefinedFileAttributeView.java:291)\n at sun.nio.fs.LinuxFileSystem.copyNonPosixAttributes(LinuxFileSystem.java:72)\n at sun.nio.fs.UnixCopyFile.copyFile(UnixCopyFile.java:267)\n at sun.nio.fs.UnixCopyFile.copy(UnixCopyFile.java:581)\n at sun.nio.fs.UnixFileSystemProvider.copy(UnixFileSystemProvider.java:253)\n at java.nio.file.Files.copy(Files.java:1274)\n at hudson.FilePath$31$1.visit(FilePath.java:2296)\n at hudson.util.DirScanner.scanSingle(DirScanner.java:44)\n at hudson.FilePath$ExplicitlySpecifiedDirScanner.scan(FilePath.java:2991)\n at hudson.FilePath$31.invoke(FilePath.java:2290)\n at hudson.FilePath$31.invoke(FilePath.java:2283)\n at hudson.FilePath.act(FilePath.java:1042)\n at hudson.FilePath.act(FilePath.java:1025)\n at hudson.FilePath.copyRecursiveTo(FilePath.java:2283)\n at jenkins.model.StandardArtifactManager.archive(StandardArtifactManager.java:61)\n at hudson.tasks.ArtifactArchiver.perform(ArtifactArchiver.java:235)\n at hudson.tasks.BuildStepCompatibilityLayer.perform(BuildStepCompatibilityLayer.java:81)\n at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)\n at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:744)\n at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:690)\n at hudson.model.Build$BuildExecution.post2(Build.java:186)\n at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:635)\n at hudson.model.Run.execute(Run.java:1823)\n at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)\n at hudson.model.ResourceController.execute(ResourceController.java:97)\n at hudson.model.Executor.run(Executor.java:429)\nRun Code Online (Sandbox Code Playgroud)\n\n造成此问题的原因是什么以及如何解决?
\n在Jenkins作业构建器的管道SCM配置中,我们有两个选项——轻量级签出和浅层克隆。这些选项之间有什么区别以及我们何时使用每个选项?
在 JJB 中,您可以像这样定义项目级变量:
- defaults:
name: global
git_url: "git@....."
- project
name: some-test
jobs:
- test-{name}
- job-template
name: test-{name}
scm:
- git:
url: "{git_url}"
branches:
- master
Run Code Online (Sandbox Code Playgroud)
我的问题是,我必须在默认级别对 git_url 的值进行硬编码,还是可以使用某种 JJB 机制在作业加载/执行时将其引入?
我问的原因是包含这些 JJB 作业的 yaml 脚本可用于定义 TEST、QA 和 PROD。最好只指向一个包含 git_url 值和任何其他全局变量值的属性文件。我看了看:http : //docs.openstack.org/infra/jenkins-job-builder/definition.html?highlight=default#defaults,我没有看到任何机制。
我正在寻找在Git中维护Jenkins作业和插件配置的可能解决方案。我的动机是对Jenkins实例所做的更改进行轻松(可能是自动)备份,以及在需要恢复到以前版本的配置时进行快速恢复。(或者可能设置一个新的Jenkins实例。)
我遇到了SCM Sync配置插件和Jenkins Job Builder,并且很难确定这些解决方案是否适合我以及它们之间有什么区别。
有什么信息可以帮助我确定差异并选择适合我的需求?
我目前有一份詹金斯工作,我试图将其设置为通过 jjb 每 4 小时运行一次。我已将其配置为当前每 4 小时运行一次,方法是手动编辑作业并选择“定期构建”触发器并输入适当的值。然而,我想找到一种方法来自动化这个过程。我查看了这里的文档:https://media.readthedocs.org/pdf/jenkins-job-builder/latest/jenkins-job-builder.pdf但我没有任何运气。
这就是我目前所拥有的:
- 'build-job-jjb-{type}-{label}':
type: build
label: Build
git_repo: XXXXXXX
git_url: git@github.com:XXXXXXXX/{git_repo}.git
git_branch: origin/develop
home: pipeline/scripts
cmd: ./build.sh
triggers:
- timed: "00 08,12,16,20,00,04 * * *"
我无法远程创建Job(REST API + Postman),我尝试
开机自检:
http://localhost:8080/createItem?name=NEWJOB
要么
http://localhost:8080/job/NEWJOB/build
并且总是有403错误(GET方法起作用)。
在这里,我看到我需要为POST创建config.xml:
https://issues.jenkins-ci.org/browse/JENKINS-9410?focusedCommentId=204821&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-204821
我不明白如何创建此配置?我需要这个配置吗?如何远程创建jenkins Job?
我想通过 python 脚本在 jenkins 中构建一个作业。我对 python 完全陌生。我正在使用 python-jenkins 中的以下方法。我的 jenkins url 是 https。
server = jenkins.Jenkins(ci_jenkins_url, username=username, password=token)
Run Code Online (Sandbox Code Playgroud)
我得到了
SSLError: HTTPSConnectionPool(host='{myjenkinsur}', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')])")))
Run Code Online (Sandbox Code Playgroud)
如何通过 SSL 进行连接?