Cách di chuyển Jenkins từ PC này sang PC khác


154

Tôi hiện đang sử dụng Jenkins trên PC phát triển của mình. Tôi đã cài đặt nó trên PC phát triển của mình, vì tôi có kiến ​​thức hạn chế về công cụ này; Vì vậy, tôi đã thử nghiệm nó trong PC phát triển của tôi. Bây giờ, tôi cảm thấy thoải mái với Jenkins với tư cách là "đối tác" lâu dài của tôi trong quá trình xây dựng và muốn "chuyển" Jenkins này sang một máy chủ chuyên dụng.

Trước đó, tôi đã thực hiện một vài bản dựng và có các tạo tác được lưu trữ từ mỗi bản dựng. Đặc biệt, số bản dựng rất quan trọng đối với tôi để kiểm soát phiên bản.

Làm cách nào tôi có thể xuất tất cả thông tin Jenkins từ PC hiện tại sang máy chủ mới của mình?


6
Tôi chỉ làm điều này. Tôi đã làm theo các bước từ câu trả lời của Cédric Julien, nhưng tôi thấy rằng trên Windows tôi phải chạy cài đặt Sửa chữa trước khi Jenkins có thể khởi chạy thành công sau khi di chuyển. Sau khi sửa chữa, mọi thứ đều ổn.
Smurph269

Câu trả lời:


175

Theo wiki Jenkins , bạn sẽ phải:

  • Cài đặt một phiên bản Jenkins mới trên máy chủ mới
  • Hãy chắc chắn các phiên bản cũ và mới của Jenkins được dừng lại
  • Lưu trữ tất cả nội dung của JENKINS_HOME của phiên bản cũ của Jenkins
  • Trích xuất kho lưu trữ vào thư mục JENKINS_HOME mới
  • Khởi chạy phiên bản Jenkins mới
  • Đừng quên thay đổi tài liệu / liên kết đến phiên bản mới của Jenkins :)
  • Đừng quên thay đổi chủ sở hữu của các tệp Jenkins mới: chown -R jenkins:jenkins $JENKINS_HOME

JENKINS_HOME theo mặc định nằm trong ~/.jenkinsbản cài đặt Linux, chưa tìm thấy chính xác vị trí của nó, hãy truy cập trang http: // your_jenkins_url / configure và kiểm tra giá trị của tham số đầu tiên : Home directory; đây là JENKINS_HOME.


1
Khi tôi khởi chạy jenkins mới, các nút của tôi hiển thị xuống, điều này là chính xác. Nhưng khi tôi nhấp vào một số nút, các URL sẽ trỏ đến jenkins cũ như sau: Chạy từ dòng lệnh nô lệ: javaws old-jenkins-server: 8080 / computer / SlaveMachine1 / Slave-agent.jnlp Hoặc nếu nô lệ không có đầu: java -jar Slave.jar -jnlpUrl old-jenkins-server: 8080 / computer / nôMachine1 / Slave-agent.jnlp Bây giờ tôi nên tạo các URL này cho mọi nút để trỏ đến máy chủ mới-jenkins như thế nào?
merlachandra

13
Có giải pháp cho vấn đề của tôi được đề cập trong bình luận trước đây của tôi: Goto Manage Jenkins> configure system. Ở đây trong phần 'Vị trí Jenkins', trong trường 'URL Jenkins', thay đổi URL để trỏ nó đến máy chủ jenkins mới.
merlachandra

3
đảm bảo sao chép các thư mục ẩn là tốt!
mohi

7
haha +1 cho "đừng quên thay đổi tài liệu / liên kết đến phiên bản mới của Jenkins"
Iain Smith

2
Tôi gặp vấn đề với quyền và quyền sở hữu tệp chính xác, để khắc phục, tôi đã sử dụng tập lệnh docker
marcinj

53

Trong trường hợp thư mục JENKINS_HOME của bạn quá lớn để sao chép và tất cả những gì bạn cần là thiết lập cùng cấu hình Jobs, Jenkins Plugins và Jenkins (và không cần các báo cáo và tạo tác công việc cũ), thì bạn có thể sử dụng Plugin ThinBackup :

  1. Cài đặt ThinBackup trên cả máy chủ Jenkins nguồn và đích
  2. Định cấu hình Thư mục sao lưu trên cả hai (trong Manage Jenkins -> ThinBackup -> Cài đặt)

  3. Trên Sference Jenkins đi tới ThinBackup -> Sao lưu ngay

  4. Sao chép từ thư mục Sao lưu nguồn Jenkins vào Thư mục sao lưu mục tiêu Jenkins
  5. Trên Target Jenkins, truy cập ThinBackup -> Khôi phục, sau đó khởi động lại dịch vụ Jenkins.
  6. Nếu một số Plugin hoặc Jobs bị thiếu, hãy sao chép trực tiếp nội dung sao lưu vào JENKINS_HOME đích.

  7. Nếu bạn đã xác thực người dùng trên Jenkins nguồn và hiện đã bị khóa trên Jenkins đích, sau đó chỉnh sửa cấu hình Jenkins, đặt <useSecurity>thành false và khởi động lại Jenkins.


2
Tại sao thư mục JENKINS_HOME sẽ quá lớn để sao chép? Những loại kích thước chúng ta đang nói về?
wotanii

9
jenkins_home của tôi là 100Gb hoặc hơn, không muốn sao chép nó sang máy chủ mới, vì công cụ chủ yếu là vứt đi
user230910

3
Jenkins_home của tôi là ~ 4TB, vì vậy một bản sao mỏng chỉ mang cấu hình và không có lịch sử xây dựng hoặc / usercontent nào hữu ích.
VolleyJosh

Tuyệt vời, Plugin ... Thực sự đã tiết kiệm rất nhiều thời gian .. đối phó với 100 GB GB không phải là một công việc dễ dàng
Swapnil Kotwal

11

Điều này làm việc cho tôi để chuyển từ Ubuntu 12.04 (Jenkins phiên bản 1.628) sang Ubuntu 16.04 (Jenkins phiên bản 1.651.2). Lần đầu tiên tôi cài đặt Jenkins từ kho lưu trữ .

  1. Dừng cả hai máy chủ Jenkins
  2. Sao chép JENKINS_HOME(ví dụ / var / lib / jenkins) từ máy chủ cũ sang máy chủ mới. Từ bảng điều khiển trong máy chủ mới:

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

  3. Bắt đầu máy chủ Jenkins mới của bạn

Bạn có thể không cần điều này, nhưng tôi đã phải

  • Manage JenkinsReload Configuration from Disk.
  • Ngắt kết nối và kết nối tất cả các nô lệ một lần nữa.
  • Kiểm tra xem trong Configure System > Jenkins Location, cái Jenkins URLđược gán chính xác cho máy chủ Jenkins mới.

Jenkins mới có phiên bản giống với phiên bản cũ không?
Jakub Czaplicki

@JakubCzaplicki - Cả Jenkins đều là 1.6, nhưng không hoàn toàn giống nhau. Trả lời cập nhật. Sau đó tôi đã cập nhật Ubuntu 16.04 lên Jenkins 2.6 thay thế tệp jenkins.war và nó hoạt động tốt. stackoverflow.com/questions/11062335/ cường
Katu

Sau khi thực hiện những điều trên và ghé thăm, /configureSecuritytôi nhận đượcjava.lang.AssertionError: InstanceIdentity is missing its singleton
maxisme

@maxisme, muộn nhưng chủ đề này cho thấy vấn đề bạn đề cập có liên quan đến phiên bản java. vấn đề.jenkins
Katu

1

Tự động hóa máy chủ Jenkins:

Bước 1:

Thiết lập kho lưu trữ để lưu trữ nhà Jenkins (công việc, cấu hình, plugin, v.v.) trong kho lưu trữ riêng của GitLab hoặc trên kho riêng của GitHub và giữ cho nó được cập nhật thường xuyên bằng cách đẩy bất kỳ thay đổi mới nào đối với công việc, plugin, v.v.

Bước 2:

Định cấu hình nhóm / vai trò máy chủ rối cho Jenkins có thể được sử dụng để quay các máy chủ Jenkins mới. Thực hiện tất cả các cấu hình cơ bản trong công thức Puppet và đảm bảo rằng nó cài đặt phiên bản mới nhất của Jenkins và thiết lập một thư mục / mount riêng cho JENKINS_HOME.

Bước 3:

Quay lên một máy mới sử dụng cấu hình con rối Jenkins ở trên. Khi mọi thứ đã được cài đặt, lấy / sao chép cấu hình Jenkins từ kho Git sang thư mục nhà của Jenkins và khởi động lại Jenkins.

Bước 4:

Truy cập URL Jenkins, Quản lý JenkinsQuản lý plugin và cập nhật tất cả các plugin yêu cầu cập nhật.

Làm xong

Bạn có thể sử dụng Docker Swarm hoặc Kubernetes để tự động chia tỷ lệ các nút tớ.


1

Đôi khi chúng tôi có thể không có quyền truy cập vào máy Jenkins để sao chép thư mục trực tiếp vào một phiên bản Jenkins khác. Vì vậy, tôi đã viết một tiện ích điều khiển menu sử dụng các lệnh gọi API REST của Jenkins để cài đặt các plugin và công việc từ phiên bản Jenkins này sang phiên bản khác.

Để di chuyển plugin:

  1. Yêu cầu GET: {SOURCE_JENKINS_SERVER}/pluginManager/api/json?depth=1sẽ giúp bạn có danh sách các plugin được cài đặt với phiên bản của chúng.
  2. Bạn có thể gửi yêu cầu POST với các tham số sau để cài đặt các plugin này.

    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
    

Đối với việc di chuyển công việc:

  1. Bạn có thể nhận danh sách các công việc được cài đặt trên {SOURCE_JENKINS_URL} bằng cách sử dụng lệnh gọi REST, {SOURCE_JENKINS_URL}/view/All/api/json
  2. Sau đó, bạn có thể nhận từng tệp cấu hình công việc từ các công việc trên {SOURCE_JENKINS_URL} bằng URL công việc {SOURCE_JENKINS_URL}/job/{JOB_NAME}.
  3. Sử dụng tệp config.xml này để POST nội dung của tệp XML trên {DESTINATION_JENKINS_URL} và điều đó sẽ tạo ra một công việc trên {DESTINATION_JENKINS_URL}.

Tôi đã tạo một tiện ích điều khiển menu trong Python để yêu cầu người dùng bắt đầu di chuyển plugin hoặc Jenkins và sử dụng các lệnh gọi API REST của Jenkins để thực hiện.

Bạn có thể giới thiệu JenkinsMigration.docx từ URL này


Mặc dù liên kết này có thể trả lời câu hỏi, tốt hơn là bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở nên không hợp lệ nếu trang được liên kết thay đổi.
vich
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.