Azure devops Azure管道参数作为秘密变量

Azure devops Azure管道参数作为秘密变量,azure-devops,azure-pipelines,gitlab-api,Azure Devops,Azure Pipelines,Gitlab Api,我想将PAT作为管道参数传递给调用gitlab REST API的脚本(gitlab.sh): gitlab.sh #!/bin/bash set -e MY_PAT="${MY_PAT}" #I want this to be secret and not printed in logs function rest_api { curl -sSL -H "Content-Type: application/json" -H "PRIVAT

我想将PAT作为管道参数传递给调用gitlab REST API的脚本(gitlab.sh):

gitlab.sh

#!/bin/bash
set -e

MY_PAT="${MY_PAT}" #I want this to be secret and not printed in logs

function rest_api {
 curl -sSL -H "Content-Type: application/json" -H "PRIVATE-TOKEN:$MY_PAT" -X POST
   --data '{"name": "my-group","path": "my-group"}'
   https://gitlab.example.com/api/v4/groups 
}

rest_api
azure pipelines.yml

    pool:
      vmImage: 'ubuntu-latest'
    parameters:
     - name: myPAT
      displayName: 'My PAT'
      type: string  
    
    steps:
    - checkout: self
    - script: |  
        echo "Creating group in Gitlab"
        export MY_PAT=${{parameters.myPAT}} #how can I pass this secretly to gitlab.sh
        bash -x gitlab.sh
      condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/heads/feature'))
      displayName: 'Creating group in Gitlab'  

如果你想设置一个秘密,你应该使用下面的日志命令

-bash:|
echo“##vso[task.setvariable=MY#PAT;issecret=true]${{parameters.myPAT}”
姓名:SetSecret
在下一个任务中,您应该有可用的
MY_PAT
secret变量。但是,由于您将它作为运行时参数传递,因此它可以打印在日志中

比如说

参数:
-姓名:myPAT
显示名称:“我的拍子”
类型:字符串
触发器:无
公关:没有
游泳池:
vmImage:“ubuntu最新版本”
步骤:
-狂欢节:|
echo“您可以使用宏替换来获取机密,它们将在日志中被屏蔽:${{parameters.myPAT}”
-狂欢节:|
echo“##vso[task.setvariable=MY#PAT;issecret=true]${{parameters.myPAT}”
姓名:SetSecret
-狂欢节:|
echo“您可以使用宏替换来获取机密,它们将在日志中隐藏:$(MY_PAT)”
我得到的第一张照片是:

您可以使用宏替换来获取机密,它们将在日志:MySecret中被屏蔽

关于第二点:

您可以使用宏替换来获取机密,这些机密将在日志中屏蔽:***

所以通过参数传递秘密可能会暴露它。请注意这一点

我创建了一个特性请求,以支持运行时参数作为机密。如果你认为这是有价值的特点,可以自由投票。
池:
vmImage:“ubuntu最新版本”
参数:
-姓名:myPAT
显示名称:“我的拍子”
类型:字符串
步骤:
-结帐:self
-狂欢节:|
echo“##vso[task.setvariable=MY#PAT;issecret=true]${{parameters.myPAT}”
姓名:SetSecret
-文字:|
echo“在Gitlab中创建组”
bash-xgitlab.sh
条件:和(successed(),startsWith(变量['Build.SourceBranch'],'refs/heads/feature'))
displayName:“正在Gitlab中创建组”
环境:
MY_MAPPED_ENV_VAR:$(MY_PAT)#映射到环境变量的推荐方法

然后,您可以在sh文件中使用
MY_MAPPED_ENV_VAR
,作为

谢谢,但是可以在脚本文件gitlab.sh中访问setSecret;我已经尝试过将var设置为secret,但是(我的专利)不可访问您不需要在sh文件中访问setSecret。在您的情况下,您需要添加环境映射以将此值映射为环境变量。请检查我的编辑。我已经尝试在环境变量中进行设置,这不符合我的目的。我可以请你们重新讨论这个问题吗?我想PAT从脚本文件调用RESTAPI,但我不明白。所有这些都应该做这项工作。它设置可以从文件访问的env变量。之前通过导出设置变量。然而,您是否尝试过我向您展示的方法?据我所知,
导出
不是推荐的方法。我过去也这样做过,一切都很好。