145

我是 Hudson / Jenkins 的新手,想知道是否有办法将 Hudson 的配置文件签入源代码控制。

理想情况下,我希望能够单击 UI 中显示“保存配置”的某个按钮,并将 Hudson 配置文件签入源代码管理。

4

10 回答 10

64

最有帮助的答案

有一个名为SCM Sync 配置插件的插件


原始答案

看看对类似问题的回答。基本思想是使用filesystem-scm-plugin来检测 xml 文件的更改。您的第二部分是将更改提交到 SVN。

编辑:如果您找到确定更改用户的方法,请告诉我们。

编辑 2011-01-10同时有一个新插件:SCM 同步配置插件。目前它仅适用于 subversion 和 git,但计划支持更多存储库。我从 0.0.3 版开始使用它,到目前为止效果很好。

于 2010-01-18T16:15:23.880 回答
38

请注意,Vogella 最近(2014 年 1 月,与 OP 的问题 2010 年 1 月相比)对此有不同的看法。
考虑到SCM Sync 配置插件可以生成大量提交。
因此,他没有依赖插件和自动化流程,而是手动管理相同的功能:

在 Git 中存储 Jenkins 的 Job 信息

我发现提交的数量有点压倒性,所以我决定手动控制提交并只保存 Job 信息而不是 Jenkins 配置。
为此切换到您的 Jenkins 作业目录 (Ubuntu: /var/lib/jenkins/jobs) 并执行“<code>git init”命令。

我创建了以下.gitignore文件来仅存储 Git 作业信息:

builds/
workspace/
lastStable
lastSuccessful
nextBuildNumber
modules/
*.log

现在您可以随意添加和提交更改。
如果您向 Git 存储库添加另一个远程,您可以将您的配置推送到另一台服务器。

Alberto实际上也建议添加(在 中$JENKINS_HOME):

  • 詹金斯自己的配置(config.xml),
  • jenkins 插件配置(hudson*.xml)和
  • 用户配置 ( users/*/config.xml)
于 2014-01-09T12:54:33.207 回答
22

要使用 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

有关更多详细信息,请参阅此 GitHub Gist此博客文章

于 2011-01-14T20:30:25.623 回答
14

有一个新的SCM Sync Configuration 插件可以完全满足您的需求。

SCM Sync Configuration Hudson 插件针对 2 个主要功能:

  • 将您的 config.xml(和其他资源)hudson 文件与 SCM 存储库保持同步
  • 使用提交消息跟踪对每个文件所做的更改(和作者)

我还没有真正尝试过这个,但它看起来很有希望。

于 2010-11-01T04:33:26.397 回答
9

您可以在Jenkins 主文件夹中找到配置文件(例如/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 文件时,您需要重新加载它们(从磁盘重新加载配置)或reload-configuration从 Jenkins CLI 运行。

于 2016-07-11T00:21:43.413 回答
6

更准确.gitignore,灵感来自nepa的回复:

*
!.gitignore
!/jobs/
!/jobs/*/
/jobs/*/*
!/jobs/*/config.xml
!/users/
!/users/*/
/users/*/*
!/users/*/config.xml
!/*.xml

它会忽略除.xml配置文件和.gitignore自身之外的所有内容。(与nepa的不同之.gitignore处在于它不会“忽略”所有顶级目录(!*/),如logs/,cache/等)

于 2018-03-07T20:15:08.587 回答
5

我更喜欢的方式是排除 Jenkins 主文件夹中的所有内容,除了您真正希望在 VCS 中的配置文件。这是.gitignore我使用的文件:

*
!.gitignore
!/jobs/*/*.xml
!/*.xml
!/users/*/config.xml
!*/

这将忽略*除 ( !).gitignore本身、作业/项目、插件和其他重要的用户配置文件之外的所有内容 ( )。

还值得考虑包含该plugins文件夹。应该包括烦人的更新插件......

基本上,此解决方案使将来的 Jenkins/Hudson 更新更容易,因为新文件不会自动在范围内。您只需在屏幕上显示您真正想要的内容。

于 2016-11-04T09:39:15.370 回答
3

Mark 的回答(https://stackoverflow.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
于 2013-06-26T22:31:15.273 回答
2

编写了一个插件,可让您将 Jenkins 指令检查到源代码控制中。只需添加一个.jenkins.yml包含内容的文件:

script:
    - make
    - make test

詹金斯会这样做:

在此处输入图像描述

于 2015-06-25T13:57:42.237 回答
1

我完全检查了哈德森,你可以以此为起点https://github.com/morkeleb/continuous-delivery-with-hudson

将整个 hudson 保存在 git 中是有好处的。所有配置更改都会记录下来,您可以在一台机器上轻松测试测试,然后使用 git pull 更新另一台机器。

我们将其用作我们工作中的 hudson 持续交付设置的样板。

问候莫顿

于 2011-07-25T13:36:01.277 回答