2017-05-03 26 views
5

Tôi đang cố gắng lấy tên chi nhánh của tôi cho một kịch bản câu lệnh jenkins. Tôi không thể lấy tên chi nhánh hiện tại. Tôi thử các cách sau:Tên chi nhánh đường ống Jenkins trả về null

stage('Check out code') 
checkout scm 
echo "My branch is: ${env.BRANCH_NAME}" 

Đây là đầu ra - nó luôn trả về giá trị rỗng.

Checking out Revision 33b531b2f1caaf8b64d968e437306f39d2dba1da (origin/pipeline) 
    > git.exe config core.sparsecheckout # timeout=10 
    > git.exe checkout -f 33b531b2f1caaf8b64d968e437306f39d2dba1da 
[Pipeline] echo 
My branch is: null 

Tôi có thiếu gì đó không?

+0

Cố gắng: 'echo "chi nhánh của tôi là: $ {} BRANCH_NAME"' ? –

+1

@tim_yates đã thử rằng với cùng một kết quả – pogorman

Trả lời

4
git.exe checkout -f 33b531b2f1caaf8b64d968e437306f39d2dba1da 

Điều đó sẽ làm cho git repo nhập detached HEAD mode, mà theo bản chất, không có nhánh.

Từ Jenkinsfile:

Các bước thanh toán sẽ kiểm mã từ kiểm soát nguồn; scm là một biến đặc biệt chỉ thị bước thanh toán để sao chép bản sửa đổi cụ thể đã kích hoạt đường ống dẫn này chạy.

Vì vậy, ${env.BRANCH_NAME} là không.

Như đã đề cập trong "Jenkins Workflow Checkout Accessing BRANCH_NAME and GIT_COMMIT", bạn có thể lấy SHA1 bạn chỉ cần kiểm tra ra với cú pháp groovy (được điều chỉnh trong một đường ống dẫn DSL Jenkins):

sh 'git rev-parse HEAD > commit' 
def commit = readFile('commit').trim() 
+0

Điều đó có nghĩa là bạn có thể thử đoán xem chi nhánh nào có liên quan đến kiểm tra SHA1: http://stackoverflow.com/a/1419637/6309 – VonC

11

Biến này chỉ hoạt động trong một pipline multibranch :

BRANCH_NAME Đối với dự án nhiều trang, tên này sẽ được đặt thành tên chi nhánh đang được tạo, ví dụ trong trường hợp bạn muốn triển khai sản xuất từ ​​chính chứ không phải từ các nhánh tính năng.

tôi đã được thử nghiệm trong một pipline bình thường

+0

Điểm tốt, chính xác hơn câu trả lời của tôi . +1 – VonC

1

workaround của tôi, Không biết nếu công việc cho người khác ..

def branchName = getCurrentBranch() 
echo 'My branch is' + branchName 

def getCurrentBranch() { 
    return sh (
     script: 'git rev-parse --abbrev-ref HEAD', 
     returnStdout: true 
    ).trim() 
} 
Các vấn đề liên quan