วิธีการย้ายเจนกินส์จากพีซีเครื่องหนึ่งไปอีกเครื่องหนึ่ง


154

ขณะนี้ฉันกำลังใช้เจนกินส์กับพีซีที่กำลังพัฒนา ฉันติดตั้งลงบนพีซีพัฒนาของฉันเพราะฉันมีความรู้ จำกัด ในเครื่องมือนี้ ดังนั้นฉันจึงทดสอบมันในพีซีพัฒนาของฉัน ตอนนี้ฉันรู้สึกสะดวกสบายกับเจนกินส์ในฐานะ "หุ้นส่วน" ระยะยาวของฉันในกระบวนการสร้างและอยากจะ "ย้าย" เจนกินส์นี้ไปยังเซิร์ฟเวอร์เฉพาะ

ก่อนหน้านี้ฉันได้สร้างงานสร้างเพียงไม่กี่ชิ้นและเก็บสิ่งประดิษฐ์ที่เก็บถาวรไว้ในแต่ละบิลด์ โดยเฉพาะอย่างยิ่งหมายเลขบิลด์นั้นสำคัญมากสำหรับฉันในการควบคุมเวอร์ชัน

ฉันจะส่งออกข้อมูล Jenkins ทั้งหมดจากพีซีปัจจุบันของฉันไปยังเซิร์ฟเวอร์ใหม่ได้อย่างไร


6
ฉันเพิ่งทำสิ่งนี้ ฉันทำตามขั้นตอนจากคำตอบของCédric Julien แต่ฉันพบว่าใน Windows ฉันต้องเรียกใช้การติดตั้งซ่อมแซมก่อนที่เจนกินส์จะสามารถเปิดใช้งานได้สำเร็จหลังจากการย้าย หลังจากการซ่อมแซมทุกอย่างเรียบร้อยดี
Smurph269

คำตอบ:


175

การติดตามวิกิพีเดียของเจนกินส์คุณจะต้อง:

  • ติดตั้งอินสแตนซ์ Jenkins ใหม่บนเซิร์ฟเวอร์ใหม่
  • ต้องแน่ใจว่ากรณีเก่าและใหม่ของเจนกินส์หยุดลง
  • เก็บเนื้อหาทั้งหมดของ JENKINS_HOME ของอินสแตนซ์ Jenkins เก่า
  • แตกไฟล์เก็บถาวรลงในไดเร็กทอรี JENKINS_HOME ใหม่
  • เปิดตัวอินสแตนซ์เจนกินส์ใหม่
  • อย่าลืมเปลี่ยนเอกสาร / ลิงค์ไปยังตัวอย่างใหม่ของ Jenkins :)
  • อย่าลืมเปลี่ยนเจ้าของไฟล์เจนกินส์ใหม่: chown -R jenkins:jenkins $JENKINS_HOME

JENKINS_HOME เป็นค่าเริ่มต้นที่อยู่ใน~/.jenkinsการติดตั้ง Linux แต่หากต้องการค้นหาตำแหน่งที่แน่นอนให้ไปที่http: // your_jenkins_url /หน้าการกำหนดค่าและตรวจสอบค่าพารามิเตอร์แรก: Home directory; นี่คือ JENKINS_HOME


1
เมื่อฉันเปิดตัวเจนกินส์ใหม่ของฉันโหนดของฉันจะปรากฏขึ้นซึ่งถูกต้อง แต่เมื่อฉันคลิกที่โหนดบางโหนดจะมีการชี้ไปที่เจนกินส์เก่าดังนี้: เรียกใช้จากบรรทัดคำสั่งทาส: javaws old-jenkins-server: 8080 / คอมพิวเตอร์ / slaveMachine1 / slave-agent.jnlpหรือถ้าทาสเป็นหัวขาด: java -jar slave.jar -jnlpUrl old-jenkins-server: 8080 / คอมพิวเตอร์ / slaveMachine1 / slave-agent.jnlp ตอนนี้ฉันจะสร้าง URL เหล่านี้สำหรับทุกโหนดเพื่อชี้ไปยังเซิร์ฟเวอร์เจนกินส์ใหม่ได้อย่างไร
merlachandra

13
มีวิธีแก้ไขปัญหาของฉันที่กล่าวถึงในความคิดเห็นก่อนหน้าของฉัน: ไปที่จัดการเจนกินส์> กำหนดค่าระบบ ที่นี่ในส่วน 'ตำแหน่งเจนกินส์' ภายใต้ฟิลด์ 'เจนกินส์ URL' ให้เปลี่ยน URL เพื่อชี้ไปยังเซิร์ฟเวอร์เจนกินส์ใหม่
merlachandra

3
อย่าลืมคัดลอกโฟลเดอร์ที่ซ่อนอยู่ด้วย!
mohi

7
ฮ่าฮ่า +1 สำหรับ "อย่าลืมเปลี่ยนเอกสาร / ลิงก์ไปยังตัวอย่างใหม่ของเจนกินส์"
Iain Smith

2
ฉันมีปัญหาเกี่ยวกับการอนุญาตและการเป็นเจ้าของไฟล์ที่ถูกต้องในการแก้ไขฉันใช้นักเทียบท่าสคริปต์นี้ (ส่วนที่กำหนดความเป็นเจ้าของ / การอนุญาต): hub.docker.com/r/appcontainers/jenkins/~/dockerfile
marcinj

53

ในกรณีที่ไดเรกทอรี JENKINS_HOMEของคุณมีขนาดใหญ่เกินกว่าจะคัดลอกได้และสิ่งที่คุณต้องมีก็คือการตั้งค่างานเดียวกันการกำหนดค่า Jenkins Plugins และ Jenkins (และไม่จำเป็นต้องมีงานและรายงานเก่า) จากนั้นคุณสามารถใช้ปลั๊กอิน ThinBackup :

  1. ติดตั้ง ThinBackup บนเซิร์ฟเวอร์ต้นทางและเซิร์ฟเวอร์เจนกินส์เป้าหมาย
  2. กำหนดค่าไดเรกทอรีข้อมูลสำรองทั้งคู่ (ในจัดการเจนกินส์ -> ThinBackup -> การตั้งค่า)

  3. ใน Sourse Jenkins ไปที่ ThinBackup -> Backup Now

  4. คัดลอกจากไดเรกทอรีสำรองข้อมูลของเจนกินส์ไปยังไดเรกทอรีสำรองข้อมูลเป้าหมายของเจนกินส์
  5. บน Target Jenkins ไปที่ ThinBackup -> Restore จากนั้นเริ่มบริการ Jenkins ใหม่
  6. หากไม่มีปลั๊กอินหรืองานบางส่วนให้คัดลอกเนื้อหาสำรองโดยตรงไปยังเป้าหมาย JENKINS_HOME

  7. หากคุณมีการรับรองความถูกต้องของผู้ใช้ในแหล่งเจนกินส์และตอนนี้ถูกล็อกบนเป้าหมายเจนกินส์จากนั้นแก้ไขเจนกินส์ config.xml ตั้งค่า<useSecurity>เป็นเท็จและรีสตาร์ทเจนกิ้นส์


2
ทำไมไดเรกทอรี JENKINS_HOME ถึงใหญ่เกินกว่าจะคัดลอกได้ เรากำลังพูดถึงขนาดอะไร
wotanii

9
jenkins_home ของฉันคือ 100Gb หรือมากกว่านั้นไม่ต้องการคัดลอกไปยังเซิร์ฟเวอร์ใหม่เนื่องจากส่วนใหญ่จะถูกทิ้ง
user230910

3
Jenkins_home ของฉันคือ ~ 4TB ดังนั้นสำเนาบางซึ่งมีเฉพาะการกำหนดค่าและไม่มีประวัติการสร้างหรือ / usercontent มีประโยชน์
VolleyJosh

ดีเลิศ, ปลั๊กอิน ... บันทึกเวลาจริง ๆ .. จัดการ 100s GB ไม่ใช่งานง่าย
Swapnil Kotwal

11

สิ่งนี้ใช้ได้สำหรับฉันที่จะย้ายจาก Ubuntu 12.04 (Jenkins ver. 1.628) ไปยัง Ubuntu 16.04 (Jenkins ver. 1.651.2) ครั้งแรกที่ผมติดตั้งเจนกินส์จากคลัง

  1. หยุดเซิร์ฟเวอร์ Jenkins ทั้งสอง
  2. คัดลอกJENKINS_HOME(เช่น / var / lib / jenkins) จากเซิร์ฟเวอร์เก่าไปยังเซิร์ฟเวอร์ใหม่ จากคอนโซลในเซิร์ฟเวอร์ใหม่:

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

  3. เริ่มเซิร์ฟเวอร์เจนกินส์ใหม่ของคุณ

คุณอาจไม่ต้องการสิ่งนี้ แต่ฉันต้องทำ

  • Manage JenkinsReload Configuration from Diskและ
  • ตัดการเชื่อมต่อและเชื่อมต่อทาสทั้งหมดอีกครั้ง
  • ตรวจสอบว่าในConfigure System > Jenkins Locationที่Jenkins URLได้รับมอบหมายได้อย่างถูกต้องไปยังเซิร์ฟเวอร์เจนกินส์ใหม่

เจนกินส์ใหม่มีเวอร์ชั่นเดียวกันกับของเก่าหรือไม่?
Jakub Czaplicki

@JakubCzaplicki - ทั้ง Jenkins มี 1.6 แต่ไม่ใช่รุ่นเดียวกันทั้งหมด อัปเดตคำตอบแล้ว ฉันอัปเดต Ubuntu 16.04 เป็น Jenkins 2.6 แล้วแทนที่ไฟล์ jenkins.war และทำงานได้ดี stackoverflow.com/questions/11062335/…
Katu

หลังจากทำตามข้างบนและไปเยี่ยม/configureSecurityฉันjava.lang.AssertionError: InstanceIdentity is missing its singleton
maxisme

@maxisme ล่าช้า แต่กระทู้นี้แสดงให้เห็นว่าปัญหาที่คุณกล่าวถึงเกี่ยวข้องกับรุ่น java problems.jenkins-ci.org/browse/JENKINS-46182
Katu

1

Jenkins เซิร์ฟเวอร์อัตโนมัติ:

ขั้นตอนที่ 1:

ตั้งค่าพื้นที่เก็บข้อมูลเพื่อเก็บบ้านเจนกินส์ (งานการกำหนดค่าปลั๊กอิน ฯลฯ ) ใน GitLab ท้องถิ่นหรือในพื้นที่เก็บข้อมูลส่วนตัว GitHub และปรับปรุงให้เป็นประจำด้วยการผลักดันการเปลี่ยนแปลงใหม่ ๆ กับงานเจนกินส์ปลั๊กอิน ฯลฯ

ขั้นตอนที่ 2:

กำหนดค่าPuppet host-group / role สำหรับ Jenkins ที่สามารถใช้ในการหมุนเซิร์ฟเวอร์ Jenkins ใหม่ ทำทุกการกำหนดค่าพื้นฐานในสูตรหุ่นกระบอกและให้แน่ใจว่าการติดตั้งรุ่นล่าสุดของเจนกินส์และชุดขึ้นไดเรกทอรีที่แยกต่างหาก / JENKINS_HOMEติด

ขั้นตอนที่ 3:

หมุนเครื่องใหม่โดยใช้การกำหนดค่า Jenkins-puppet ด้านบน เมื่อทุกอย่างถูกติดตั้งให้คว้า / โคลนการกำหนดค่าเจนกินส์จากพื้นที่เก็บข้อมูล Git ไปที่บ้านเจนกินส์ direcotry และรีสตาร์ทเจนกินส์

ขั้นตอนที่ 4:

ไปที่ URL เจนกินส์, จัดการเจนกินส์จัดการปลั๊กอินและอัปเดตปลั๊กอินทั้งหมดที่ต้องมีการอัพเดต

เสร็จสิ้น

คุณสามารถใช้Docker SwarmหรือKubernetesเพื่อปรับขนาดโหนดทาสโดยอัตโนมัติ


1

บางครั้งเราอาจไม่สามารถเข้าถึงเครื่องเจนกินส์เพื่อคัดลอกโฟลเดอร์โดยตรงไปยังอินสแตนซ์เจนกินส์อื่น ดังนั้นฉันจึงเขียนโปรแกรมควบคุมเมนูซึ่งใช้การเรียก Jenkins REST API เพื่อติดตั้งปลั๊กอินและงานจากอินสแตนซ์ Jenkins หนึ่งไปยังอีก

สำหรับการย้ายข้อมูลปลั๊กอิน:

  1. รับคำขอ: {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. คุณสามารถรับรายการของงานที่ติดตั้งใน {SOURCE_JENKINS_URL} โดยใช้การเรียก REST {SOURCE_JENKINS_URL}/view/All/api/json
  2. จากนั้นคุณสามารถได้รับในแต่ละไฟล์ config.xml งานจากงานใน {} SOURCE_JENKINS_URL ใช้ {SOURCE_JENKINS_URL}/job/{JOB_NAME}URL
  3. ใช้ไฟล์ config.xml นี้เพื่อโพสต์เนื้อหาของไฟล์ XML บน {DESTINATION_JENKINS_URL} และจะสร้างงานใน {DESTINATION_JENKINS_URL}

ฉันสร้างยูทิลิตี้ที่ขับเคลื่อนด้วยเมนูใน Python ซึ่งขอให้ผู้ใช้เริ่มต้นการย้ายปลั๊กอินหรือเจนกินส์และใช้การเรียก Jenkins REST API เพื่อทำมัน

คุณสามารถอ้างอิงJenkinsMigration.docx ได้จาก URL นี้


แม้ว่าลิงก์นี้อาจตอบคำถามได้ดีกว่าหากรวมส่วนสำคัญของคำตอบไว้ที่นี่และให้ลิงก์สำหรับการอ้างอิง คำตอบสำหรับลิงก์เท่านั้นอาจไม่ถูกต้องหากหน้าเว็บที่เชื่อมโยงมีการเปลี่ยนแปลง
vich
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.