Hudson / Jenkins 구성 파일을 소스 제어로 유지하는 방법이 있습니까?


140

나는 Hudson / Jenkins를 처음 사용하고 Hudson의 구성 파일을 소스 제어로 확인하는 방법이 있는지 궁금합니다.

UI에서 '구성 저장'이라고 표시된 일부 버튼을 클릭하고 Hudson 구성 파일을 소스 제어에 체크인하도록하는 것이 이상적입니다.


또는 주문형 Git 저장소에 해당 정보를 저장할 수 있습니다. 아래 답변을
VonC


Jenkins 파일의 구조는 HUDSON_HOME 디렉토리 를 확인하십시오 .
kenorb

답변:


62

가장 유용한 답변

SCM Sync 구성 플러그인 이라는 플러그인이 있습니다.


원래 답변

비슷한 질문에 대한 내 대답 을 살펴보십시오 . 기본 아이디어는 filesystem-scm-plugin 을 사용하여 xml 파일의 변경 사항을 감지하는 것입니다. 두 번째 부분은 SVN의 변경 사항을 커밋하는 것입니다.

편집 : 변경에 대한 사용자를 결정하는 방법을 찾으면 알려주십시오.

편집 2011-01-10 한편 새로운 플러그인 인 SCM Sync 구성 플러그인이 있습니다. 현재는 subversion 및 git에서만 작동하지만 더 많은 리포지토리에 대한 지원이 계획되어 있습니다. 0.0.3 버전부터 사용하고 있으며 지금까지는 잘 작동했습니다.


2
git을 사용하고 복잡한 환경에서 작동하면 플러그인에 몇 가지 큰 약점이 있습니다. 'Git을 사용하는 경우 기본 이름으로 SSH 키를 사용해야합니다. "id_rsa"입니다. SCM 동기화에는 ssh 키 경로를 지정하는 옵션이 없습니다. SCM Sync는 jenkins 프로세스 소유자의 홈 디렉토리에서 .ssh / id_rsa를 사용합니다. ' [ wiki.jenkins-ci.org/display/JENKINS/…
벤 허치슨

2
SCM 동기화 구성 플러그인은 Subversion 플러그인> = 2.0 ( issues.jenkins-ci.org/browse/JENKINS-21640 ) 과 호환되지 않습니다 .
Nick Jones

1
이 특정 플러그인을 사용하지 않는 것이 좋습니다. 설치 후 jenkins가 나타나지 않았습니다. 이 플러그인에는 많은 버그가있는 것으로 보이며 너무 자주 업그레이드 / 수정되지 않습니다. "SCM 동기화 구성 플러그인"피하기
vikramvi

1
@vikramvi, 당신이 제안하는 대안은 무엇입니까?
Igor Rodriguez

1
@IgorRodriguez jenkins 작업은 프로젝트 코드와 비교하여 자주 변경되지 않습니다. github에 수동으로 변경 사항을 커밋하고 있습니다.
vikramvi

38

Vogella는 최근 (2014 년 1 월 OP의 질문에 대한 2010 년 1 월과 비교) 다른 점을 가지고 있습니다. SCM 동기화 구성 플러그인 이 많은 커밋을 생성 할 수
있다고 생각하십시오 . 따라서 플러그인과 자동화 된 프로세스에 의존하는 대신 동일한 기능을 수동으로 관리합니다.

Git에 Jenkins의 작업 정보 저장

커밋의 양이 약간 압도적이라는 것을 알았으므로 커밋을 수동으로 제어하고 Jenkins 구성이 아닌 작업 정보 만 저장하기로 결정했습니다.
이를 위해 Jenkins 작업 디렉토리 (Ubuntu :)로 전환 /var/lib/jenkins/jobs하고“ git init”명령을 수행하십시오 .

.gitignoreGit 작업 정보 만 저장하기 위해 다음 파일을 만들었습니다 .

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

이제 원하는대로 변경 사항을 추가하고 커밋 할 수 있습니다.
또한 Git 리포지토리에 다른 원격 장치를 추가하면 구성을 다른 서버로 푸시 할 수 있습니다.

Alberto는 실제로 ( $JENKINS_HOME) 도 추가 할 것을 권장합니다 .

  • 젠킨스 자신의 설정 ( config.xml),
  • 젠킨스 플러그인 설정 ( hudson*.xml) 및
  • 사용자 설정 ( users/*/config.xml)

사용자 설정을 저장하지 않으면 일반 텍스트 API 토큰이 config.xml?
Boon

@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 동기화 구성 Hudson 플러그인은 다음 두 가지 주요 기능을 목표로합니다.

  • SCM 저장소와 config.xml (및 기타 리소스) 허드슨 파일을 동기화 된 상태로 유지
  • 커밋 메시지를 사용하여 모든 파일의 변경 사항 및 저자 추적

실제로 이것을 시도하지는 않았지만 유망한 것으로 보입니다.


3
Git을 사용하여 SCM 동기화 구성 플러그인의 작동 구성에 관심이 있고 몇 가지 구성을 시도했지만 제대로 작동하지 못했습니다 (로그의 오류 메시지가 가장 도움이되지 않았습니다).
Sebastiano Pilla

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-configurationJenkins CLI에서 실행 해야합니다 .


사이트 전체 구성이 제외되는 이유는 무엇입니까? 다른 답변에도 포함되어 있습니다.
Vincent Beltman

@kenorb 다시 제외하겠습니다. 주석 행은 위의 *.xml규칙을 변경하지 않고 자식은 무시 모두 를 포함하는 XML 파일 config.xml에서 jobs, 디렉토리 git status이에 자동으로 어떤 무시 새로운 프로젝트를.
Mikolasan

5

내가 선호하는 방법은 실제로 VCS에 포함하려는 구성 파일을 제외하고 Jenkins 홈 폴더의 모든 것을 제외하는 것입니다 . .gitignore내가 사용 하는 파일 은 다음과 같습니다 .

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

이것은 *( !) .gitignore자체, 작업 / 프로젝트, 플러그인 및 기타 중요 및 사용자 구성 파일을 제외한 모든 ( )을 무시 합니다.

plugins폴더 를 포함시키는 것도 고려할 가치가 있습니다. 성가신 업데이트 플러그인이 포함되어야합니다 ...

기본적으로이 솔루션을 사용하면 새 파일이 자동으로 범위에 포함되지 않으므로 향후 Jenkins / Hudson 업데이트가 더 쉬워집니다. 당신은 당신이 정말로 원하는 것을 깨달았습니다.


5

nepa.gitignore 의 답변에서 영감을 얻은 더 정확한 :

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

.xml구성 파일 및 .gitignore자체를 제외한 모든 것을 무시 합니다. (에 차이 NEPA는.gitignore는 "무시 안함"모든 최상위 디렉토리 (하지 않는다는 것입니다 !*/)와 같은 logs/, cache/등)


2

SVN 및 Git에 대해서는 Mark ( https://stackoverflow.com/a/4066654/142207 )의 답변 이 작동해야합니다 (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

2

나는 한 플러그인 작성 은 소스 제어로 젠킨스 지침을 확인할 수 있습니다. .jenkins.yml내용이 포함 된 파일을 추가하기 만하면 됩니다.

script:
    - make
    - make test

젠킨스가 할 것입니다 :

여기에 이미지 설명을 입력하십시오


0

나는 hudson을 완전히 체크인 했으므로 이것을 출발점으로 사용할 수 있습니다 https://github.com/morkeleb/continuous-delivery-with-hudson

허드슨 전체를 자식으로 유지하면 이점이 있습니다. 모든 구성 변경 사항이 기록되므로 한 컴퓨터에서 테스트를 매우 쉽게 테스트 한 다음 git pull을 사용하여 다른 컴퓨터를 업데이트 할 수 있습니다.

우리는 이것을 직장에서 hudson 연속 전달 설정을위한 상용구로 사용했습니다.

Morten 감사합니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.