如何将环境变量传递给sh脚本?

时间:2019-09-24 09:13:35

标签: ansible jenkins-pipeline sh

我想在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上,我都需要在各个阶段都设置相同的路径。知道如何实现它吗?

0 个答案:

没有答案