有没有办法将Hudson / Jenkins配置文件保留在源代码管理中?


140

我是Hudson / Jenkins的新手,我想知道是否有一种方法可以将Hudson的配置文件检入到源代码管理中。

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


或者,您可以将这些信息按需存储在Git存储库中:请参阅下面的答案
VonC 2014年


检查:HUDSON_HOME目录以获取Jenkins文件的结构。
kenorb

Answers:


62

最有用的答案

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


原始答案

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

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

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


2
我想不同的是:如果您使用git并在复杂的环境中运行,则该插件存在一些主要缺点:'如果使用Git,则应使用默认名称的SSH密钥。是“ id_rsa”。SCM Sync没有选项来指定ssh密钥路径。SCM Sync使用jenkins进程所有者主目录中的.ssh / id_rsa。从[ wiki.jenkins-ci.org/display/JENKINS/…–
本·哈奇森

2
SCM同步配置插件与Subversion插件> = 2.0不兼容(每个问题。jenkins-ci.org / browse / JENKINS-21640)。
尼克·琼斯

1
我不建议使用此特定插件,安装后詹金斯没有出现。这个插件似乎有很多错误,并且升级/修复的频率不高。避免使用“ SCM Sync配置插件”
vikramvi

1
@vikramvi,您提出什么替代方案?
伊戈尔·罗德里格斯

1
@IgorRodriguez因为与项目代码相比,詹金斯的工作没有经历频繁的更改;我正在手动将更改提交到github。
vikramvi

38

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

在Git中存储詹金斯的职位信息

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

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

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

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

Alberto实际上建议也添加$JENKINS_HOME

  • jenkins自己的配置(config.xml),
  • jenkins插件配置(hudson*.xml)和
  • 用户配置(users/*/config.xml

是否不存储用户配置,以在用户配置中公开纯文本API令牌config.xml
恩恩

@Boon实际上我并不知道,因为我最近不必使用API​​令牌。就您自己而言,这可能是一个很好的问题。
VonC

2
经过研究后,发现API令牌已在XML中加密,因此不会造成安全风险。
Boon

19

要使用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此博客文章


14

有一个新的“ SCM同步配置”插件可以完全满足您的需求。

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

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

我实际上还没有尝试过,但是看起来很有希望。


3
我会对使用Git的SCM Sync Configuration插件的工作配置感兴趣,我尝试了几种配置,但我根本无法使其工作(并且日志中的错误消息充其量是无济于事的)。
塞巴斯蒂安诺·皮拉

8

您可以在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 运行。


为什么排除站点范围内的配置?我看到其他答案的确包含了它们。
文森特·贝尔特曼

@kenorb我会再次排除它。上面的注释行*.xml不会更改规则,并且git会忽略所有 xml文件,包括config.xml来自jobs目录的xml文件,git status此后会默默地忽略任何项目。
米科拉桑

5

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

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

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

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

基本上,此解决方案使将来的Jenkins / Hudson更新变得更容易,因为新文件不会自动包含在范围内。您只需要真正想要的就可以了。


5

.gitignore受到nepa的答复启发,结果更准确:

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

它忽略除.xml配置文件及其.gitignore本身以外的所有内容。(的差异NEPA.gitignore是,它没有‘屏蔽’所有顶级目录(!*/)一样logs/cache/等等)


2

马克(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


0

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

将整个哈德逊保持在git中是有好处的。所有配置更改都会记录下来,您可以在一台计算机上相当轻松地测试测试,然后使用git pull更新另一台计算机。

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

问候莫滕

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.