Как передать переменную окружения в скрипт sh? - PullRequest
0 голосов
/ 24 сентября 2019

Я хочу создать переменную окружения в Jenkinsfile, которая будет состоять из текущего рабочего пространства (используя переменную окружения WORKSPACE).Затем я хочу передать эту новую переменную в скрипт sh на следующем этапе.

Я пытался объявить переменную следующим образом:

environment {
        artefact_path = "${env.WORKSPACE}/temp/unzipped/${artefact_name}/dev"
    }

Но после передачи ее сценарию sh:

sh "ansible-playbook -i inventory playbook.yml -e \"artefact_path=${env.artefact_path}\""

я получаю следующий вывод:

+ ansible-playbook -i inventory playbook.yml -e 'artefact_path=C:\nowy_dir\workspace\something/temp/unzipped/something/dev'
PLAY [play] **************************************************************

TASK [task] *********************************************************
fatal: [host]: FAILED! => {"changed": false, "dest": "D:/inetpub/something", "msg": "Get-AnsibleParam: Parameter 'src' has an invalid path 'C:\nowy_dir\\workspace\\something/temp/unzipped/something/dev' specified.", "src": "C:\nowy_dir\\workspace\\something/temp/unzipped/something/dev"}
    to retry, use: --limit @/etc/ansible/ansible-scripts/playbook.retry

Как видите, переменная передается с двумя \ вместо одного.Как я могу предотвратить это?

РЕДАКТИРОВАТЬ 1

Я решил изменить способ объявления переменной на:

def get_deploy_path() {
    def site = get_site()
    def wspace = "${env.WORKSPACE}"
    def deploy_path = wspace.toString() + "\\temp\\snapshot\\" + site + "\\"
    return deploy_path
}
environment {
        deploy_path = get_deploy_path()
}

Теперь у меня проблема с рабочим пространством.Я работаю на двух агентах (первый на Windows, а второй на основе Linux).Мне нужно, чтобы путь был одинаковым как поэтапно в Windows, так и в Linux.Любая идея, как я могу это сделать?

...