Làm thế nào để bạn sao lưu công việc Jenkins & cấu hình chính?


56

Tôi muốn sao lưu tất cả các công việc và tập tin cấu hình của Jenkins. Cách dễ nhất để làm điều đó là gì?


Bạn đã thử gì?
030

1
Tôi đã thử điều này .
kenorb

Câu trả lời:


33

Có nhiều cách để làm điều này nhưng cách dễ nhất tôi có thể nghĩ là thực hiện sao lưu thư mục Jenkins Home.

Bạn có thể thấy nhà Jenkins của bạn ở đâu với:

echo $JENKINS_HOME

Và ví dụ, nếu bạn chỉ muốn sao lưu các công việc bạn có thể đi tới:

cd $JENKINS_HOME/jobs

Và tạo một bản sao lưu cho thư mục đó.

Tất cả cấu hình đó sẽ là một loạt các tệp XML .

Nếu bạn đang sử dụng hình ảnh docker chính thức của Jenkins , ngôi nhà sẽ ở trên:

/var/jenkins_home

2
Tôi cần chuyển sang người dùng jenkins để có quyền truy cập vào $JENKINS_HOMEbiến môi trường: sudo su -s /bin/bash jenkinsvà sau đó echo $JENKINS_HOME, đối với tôi là/var/lib/jenkins
Bryce Guinta

2
Vấn đề với việc sao lưu toàn bộ thư mục 'công việc' là việc thực thi công việc cũng sẽ được sao chép - điều này có thể có nghĩa là nhiều GB.
Mike Argyriou

Liệu dịch vụ của Jenkins có nên khởi động lại không?
Xin Mạnh

Nhà Jenkins trong MacOS (cài đặt mặc định của Homebrew): ~ / .jenkins
chuckSaldana

30

Tất cả jobs/các tệp công việc ( ) và tệp cấu hình chính ( config.xml) có thể được tìm thấy trong thư mục chính của Jenkins ( JENKINS_HOME) trong cấu trúc sau:

JENKINS_HOME
 +- config.xml     (jenkins root configuration)
 +- *.xml          (other site-wide configuration files)
 +- userContent    (files in this directory will be served under your http://server/userContent/)
 +- fingerprints   (stores fingerprint records)
 +- plugins        (stores plugins)
 +- workspace (working directory for the version control system)
     +- [JOBNAME] (sub directory for each job)
 +- jobs
     +- [JOBNAME]      (sub directory for each job)
         +- config.xml     (job configuration file)
         +- latest         (symbolic link to the last successful build)
         +- builds
             +- [BUILD_ID]     (for each build)
                 +- build.xml      (build result summary)
                 +- log            (log file)
                 +- changelog.xml  (change log)

Hầu hết các cấu hình đều ở định dạng XML, vì vậy sao lưu tất cả .xmlcác tệp là đủ.

Tất cả các cài đặt, nhật ký xây dựng, lưu trữ tạo tác được lưu trữ trong thư mục JENKINS_HOME. Đơn giản chỉ cần lưu trữ thư mục này để sao lưu. Tương tự, khôi phục dữ liệu chỉ là thay thế nội dung của thư mục JENKINS_HOME từ bản sao lưu.

Sao lưu có thể được thực hiện mà không dừng máy chủ, nhưng khi bạn khôi phục, xin vui lòng dừng máy chủ.


Đối với các bản sao lưu nhất quán, nên giữ JENKINS_HOMEthư mục trong kho Git.

Ví dụ:

cd $JENKINS_HOME
git init
shopt -s globstar
git add **/config.xml
git commit -m'Added job config files' -a

và đẩy các tập tin vào kho lưu trữ bên ngoài. Bạn cũng có thể thêm .gitignoretệp sau để bỏ qua một số tệp.

Liên quan: Có cách nào để giữ các tệp cấu hình Hudson / Jenkins trong kiểm soát nguồn không?


Bạn có thường xuyên tạo bản sao lưu không? Bạn có tự động đẩy mã vào kho git không? Nếu đúng, bạn có tạo Yêu cầu Kéo phải được hợp nhất thủ công (can thiệp thủ công) để thực hiện kiểm tra tính toàn vẹn sao lưu không?
030

2
@ 030 Thường là thủ công sau một số thay đổi lớn, khi tôi biết cấu hình ổn định và tôi cần sao lưu nó, vì Jenkins thường thích phá vỡ mọi thứ, chẳng hạn như thay đổi nô lệ từ unix sang windows, tự xóa mật khẩu khỏi biểu mẫu, vì vậy có chúng trong git / GitHub, tôi có thể dễ dàng so sánh và tìm dữ liệu còn thiếu và thêm lại hoặc hoàn nguyên một số tệp cụ thể. Có một số plugin để giữ thay đổi lịch sử, nhưng tôi không thấy nó hữu ích.
kenorb

Bạn lưu trữ mật khẩu trong git? Bạn có mã hóa chúng không? Bạn có sử dụng đường ống hay còn gọi là Pipeline như Code không?
030

3
@ 030 Jenkins mã hóa mật khẩu / thông tin theo mặc định, nhưng bạn có thể dễ dàng giải mã chúng. Tuy nhiên, không có khóa chính (không phải là một phần của bản sao lưu) hoặc quyền truy cập vào Jenkins, không ai khác có thể. Tôi không sử dụng Pipeline làm Code.
kenorb

Làm thế nào để bạn kiểm tra tính toàn vẹn của bản sao lưu này trong git? Ví dụ: bạn có quay một máy ảo hoặc hệ thống docker, gắn git repo và kiểm tra xem mọi thứ có còn hoạt động không?
030

11

Nếu công việc Jenkins của bạn được xác định trong Jenkinsfile, bạn có thể lưu trữ nó trong kho git và tải nó lên bằng cách sử dụng Pipeline .

Thật không may, vì không phải tất cả các plugin Jenkins đều hỗ trợ Jenkinsfile và Pipeline, bạn sẽ cần phải tự tạo Jenkinsfiles mới nếu bạn muốn chuyển các công việc hiện tại sang định dạng này.


9

Các SCM Sync Cấu hình Plugin thực hiện chính xác những gì bạn muốn. Hoạt động với svn hoặc git để sao lưu cấu hình công việc và lõi jenkins của bạn, do đó giúp bạn dễ dàng theo dõi ai đã thực hiện thay đổi, cũng như sao lưu.


1
Tôi thực sự tar thư mục $ JENKINS_HOME, nhưng điều này có vẻ tốt hơn nhiều.
MrMesees

2
Các plugin đó có vẻ không hoạt động / đã chết - nó có thực sự hoạt động và ngang bằng với năm 2017 không?
Tuukka Mustonen

5

Có một số cách để sao lưu dữ liệu jenkins và cấu hình chính. Cách tốt nhất để sao lưu là sử dụng plugin Thinbackup. Bạn có thể lên lịch sao lưu kịp thời bằng cách sử dụng biểu thức cron. Bạn có thể cấu hình sao lưu đầy đủ và sao lưu gia tăng là tốt.

Một cách khác để sao lưu dữ liệu và cấu hình là chụp ảnh đĩa của máy chủ chính jenkins của bạn. Cách lý tưởng để thực hiện việc này bằng cách gắn đĩa và liên kết thư mục cấu hình jenkins với điểm gắn đĩa

Cả hai kịch bản đều được giải thích tốt trong bài viết trên blog này . Bạn sẽ có một ý tưởng tốt hơn và các bước cho các cấu hình.


3

Tôi đang sử dụng các tập lệnh từ sue445/jenkins-backup-script.

Nó lưu trữ các cài đặt và plugin của Jenkins như:

  • $JENKINS_HOME/*.xml
  • $JENKINS_HOME/jobs/*/*.xml
  • $JENKINS_HOME/nodes/*
  • $JENKINS_HOME/plugins/*.jpi
  • $JENKINS_HOME/secrets/*
  • $JENKINS_HOME/users/*

Sử dụng

./jenkins-backup.sh /path/to/jenkins_home archive.tar.gz

# add timestamp suffix
./jenkins-backup.sh /path/to/jenkins_home backup_`date +"%Y%m%d%H%M%S"`.tar.gz

3

Bạn có thể thử plugin thinBackup (mặc dù nó không được duy trì tích cực) [nếu lấy bản sao lưu logic là tất cả những gì bạn muốn] (tức là hầu hết các tệp xml cấu hình, công việc, nút, v.v.). Kích thước sao lưu sẽ không lớn.


1

Tôi cần di chuyển một Jenkins từ một phiên bản Windows Server sang một phiên bản khác. Cuối cùng tôi cũng làm được như thế:

  • Dừng dịch vụ Jenkins (nếu bạn có đủ khả năng)
  • Sao chép toàn bộ thư mục Jenkins (theo mặc định C:\Program Files x86\Jenkins)
  • Dán vào ví dụ mới
  • Vào trong thư mục và chạy jenkins.exe install

Điều này sẽ đăng ký Jenkins mới dán như một dịch vụ trên máy mới và sẽ hoạt động giống nhau 100%.

Nếu điều này hoạt động thì nếu bạn cần một bản sao lưu chỉ để đảm bảo an toàn trong tương lai, hãy sao chép thư mục Jenkins ở đâu đó. Nó sẽ hoạt động như một ảnh chụp nhanh.

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.