6

Tôi đang sử dụng Jenkins để thực hiện tích hợp liên tục. Tôi có khá nhiều công việc có nhiều mã cấu hình giống nhau. Tôi đang ở giữa việc kéo tất cả vào một tập lệnh phổ biến mà tôi muốn chạy trước và sau khi xây dựng.Đặt biến môi trường toàn cục bên trong kịch bản lệnh chạy giai đoạn xây dựng Xcode

Tôi đã không thể tìm ra cách đặt một số biến môi trường trong tập lệnh đó, để cả lệnh xây dựng Xcode và xây dựng Jenkins có thể nhìn thấy chúng.

Có ai biết nếu điều này là có thể không?

+0

Có lẽ câu trả lời này có thể giúp - http://stackoverflow.com/a/32743908/67824. Nó không cho phép bạn định nghĩa các biến môi trường toàn cầu, nhưng nó cho phép bạn thay đổi các thiết lập xây dựng xcodeproj mà có lẽ là những gì bạn muốn các biến môi trường (ít nhất đó là trường hợp của tôi). –

Trả lời

5

Không thể thực hiện chính xác những gì bạn yêu cầu. Một quá trình không thể thay đổi các biến môi trường của một tiến trình khác. Các bước xây dựng trước và sau và thực tế chạy trong các quy trình khác nhau.

Nhưng bạn có thể tạo tập lệnh đặt các biến môi trường chung và chia sẻ tập lệnh đó giữa tất cả các bản dựng của bạn.

Đầu tiên sẽ gọi shell của bạn để thực hiện các lệnh trong kịch bản và sau đó gọi xcodebuild:

# Note the dot in the beginning of the next line. It is not a typo. 
. set_environment.sh 
xcodebuild myawesomeapp.xcodeproj 

Các kịch bản có thể trông như thế này:

export VARIABLE1=value1 
export VARIABLE2=value2 

Làm thế nào chính xác công việc của bạn sẽ chia sẻ script phụ thuộc vào môi trường của bạn và trường hợp sử dụng. Bạn có thể

  • nơi kịch bản ở một số vị trí nổi tiếng trên các máy chủ Jenkins hoặc
  • nơi kịch bản trong phiên bản kiểm soát cây nguồn nếu tất cả công việc của bạn chia sẻ kho lưu trữ cùng hoặc
  • nơi kịch bản trong một kho lưu trữ của riêng nó và tạo một bản dựng Jenkins lưu trữ kịch bản như một tạo phẩm xây dựng. Tất cả các công việc khác sau đó sẽ sử dụng plugin Copy Artifact để lấy một bản sao của tập lệnh từ các tạo phẩm của công việc kịch bản lệnh.
+0

Tôi không thấy điều này giúp ích gì. Lý do tôi (và rất nhiều người khác) đang xem xét điều này, là có khả năng xây dựng một bước ảnh hưởng đến các bước xây dựng tiếp theo thông qua các biến môi trường thiết lập. Trong trường hợp của tôi, thậm chí thiết lập một macro xử lý được xác định trước sẽ đủ, nhưng câu trả lời của bạn không. Hoặc có thể bạn có nghĩa là một bước xây dựng nhất định nên VIẾT TO DISK kịch bản xuất khẩu các biến, và đó là chạy bởi tất cả các mục tiêu khác? –

0

Từ Apple's Technical Q&A QA1067 nó xuất hiện rằng nếu bạn tạo ra các tập tin /Users/YOU/.MacOSX/environment.plist và cư nó với các biến môi trường mong muốn của bạn rằng tất cả các quá trình (đưa ra bởi người sử dụng với các file environment.plist trong dir nhà của họ) sẽ đón các biến môi trường . Bạn có thể cần khởi động lại máy tính của mình (hoặc chỉ đăng xuất và đăng nhập lại) trước khi một quy trình mới được khởi chạy sẽ nhận các biến.
This article cũng tuyên bố rằng Xcode cũng sẽ chuyển các biến này sang tập lệnh giai đoạn xây dựng. Tôi chưa thử nghiệm nó nhưng lần sau tôi khởi động lại MacBook của tôi, tôi sẽ cho bạn biết nếu nó hoạt động.

Từ http://developer.apple.com/library/mac/#/legacy/mac/library/qa/qa1067/_index.html

Q: How do I set environment for all processes launched by a specific user?


A: It is actually a fairly simple process to set environment variables for processes launched by a specific user.

Có một tập tin môi trường đặc biệt mà loginwindow tìm kiếm mỗi lần người dùng đăng nhập Các tập tin môi trường. là: ~/.MacOSX/environment.plist (hãy cẩn thận phân biệt chữ hoa chữ thường). Trong đó '~' là thư mục chính của người dùng mà chúng tôi quan tâm.Bạn sẽ phải tự tạo thư mục .MacOSX bằng thiết bị đầu cuối (bằng cách nhập mkdir .MacOSX). Bạn cũng sẽ phải tự mình tạo ra môi trường . Tệp môi trường thực sự ở định dạng XML/plist (đảm bảo thêm phần mở rộng .plist vào cuối tên tệp hoặc điều này sẽ không hoạt động).

+0

Nó có hoạt động không? Tôi đã không thể có được xcode để xem các biến của tôi bằng cách sử dụng phương pháp này ... – brendanjerwin

+0

@brendan nope, nó không làm việc cho tôi, hoặc, không may. – chown

Các vấn đề liên quan