有没有办法将 Hudson / Jenkins 配置文件保存在源代码控制中?
Posted
技术标签:
【中文标题】有没有办法将 Hudson / Jenkins 配置文件保存在源代码控制中?【英文标题】:Is there a way to keep Hudson / Jenkins configuration files in source control? 【发布时间】:2011-01-06 10:13:52 【问题描述】:我是 Hudson / Jenkins 的新手,想知道是否有办法将 Hudson 的配置文件签入源代码控制。
理想情况下,我希望能够单击 UI 中显示“保存配置”的某个按钮,并将 Hudson 配置文件签入源代码管理。
【问题讨论】:
或者您可以根据需要将这些信息存储在 Git 存储库中:请参阅 my answer below 另见:Can I store Jenkins configuration in the project repo (like Travis)? 检查:HUDSON_HOME directory 了解 Jenkins 文件的结构。 @kenorb 链接已失效。 另见SE DevOps: How do you back up Jenkins jobs & master configs?。 【参考方案1】:最有帮助的答案
有一个插件叫SCM Sync configuration plugin。
原答案
查看my answer 的类似问题。基本思想是使用filesystem-scm-plugin 来检测对xml 文件的更改。您的第二部分是将更改提交到 SVN。
编辑:如果您找到确定更改用户的方法,请告诉我们。
EDIT 2011-01-10 同时有一个新插件:SCM Sync configuration plugin。目前它仅适用于 subversion 和 git,但计划支持更多存储库。我从 0.0.3 版开始使用它,到目前为止效果很好。
【讨论】:
我不同意:如果您使用 git 并在复杂环境中操作,该插件有一些主要弱点:'如果您使用 Git,那么您应该使用默认名称的 SSH 密钥。它是“id_rsa”。 SCM Sync 没有指定 ssh 密钥路径的选项。 SCM Sync 使用 .ssh/id_rsa 来自 jenkins 进程所有者的主目录。来自 [wiki.jenkins-ci.org/display/JENKINS/… SCM 同步配置插件与 Subversion 插件不兼容 >=2.0 (per issues.jenkins-ci.org/browse/JENKINS-21640)。 我不推荐使用这个特定的插件,安装后 jenkins 没有出现。这个插件中似乎有很多错误,并且它不会太频繁地升级/修复。避免使用“SCM Sync 配置插件” @vikramvi,你提出的替代方案是什么? “SCM Sync 插件已弃用”【参考方案2】:请注意,Vogella 最近(2014 年 1 月,与 OP 2010 年 1 月的问题相比)对此有不同的看法。 考虑到SCM Sync configuration plugin 可以生成很多次提交。 因此,他不再依赖插件和自动化流程,而是手动管理相同的功能:
Storing the Job information of Jenkins in Git
我发现提交的数量有点庞大,所以我决定手动控制提交,只保存 Job 信息而不保存 Jenkins 配置。 为此切换到您的 Jenkins 作业目录(Ubuntu:
/var/lib/jenkins/jobs
)并执行“git init
”命令。
我创建了以下
.gitignore
文件来仅存储 Git 作业信息:
builds/
workspace/
lastStable
lastSuccessful
nextBuildNumber
modules/
*.log
现在您可以根据自己的意愿添加和提交更改。 如果您将另一个远程服务器添加到您的 Git 存储库,您可以将您的配置推送到另一个服务器。
Alberto 实际上也建议添加(在$JENKINS_HOME
):
config.xml
),
jenkins 插件配置 (hudson*.xml
) 和
用户配置 (users/*/config.xml
)
【讨论】:
不会存储用户配置在其config.xml
中公开明文 API 令牌吗?
@Boon 实际上我不知道,因为我最近不必使用 API 令牌。这可能是一个很好的问题。
经过一番研究,发现API令牌在XML中是加密的,所以这不会造成安全风险。【参考方案3】:
要使用 Git 手动管理您的配置,以下 .gitignore 文件可能会有所帮助。
# Miscellaneous Hudson litter
*.log
*.tmp
*.old
*.bak
*.jar
*.json
# Generated Hudson state
/.owner
/secret.key
/queue.xml
/fingerprints/
/shelvedProjects/
/updates/
# Tools that Hudson manages
/tools/
# Extracted plugins
/plugins/*/
# Job state
builds/
workspace/
lastStable
lastSuccessful
nextBuildNumber
有关详细信息,请参阅 this GitHub Gist 和 this blog post。
【讨论】:
caches 目录呢,有理由不忽略它吗?【参考方案4】:有一个新的SCM Sync Configuration plug-in 完全符合您的要求。
SCM 同步配置 Hudson 插件 针对 2 个主要功能:
与您的 config.xml(和其他资源)hudson 文件保持同步 SCM 存储库 使用提交消息跟踪对每个文件所做的更改(和作者)
我还没有真正尝试过,但看起来很有希望。
【讨论】:
我对使用 Git 的 SCM Sync Configuration 插件的工作配置感兴趣,我尝试了几种配置,但我根本无法使其工作(并且日志中的错误消息是充其量没有帮助)。 SCM Sync Configuration plugin 已弃用:“一般来说,这意味着此插件要么已过时,不再开发,要么可能不再工作。”。跨度> 【参考方案5】:您可以在Jenkins home folder(例如/var/lib/jenkins
)中找到配置文件。
要将它们保留在 VCS 中,首先以 Jenkins (sudo su - jenkins
) 身份登录并创建其 git 凭据:
git config --global user.name "Jenkins"
git config --global user.email "jenkins@example.com"
然后初始化、添加、提交基本文件如:
git init
git add config.xml jobs/ .gitconfig
git commit -m'Adds Jenkins config files' -a
还可以考虑创建 .gitignore
并忽略以下文件(根据需要自定义):
# Git untracked files to ignore.
# Cache.
.cache/
# Fingerprint records.
fingerprints/
# Working directories.
workspace/
# Secret files.
secrets/
secret.*
*.enc
*.key
users/
id_rsa
# Plugins.
plugins/
# State files.
*.state
# Job state files.
builds/
lastStable
lastSuccessful
nextBuildNumber
# Updates.
updates/
# Hidden files.
.*
# Except git config files.
!.git*
!.ssh/
# User content.
userContent/
# Log files.
logs/
*.log
# Miscellaneous litter
*.tmp
*.old
*.bak
*.jar
*.json
*.lastExecVersion
然后添加:git add .gitignore
。
完成后,您可以添加作业配置文件,例如
shopt -s globstar
git add **/config.xml
git commit -m'Added job config files' -a
如果需要,最后添加并提交任何其他文件,然后将其推送到要保留配置文件的远程存储库。
当 Jenkins 文件更新时,您需要重新加载它们(从磁盘重新加载配置)或从 Jenkins CLI 运行 reload-configuration
。
【讨论】:
为什么站点范围的配置被排除在外?我看到其他答案确实包括它们。 @kenorb 我会再次排除它。*.xml
上方的注释行不会更改规则,并且 git 会忽略 所有 xml 文件,包括来自 jobs
目录的 config.xml
,git status
在此默默地忽略任何 new 项目。【参考方案6】:
一个更准确的.gitignore
,灵感来自nepa的回复:
*
!.gitignore
!/jobs/
!/jobs/*/
/jobs/*/*
!/jobs/*/config.xml
!/users/
!/users/*/
/users/*/*
!/users/*/config.xml
!/*.xml
它会忽略除.xml
配置文件和.gitignore
本身之外的所有内容。
(与nepa 的.gitignore
的区别在于它不会像logs/
、cache/
等那样“忽略”所有***目录(!*/
)
【讨论】:
【参考方案7】:我更喜欢的方式是排除 Jenkins 主文件夹中的所有内容除了您真正希望在 VCS 中的配置文件。这是我使用的.gitignore
文件:
*
!.gitignore
!/jobs/*/*.xml
!/*.xml
!/users/*/config.xml
!*/
这会忽略除 (!
) .gitignore
本身、作业/项目、插件和其他重要的用户配置文件之外的所有内容 (*
)。
还值得考虑包含plugins
文件夹。烦人的更新插件应该包括在内...
基本上,此解决方案使将来的 Jenkins/Hudson 更新更容易,因为新文件不会自动在范围内。您只需在屏幕上显示您真正想要的内容。
【讨论】:
【参考方案8】:Mark (https://***.com/a/4066654/142207) 的回答应该适用于 SVN 和 Git(尽管 Git 配置不适用于我)。
但如果您需要它来使用 Mercurial 存储库,请使用以下脚本创建作业:
hg remove -A || true
hg add ../../config.xml
hg add ../../*/config.xml
if [ ! -z "`hg status -admrn`" ]; then
hg commit -m "Scheduled commit" -u fill_in_the@blank.com
hg push
fi
【讨论】:
【参考方案9】:我有written a plugin,可让您将 Jenkins 指令检查到源代码控制中。只需添加一个包含内容的.jenkins.yml
文件:
script:
- make
- make test
詹金斯会这样做:
【讨论】:
【参考方案10】:我完全签入了哈德森,您可以以此为起点https://github.com/morkeleb/continuous-delivery-with-hudson
将整个 hudson 保存在 git 中是有好处的。所有配置更改都会记录下来,您可以在一台机器上轻松测试测试,然后使用 git pull 更新另一台机器。
我们将其用作工作中 hudson 持续交付设置的样板。
问候 莫腾
【讨论】:
以上是关于有没有办法将 Hudson / Jenkins 配置文件保存在源代码控制中?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Jenkins/Hudson 上传 APK 到 Play 商店?