我设置了Jenkins Multibranch Pipeline来构建和部署一些代码。依赖于分支,我想将代码部署到不同的机器和目录。
For any branch:
TARGET_HOST=user@ourtestingmachine
TARGET_HOST_KEY="… some key …"
TARGET_DIRECTORY="project/`encode $BRANCH_NAME`/"
For master, additionally:
TARGET_HOST=user@productionserver
TARGET_HOST_KEY="… some other key …"
TARGET_DIRECTORY="target_direcotory"
我应该在哪里存储我的TARGET_HOST配置?我想避免将这些设置与我们的源代码一起版本,因为这些设置可能会独立更改。
我的第一次尝试是在Job的配置部分设置环境变量,但在Jenkins界面中找不到任何设置。
到目前为止我考虑过的想法:
从受信任的服务器下载目标设置(在此评论中部分建议:Jenkins Multibranch Pipelines - Configuring properties in branches?)
使用两个作业:从git存储库中提取Jenkins文件的第一个任务,设置环境变量,然后调用第二个作业来检出,构建和部署实际项目。
答案 0 :(得分:1)
您可以在Jenkinsfile中使用groovy代码。 您的Jenkins文件可能如下所示:
def TARGET_HOST=""
def TARGET_HOST_KEY=""
def TARGET_DIRECTORY=""
node ('master') {
stage('detect branch') {
println("now parsing branch name:"+BRANCH_NAME)
def branch=BRANCH_NAME
// extract the information you need with regex
def m=BRANCH_NAME=~ "branches/sprints/([0-9]{4})/(.*)"
assert m instanceof java.util.regex.Matcher
if (!m) {
// no information match the regex, should be production
m=BRANCH_NAME=~ "production"
if (!m) {
throw new RuntimeException("This branch is neather production nor recognized sprint.")
}
TARGET_HOST="user@productionserver"
TARGET_HOST_KEY="… some other key …"
TARGET_DIRECTORY="target_direcotory"
}
else {
// sprint branch matched
TARGET_HOST="user@ourtestingmachine"
TARGET_HOST_KEY="… some key …"
TARGET_DIRECTORY="project-$m"
}
}
}
如果你不想在每个Jenkins文件中都有这个代码,你可以使用一个.groovy文件,它将由Jenkins文件导入,如下所示:
def func
stage('load script') {
// Funktionen werden geladen
checkout(..)
func = load './jenkins/lib/build-functions.groovy'
}
func.setEnv(BRANCH_NAME)
问候。