提交 25860b00 编写于 作者: 徐晓伟's avatar 徐晓伟

项目级别 CI/CD 变量 API:创建变量

上级 0260f9bb
......@@ -503,16 +503,25 @@ COPYRIGHT:
COMMANDS:
list 列出项目变量
create 创建变量
help, h Shows a list of commands or help for one command
OPTIONS:
--base-url value 实例地址,例如:https://gitlab.xuxiaowei.com.cn/api/v4 (default: "https://gitlab.com/api/v4") [%CI_API_V4_URL%]
--token value your_access_token
--page value 页码(默认:1),中文文档 https://docs.gitlab.cn/jh/api/rest/index.html#pagination (default: 1)
--per-page value 每页列出的项目数(默认:20;最大:100),中文文档 https://docs.gitlab.cn/jh/api/rest/index.html#pagination (default: 20)
--print-json 打印 JSON (default: false)
--print-time 打印时间 (default: false)
--help, -h show help
--base-url value 实例地址,例如:https://gitlab.xuxiaowei.com.cn/api/v4 (default: "https://gitlab.com/api/v4") [%CI_API_V4_URL%]
--token value your_access_token
--id value 项目 ID 或 URL 编码的路径
--key value 变量的 key。不能超过 255 个字符。仅支持 A-Z、a-z、0-9 和 _
--value value 变量的 value
--variableType value 变量类型。可用类型为:env_var 和 file (default: "env_var")
--protected 变量是否受保护。 (default: false)
--masked 变量是否隐藏。 (default: false)
--raw 变量是否被视为原始字符串。当为 true 时,值中的变量不会扩展 (default: false)
--environmentScope value 变量的 environment_scope。 (default: "*")
--page value 页码(默认:1),中文文档 https://docs.gitlab.cn/jh/api/rest/index.html#pagination (default: 1)
--per-page value 每页列出的项目数(默认:20;最大:100),中文文档 https://docs.gitlab.cn/jh/api/rest/index.html#pagination (default: 20)
--print-json 打印 JSON (default: false)
--print-time 打印时间 (default: false)
--help, -h show help
```
- [project - 项目 API](https://docs.gitlab.cn/jh/api/projects.html)
......
package constant
const (
Token = "token"
BaseUrl = "base-url"
BaseUrlDefault = "https://gitlab.com/api/v4"
Id = "id"
JobIdRange = "job-id-range"
IIdRange = "iid-range"
Repository = "repository"
TagName = "tag-name"
JobId = "job-id"
ArtifactsName = "artifacts-name"
Sort = "sort"
SortDefault = "desc"
Page = "page"
PerPage = "per-page"
PrintJson = "print-json"
PrintJsonDefault = false
PrintTime = "print-time"
PrintTimeDefault = false
Scope = "scope"
IssueId = "issue-id"
IssueIdRange = "issue-id-range"
Recursion = "recursion"
Owned = "owned"
NamespaceSource = "namespace-source"
NamespaceTarget = "namespace-target"
ExportFolder = "export-folder"
SkipProjectPath = "skip-project-path"
SkipProjectWikiPath = "skip-project-wiki-path"
AutoSkipExistFolder = "auto-skip-exist-folder"
AllowFailure = "allow-failure"
EnvName = "name"
EnvExternalUrl = "external_url"
EnvTier = "tier"
Token = "token"
BaseUrl = "base-url"
BaseUrlDefault = "https://gitlab.com/api/v4"
Id = "id"
JobIdRange = "job-id-range"
IIdRange = "iid-range"
Repository = "repository"
TagName = "tag-name"
JobId = "job-id"
ArtifactsName = "artifacts-name"
Sort = "sort"
SortDefault = "desc"
Page = "page"
PerPage = "per-page"
PrintJson = "print-json"
PrintJsonDefault = false
PrintTime = "print-time"
PrintTimeDefault = false
Scope = "scope"
IssueId = "issue-id"
IssueIdRange = "issue-id-range"
Recursion = "recursion"
Owned = "owned"
NamespaceSource = "namespace-source"
NamespaceTarget = "namespace-target"
ExportFolder = "export-folder"
SkipProjectPath = "skip-project-path"
SkipProjectWikiPath = "skip-project-wiki-path"
AutoSkipExistFolder = "auto-skip-exist-folder"
AllowFailure = "allow-failure"
EnvName = "name"
EnvExternalUrl = "external_url"
EnvTier = "tier"
VariableKey = "key"
VariableValue = "value"
VariableType = "variableType"
VariableProtected = "protected"
VariableMasked = "masked"
VariableRaw = "raw"
VariableEnvironmentScope = "environmentScope"
)
......@@ -271,3 +271,59 @@ func EnvTier() cli.Flag {
Usage: "新环境的层级。允许设置的值为 production, staging, testing, development 和 other",
}
}
func VariableKey(required bool) cli.Flag {
return &cli.StringFlag{
Name: constant.VariableKey,
Usage: "变量的 key。不能超过 255 个字符。仅支持 A-Z、a-z、0-9 和 _",
Required: required,
}
}
func VariableValue(required bool) cli.Flag {
return &cli.StringFlag{
Name: constant.VariableValue,
Usage: "变量的 value",
Required: required,
}
}
func VariableType() cli.Flag {
return &cli.StringFlag{
Name: constant.VariableType,
Usage: "变量类型。可用类型为:env_var 和 file",
Value: "env_var",
}
}
func VariableProtected() cli.Flag {
return &cli.BoolFlag{
Name: constant.VariableProtected,
Usage: "变量是否受保护。",
Value: false,
}
}
func VariableMasked() cli.Flag {
return &cli.BoolFlag{
Name: constant.VariableMasked,
Usage: "变量是否隐藏。",
Value: false,
}
}
func VariableRaw() cli.Flag {
return &cli.BoolFlag{
Name: constant.VariableRaw,
Usage: "变量是否被视为原始字符串。当为 true 时,值中的变量不会扩展",
Value: false,
}
}
func VariableEnvironmentScope() cli.Flag {
return &cli.StringFlag{
Name: constant.VariableEnvironmentScope,
Usage: "变量的 environment_scope。",
Value: "*",
}
}
package project_level_variables
import (
"encoding/json"
"fmt"
"github.com/urfave/cli/v2"
"github.com/xanzy/go-gitlab"
"github.com/xuxiaowei-com-cn/gitlab-go/constant"
"github.com/xuxiaowei-com-cn/gitlab-go/flag"
"log"
)
// Create 创建变量 https://docs.gitlab.cn/jh/api/project_level_variables.html#%E5%88%9B%E5%BB%BA%E5%8F%98%E9%87%8F
func Create() *cli.Command {
return &cli.Command{
Name: "create",
Usage: "创建变量",
Flags: append(flag.CommonTokenRequired(), flag.Id(true),
flag.VariableKey(true), flag.VariableValue(true), flag.VariableType(), flag.VariableProtected(),
flag.VariableMasked(), flag.VariableRaw(), flag.VariableEnvironmentScope(),
flag.PrintJson(), flag.PrintTime()),
Action: func(context *cli.Context) error {
var baseUrl = context.String(constant.BaseUrl)
var token = context.String(constant.Token)
var id = context.String(constant.Id)
var key = context.String(constant.VariableKey)
var value = context.String(constant.VariableValue)
var variableType = context.String(constant.VariableType)
var protected = context.Bool(constant.VariableProtected)
var masked = context.Bool(constant.VariableMasked)
var raw = context.Bool(constant.VariableRaw)
var environmentScope = context.String(constant.VariableEnvironmentScope)
var printJson = context.Bool(constant.PrintJson)
var printTime = context.Bool(constant.PrintTime)
gitClient, err := gitlab.NewClient(token, gitlab.WithBaseURL(baseUrl))
if err != nil {
return err
}
opt := &gitlab.CreateProjectVariableOptions{
Key: &key,
Value: &value,
Protected: &protected,
Masked: &masked,
Raw: &raw,
EnvironmentScope: &environmentScope,
}
if variableType == "env_var" {
opt.VariableType = gitlab.Ptr(gitlab.EnvVariableType)
} else if variableType == "file" {
opt.VariableType = gitlab.Ptr(gitlab.FileVariableType)
}
projectVariable, response, err := gitClient.ProjectVariables.CreateVariable(id, opt)
if err != nil {
return err
}
log.Printf("Response StatusCode: %d\n", response.Response.StatusCode)
fmt.Println("")
if printJson {
if printTime {
jsonData, err := json.Marshal(projectVariable)
if err != nil {
panic(err)
}
log.Printf("\n%s\n", string(jsonData))
fmt.Println("")
} else {
jsonData, err := json.Marshal(projectVariable)
if err != nil {
panic(err)
}
fmt.Printf("%s\n", string(jsonData))
fmt.Println("")
}
} else {
if printTime {
log.Printf("Key: %s\n", projectVariable.Key)
log.Printf("Value: %s\n", projectVariable.Value)
log.Printf("VariableType: %s\n", projectVariable.VariableType)
log.Printf("Protected: %t\n", projectVariable.Protected)
log.Printf("Masked: %t\n", projectVariable.Masked)
log.Printf("Raw: %t\n", projectVariable.Raw)
log.Printf("EnvironmentScope: %s\n", projectVariable.EnvironmentScope)
fmt.Println("")
} else {
fmt.Printf("Key: %s\n", projectVariable.Key)
fmt.Printf("Value: %s\n", projectVariable.Value)
fmt.Printf("VariableType: %s\n", projectVariable.VariableType)
fmt.Printf("Protected: %t\n", projectVariable.Protected)
fmt.Printf("Masked: %t\n", projectVariable.Masked)
fmt.Printf("Raw: %t\n", projectVariable.Raw)
fmt.Printf("EnvironmentScope: %s\n", projectVariable.EnvironmentScope)
fmt.Println("")
}
}
return nil
},
}
}
......@@ -11,9 +11,13 @@ func ProjectLevelVariables() *cli.Command {
Name: "project-level-variables",
Aliases: []string{"project-level-variable", "plv"},
Usage: "项目级别 CI/CD 变量 API,中文文档:https://docs.gitlab.cn/jh/api/project_level_variables.html",
Flags: append(flag.Common(), flag.Page(), flag.PerPage(), flag.PrintJson(), flag.PrintTime()),
Flags: append(flag.Common(), flag.Id(false),
flag.VariableKey(false), flag.VariableValue(false), flag.VariableType(), flag.VariableProtected(),
flag.VariableMasked(), flag.VariableRaw(), flag.VariableEnvironmentScope(),
flag.Page(), flag.PerPage(), flag.PrintJson(), flag.PrintTime()),
Subcommands: []*cli.Command{
List(),
Create(),
},
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册