Расширение переменных в декларативном конвейере Jenkins в Windows

Рассмотрим следующий конвейер:

pipeline {
/* continuous build pipeline for jenkins */
    agent any
    environment {
        /* initialize vairables for this job */
        path_msbuild = 'C:\\Program Files (x86)\\MSBuild\\14.0\\Bin\\msbuild.exe'
        path_workspace_root = 'C:\\Program Files (x86)\\Jenkins\\workspace\\MyApplication'
        path_solutionfile = '%path_workspace_root%\\MyApplication.sln' /* this variable doesn't expand */
        databasename = 'elements'
    }
    stages {
        stage ('solution') {
            steps {
                echo 'building solution'
                bat '"%path_msbuild%" "%path_solutionfile%" /p:Configuration=Release'
            }
        }
    }
}

Это задание сборки не выполняется, поскольку %path_workspace_root% не расширяется, и я получаю сообщение об ошибке, что искомый файл не может быть найден.

Я попытался объявить строки с двойными кавычками:

pipeline {
/* continuous build pipeline for jenkins */
    agent any
    environment {
        /* initialize vairables for this job */
        path_msbuild = 'C:\\Program Files (x86)\\MSBuild\\14.0\\Bin\\msbuild.exe'
        path_workspace_root = 'C:\\Program Files (x86)\\Jenkins\\workspace\\MyApplication'
        path_solutionfile = "%path_workspace_root%\\MyApplication.sln" /* this variable still doesn't expand */
        databasename = 'elements'
    }
    stages {
        stage ('solution') {
            steps {
                echo 'building solution'
                bat '"%path_msbuild%" "%path_solutionfile%" /p:Configuration=Release'
            }
        }
    }
}

Я также пробовал использовать двойные кавычки и синтаксис отложенного расширения:

pipeline {
/* continuous build pipeline for jenkins */
    agent any
    environment {
        /* initialize vairables for this job */
        path_msbuild = 'C:\\Program Files (x86)\\MSBuild\\14.0\\Bin\\msbuild.exe'
        path_workspace_root = 'C:\\Program Files (x86)\\Jenkins\\workspace\\MyApplication'
        path_solutionfile = "!path_workspace_root!\\MyApplication.sln" /* this variable still doesn't expand */
        databasename = 'elements'
    }
    stages {
        stage ('solution') {
            steps {
                echo 'building solution'
                bat '"%path_msbuild%" "%path_solutionfile%" /p:Configuration=Release'
            }
        }
    }
}
  1. Каков правильный синтаксис для корректного расширения переменной %path_workspace_root%?
  2. Делаю ли я это «сложным путем» (я новичок в Jenkins) и есть ли более простой способ выполнить то, что я делаю? Я предполагаю, что по мере того, как мой конвейер станет больше, у меня будет ряд этих переменных среды, которые необходимо установить.

person DWRoelands    schedule 03.05.2019    source источник


Ответы (1)


Расширение переменной с использованием синтаксиса %% ТОЛЬКО для использования в команде BAT ''. Стандартный синтаксис jenkins ${} - это то, что мне нужно:

pipeline {
/* continuous build pipeline for jenkins */
    agent any
    environment {
        /* initialize vairables for this job */
        path_msbuild = 'C:\\Program Files (x86)\\MSBuild\\14.0\\Bin\\msbuild.exe'
        path_workspace_root = 'C:\\Program Files (x86)\\Jenkins\\workspace\\MyApplication'
        path_solutionfile = '${path_workspace_root}\\MyApplication.sln' /* this variable doesn't expand */
        databasename = 'elements'
    }
    stages {
        stage ('solution') {
            steps {
                echo 'building solution'
                bat '"%path_msbuild%" "%path_solutionfile%" /p:Configuration=Release'
            }
        }
    }
}
person DWRoelands    schedule 03.05.2019