调用GitLab API更新组级file类型变量时value参数报错
问题说明
通过GitLab API自动化更新组级CI/CD变量时,需设置variable_type=file以文件形式传入变量值,但调用接口时被强制要求传入value参数,多次调试均触发{"message":{"value":["is invalid"]}}报错,请求无法正常完成。
调试阶段使用的请求代码如下:
curl --request $method --header "PRIVATE-TOKEN: ${MY_TOKEN}" \ "https://gitlab.com/api/v4/groups/123456/variables" --form "key=TRIGGER_TOKENS" --form file=@./triggertokens.txt --form "masked=true" \ --form "protected=false" --form "variable_type=file" --form "environment_scope=my_env" --form "value= "
解决方案
报错核心原因有两个:
- GitLab的文件类型CI变量不需要单独传
file表单字段,接口只会从value字段读取变量内容,代码中写的file=@./triggertokens.txt属于接口不识别的冗余参数 - 给
value传入的是纯空格字符串,GitLab对文件类型变量的校验规则不允许值为空或纯空白内容,因此直接返回value无效的错误。
正确的调用方式是直接将本地文件内容作为value参数的值传入,不需要额外添加文件上传字段,分两种场景:
创建新的组级文件变量
使用POST请求,通过重定向符读取本地文件内容传给value参数:
curl --request POST --header "PRIVATE-TOKEN: ${MY_TOKEN}" \ "https://gitlab.com/api/v4/groups/123456/variables" \ --form "key=TRIGGER_TOKENS" \ --form "value=<./triggertokens.txt" \ --form "masked=true" \ --form "protected=false" \ --form "variable_type=file" \ --form "environment_scope=my_env"
注意这里用<读取文件内容传入,不是@的文件上传写法。
更新已存在的组级文件变量
使用PUT请求,请求路径末尾需要拼接对应变量的key,其余参数规则和创建一致:
curl --request PUT --header "PRIVATE-TOKEN: ${MY_TOKEN}" \ "https://gitlab.com/api/v4/groups/123456/variables/TRIGGER_TOKENS" \ --form "value=<./triggertokens.txt" \ --form "masked=true" \ --form "protected=false" \ --form "variable_type=file" \ --form "environment_scope=my_env"
内容的提问来源于stack exchange,提问作者Luke
相关产品推荐
相关产品推荐

