한 PC에서 다른 PC로 Jenkins를 이동하는 방법


154

현재 개발 PC에서 Jenkins를 사용하고 있습니다. 이 도구에 대한 지식이 제한되어 있기 때문에 개발 PC에 설치했습니다. 개발 PC에서 테스트했습니다. 이제 빌드 프로세스에서 장기적인 "파트너"로 Jenkins에 익숙해졌으며이 Jenkins를 전용 서버로 "이동"하려고합니다.

이 전에 나는 거의 빌드를하지 않았고 각 빌드에서 아티팩트를 아카이브했습니다. 특히 빌드 번호는 버전 관리에 매우 중요합니다.

현재 PC에서 모든 Jenkins 정보를 새 서버로 내보내려면 어떻게해야합니까?


6
방금 했어요 나는 Cédric Julien의 대답의 단계를 따랐지만 Windows에서 Jenkins가 이동 후 성공적으로 시작하기 전에 복구 설치를 실행해야한다는 것을 알았습니다. 수리 후 모든 것이 정상입니다.
Smurph269

답변:


175

Jenkins 위키 다음에 따라야 합니다.

  • 새 서버에 새로운 Jenkins 인스턴스를 설치하십시오.
  • 이전 및 새로운 Jenkins 인스턴스가 중지되었는지 확인하십시오.
  • 이전 Jenkins 인스턴스의 JENKINS_HOME의 모든 컨텐츠를 아카이브하십시오.
  • 새 JENKINS_HOME 디렉토리로 아카이브를 추출하십시오.
  • 새로운 Jenkins 인스턴스 시작
  • Jenkins의 새 인스턴스에 대한 문서 / 링크를 변경하는 것을 잊지 마십시오 :)
  • 새로운 Jenkins 파일의 소유자를 변경하는 것을 잊지 마십시오 : chown -R jenkins:jenkins $JENKINS_HOME

JENKINS_HOME은 기본적 ~/.jenkins으로 Linux 설치에 있지만 해당 위치를 정확하게 찾으려면 http : // your_jenkins_url / configure 페이지로 이동하여 첫 번째 매개 변수의 값을 확인하십시오. Home directory; JENKINS_HOME입니다.


1
새 젠킨스를 시작할 때 노드가 표시됩니다. 그러나 일부 노드를 클릭하면 URL이 다음과 같이 오래된 jenkins를 가리 킵니다 : 슬레이브 명령 줄에서 실행 : javaws old-jenkins-server : 8080 / computer / slaveMachine1 / slave-agent.jnlp 또는 슬레이브가 머리가없는 경우 : java -jar slave.jar -jnlpUrl old-jenkins-server : 8080 / computer / slaveMachine1 / slave-agent.jnlp 이제 모든 노드에서이 URL을 new-jenkins-server를 가리 키도록하려면 어떻게해야합니까?
merlachandra

13
이전 의견에서 언급 한 내 문제에 대한 해결책을 얻었습니다 : Goto Manage Jenkins> configure system. 'Jenkins URL'필드 아래의 'Jenkins Location'섹션에서 새 jenkins 서버를 가리 키도록 URL을 변경하십시오.
merlachandra

3
숨겨진 폴더도 복사하십시오!
mohi

7
haha +1 "Jenkins의 새 인스턴스에 대한 문서 / 링크를 변경하는 것을 잊지 마십시오"
Iain Smith

2
올바른 파일 권한 및 소유권에 문제가 있었 으므로이
marcinj

53

경우 귀하의 JENKINS_HOME 디렉토리에 복사 너무 커서 , 당신이 필요로하는 모든이 같은 채용, 젠킨스 플러그인 및 젠킨스 구성 설정하는 것 (및 이전 작업 결과물 및 보고서 필요하지 않습니다), 당신이 사용할 수있는 ThinBackup 플러그인 :

  1. 소스 및 대상 Jenkins 서버 모두에 ThinBackup 설치
  2. 둘 다에서 백업 디렉토리 구성 (Jenkins 관리-> ThinBackup-> 설정)

  3. Sourse Jenkins에서 ThinBackup-> Backup Now로 이동하십시오.

  4. Jenkins 소스 백업 디렉토리에서 Jenkins 대상 백업 디렉토리로 복사
  5. 대상 Jenkins에서 ThinBackup-> 복원으로 이동 한 다음 Jenkins 서비스를 다시 시작하십시오.
  6. 일부 플러그인 또는 작업이 누락 된 경우 백업 컨텐츠를 대상 JENKINS_HOME에 직접 복사하십시오.

  7. 소스 Jenkins에서 사용자 인증을 받았으며 이제 대상 Jenkins에서 잠긴 경우 Jenkins config.xml을 편집 <useSecurity>하고 false로 설정 한 후 Jenkins를 다시 시작하십시오.


2
JENKINS_HOME 디렉토리가 복사하기에 너무 큰 이유는 무엇입니까? 우리는 어떤 종류의 크기에 대해 이야기하고 있습니까?
wotanii

9
내 jenkins_home은 100GB 또는 그렇게 해달라고은 주로 버릴 물건으로, 새로운 서버에 그것을 복사 할
user230910

3
내 Jenkins_home은 ~ 4TB이므로 구성 만 전달하고 빌드 기록 또는 / usercontent가없는 씬 사본은 유용하지 않습니다.
VolleyJosh

굉장, 플러그인 ... 정말 많은 시간을 절약 .... 쉬운 일이 아닌 GB의 100s 대처
Swapnil Kotwal

11

이것은 우분투 12.04 (Jenkins ver. 1.628)에서 Ubuntu 16.04 (Jenkins ver. 1.651.2)로 옮기는 데 효과적이었습니다. 먼저 저장소에서 Jenkins를 설치했습니다 .

  1. Jenkins 서버를 모두 중지하십시오.
  2. JENKINS_HOME기존 서버에서 새 서버로 복사합니다 (예 : / var / lib / jenkins). 새 서버의 콘솔에서 :

    rsync -av username@old-server-IP:/var/lib/jenkins/ /var/lib/jenkins/

  3. 새로운 Jenkins 서버를 시작하십시오

이것이 필요하지 않을 수도 있지만

  • Manage Jenkins그리고 Reload Configuration from Disk.
  • 모든 슬레이브 연결을 끊었다가 다시 연결하십시오.
  • 에 있는지 확인 Configure System > Jenkins Location의이 Jenkins URL올바르게 새 젠킨스 서버에 할당됩니다.

새로운 Jenkins는 이전 버전과 동일한 버전을 가지고 있습니까?
Jakub Czaplicki 2016 년

@JakubCzaplicki-두 Jenkins는 1.6이지만 정확히 동일한 버전은 아닙니다. 답변이 업데이트되었습니다. 그런 다음 jenkins.war 파일을 대체하여 Ubuntu 16.04를 Jenkins 2.6으로 업데이트했습니다. stackoverflow.com/questions/11062335/…
Katu

위를하고 방문 후 /configureSecurity내가 얻을java.lang.AssertionError: InstanceIdentity is missing its singleton
maxisme

@maxisme, 늦었지만이 스레드는 언급 한 문제가 Java 버전과 관련이 있음을 나타냅니다. issues.jenkins-ci.org/browse/JENKINS-46182
카투

1

젠킨스 서버 자동화 :

1 단계:

Jenkins 홈 (작업, 구성, 플러그인 등)을 GitLab 로컬 또는 GitHub 개인 저장소에 저장할 저장소를 설정하고 Jenkins 작업, 플러그인 등의 새로운 변경 사항을 푸시하여 정기적으로 업데이트하십시오.

2 단계:

새로운 Jenkins 서버를 가동시키는 데 사용할 수있는 Jenkins 용 Puppet 호스트 그룹 / 역할을 구성하십시오 . Puppet 레시피에서 모든 기본 구성을 수행하고 최신 버전의 Jenkins를 설치하고에 대한 별도의 디렉토리 / 마운트를 설정하십시오 JENKINS_HOME.

3 단계 :

위의 Jenkins-puppet 구성을 사용하여 새 컴퓨터를 가동하십시오. 모든 것이 설치되면 Git 저장소에서 Jenkins 홈 디렉토리로 Jenkins 구성을 가져 와서 복제하고 Jenkins를 다시 시작하십시오.

4 단계 :

Jenkins URL, Jenkins 관리플러그인 관리로 이동하여 업데이트가 필요한 모든 플러그인을 업데이트하십시오.

끝난

Docker Swarm 또는 Kubernetes 를 사용 하여 슬레이브 노드를 자동 확장 할 수 있습니다 .


1

때로는 폴더를 다른 Jenkins 인스턴스에 직접 복사하기 위해 Jenkins 머신에 액세스하지 못할 수도 있습니다. 그래서 Jenkins REST API 호출을 사용하여 한 Jenkins 인스턴스에서 다른 플러그인으로 작업 및 플러그인을 설치하는 메뉴 구동 유틸리티를 작성했습니다.

플러그인 마이그레이션의 경우 :

  1. GET 요청 : {SOURCE_JENKINS_SERVER}/pluginManager/api/json?depth=1버전과 함께 설치된 플러그인 목록이 표시됩니다.
  2. 다음 플러그인을 사용하여 POST 요청을 보내 이러한 플러그인을 설치할 수 있습니다.

    final_url=`{DESTINATION_JENKINS_SERVER}/pluginManager/installNecessaryPlugins`
    
    data=`<jenkins><install plugin="{PLUGIN_NAME}@latest"/></jenkins>` (where, latest will fetch the latest version of the plugin_name)
    
    auth=`(destination_jenkins_username, destination_jenkins_password)`
    
    header=`{crumb_field:crumb_value,"Content-Type":"application/xml”}` (where crumb_field=Jenkins-Crumb and get crumb value using API call {DESTINATION_JENKINS_SERVER}/crumbIssuer/api/json
    

작업 마이그레이션의 경우 :

  1. REST 호출을 사용하여 {SOURCE_JENKINS_URL}에 설치된 작업 목록을 얻을 수 있습니다. {SOURCE_JENKINS_URL}/view/All/api/json
  2. 그런 다음 작업 URL을 사용하여 {SOURCE_JENKINS_URL}의 작업에서 각 작업 config.xml 파일을 가져올 수 있습니다 {SOURCE_JENKINS_URL}/job/{JOB_NAME}.
  3. 이 config.xml 파일을 사용하여 {DESTINATION_JENKINS_URL}에서 XML 파일의 컨텐츠를 POST하면 {DESTINATION_JENKINS_URL}에 작업이 작성됩니다.

플러그인 또는 Jenkins 마이그레이션을 시작하고 Jenkins REST API 호출을 사용하여 사용자에게 요청하는 메뉴 기반 유틸리티를 Python에서 만들었습니다.

이 URL 에서 JenkinsMigration.docx 를 참조 할 수 있습니다.


이 링크가 질문에 대한 답변을 제공 할 수 있지만 여기에 답변의 필수 부분을 포함시키고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않을 수 있습니다.
vich
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.