Tôi đang làm một đường ống đơn giản:tập tin tải với các biến môi trường Jenkins Pipeline
Build -> Staging -> Sản xuất
tôi cần biến môi trường khác nhau cho dàn dựng và sản xuất, vì vậy tôi đang cố gắng để nguồn biến số.
sh 'source $JENKINS_HOME/.envvars/stacktest-staging.sh'
Nhưng nó trả Không tìm thấy
[Stack Test] Running shell script
+ source /var/jenkins_home/.envvars/stacktest-staging.sh
/var/jenkins_home/workspace/Stack [email protected]/durable-bcbe1515/script.sh: 2: /var/jenkins_home/workspace/Stack [email protected]/durable-bcbe1515/script.sh: source: not found
Đường dẫn là đúng, bởi vì tôi chạy lệnh tương tự khi tôi đăng nhập thông qua ssh, và nó hoạt động tốt.
Dưới đây là ý tưởng đường ống:
node {
stage name: 'Build'
// git and gradle build OK
echo 'My build stage'
stage name: 'Staging'
sh 'source $JENKINS_HOME/.envvars/stacktest-staging.sh' // PROBLEM HERE
echo '$DB_URL' // Expects http://production_url/my_db
sh 'gradle flywayMigrate' // To staging
input message: "Does Staging server look good?"
stage name: 'Production'
sh 'source $JENKINS_HOME/.envvars/stacktest-production.sh'
echo '$DB_URL' // Expects http://production_url/my_db
sh 'gradle flywayMigrate' // To production
sh './deploy.sh'
}
tôi nên làm gì?
- Tôi đã suy nghĩ về việc không sử dụng đường ống dẫn (nhưng tôi sẽ không thể sử dụng Jenkinsfile của mình).
- Hoặc làm công việc khác nhau cho dàn dựng và sản xuất, sử dụng EnvInject Plugin (Nhưng tôi mất điểm sân khấu của tôi)
- Hoặc làm withEnv (nhưng mã trở nên trầm trọng, bởi vì hiện nay tôi đang làm việc với 12 env VAR)
Cảm ơn câu trả lời. Đó là chính xác những gì tôi cần. Và cũng nhờ lời giải thích chi tiết. Nó rất dễ tái tạo. – Rafael
Xin lưu ý rằng việc sử dụng biến env không được khuyến khích, vì biến env là toàn cục. Thực hành được khuyến nghị là tải các biến cục bộ, và sau đó cuối cùng đặt chúng thành các biến môi trường nếu cần trong một phần của một đường ống bằng cách sử dụng cấu trúc 'withEnv'. – stoned
@ ngạc nhiên như thế nào tôi có thể sử dụng một mật khẩu với withnnv và Jenkinsfile? (mà không lộ mật khẩu của tôi trên Jenkinsfile, bởi vì tôi không muốn nó trên kho git). Có cách nào không có 'tải 'myenvvars.groovy" '. – Rafael