한 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.