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

时间:2010-01-18 15:39:17

标签: version-control hudson jenkins jenkins-plugins

我是Hudson / Jenkins的新手,想知道是否有办法检查Hudson的配置文件来源控制。

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

10 个答案:

答案 0 :(得分:60)

最有帮助的答案

有一个名为SCM Sync configuration plugin的插件。


原始答案

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

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

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

答案 1 :(得分:39)

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

Storing the Job information of Jenkins in Git

  

我发现提交量有点压倒性,所以我决定手动控制提交并仅保存作业信息而不是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

答案 2 :(得分:18)

要使用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 Gistthis blog post

答案 3 :(得分:14)

有一个新的SCM Sync Configuration plug-in可以完全满足您的要求。

  

SCM Sync配置Hudson插件   旨在实现两个主要特征:

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

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

答案 4 :(得分: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

答案 5 :(得分:4)

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

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

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

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

基本上,此解决方案使未来的Jenkins / Hudson更新更容易,因为新文件不会自动在范围内。你只需要了解你真正想要的东西。

答案 6 :(得分:2)

Mark(https://stackoverflow.com/a/4066654/142207)的回答应该适用于SVN和Git(尽管Git配置对我不起作用)。

但是如果你需要它来使用Mercurial repo,请使用以下脚本创建一个作业:

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

答案 7 :(得分:1)

written a plugin可以让您检查Jenkins指令到源代码管理中。只需添加一个包含内容的.jenkins.yml文件:

script:
    - make
    - make test

和詹金斯会这样做:

enter image description here

答案 8 :(得分:1)

更准确.gitignore,受nepa的回复启发:

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

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

答案 9 :(得分:0)

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

将整个哈德森保留在git中是有好处的。记录所有配置更改,您可以在一台计算机上轻松测试测试,然后使用git pull更新其他计算机。

我们使用它作为我们哈德逊连续交付设置的样板。

此致 的Morten