Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
徐晓伟工作室
gitlab-go
提交
25860b00
G
gitlab-go
项目概览
徐晓伟工作室
/
gitlab-go
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
gitlab-go
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
25860b00
编写于
1月 16, 2024
作者:
徐晓伟
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
✨
项目级别 CI/CD 变量 API:创建变量
上级
0260f9bb
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
231 addition
and
41 deletion
+231
-41
README.md
README.md
+16
-7
constant/common.go
constant/common.go
+40
-33
flag/flag.go
flag/flag.go
+56
-0
project_level_variables/create.go
project_level_variables/create.go
+114
-0
project_level_variables/project_level_variables.go
project_level_variables/project_level_variables.go
+5
-1
未找到文件。
README.md
浏览文件 @
25860b00
...
...
@@ -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
)
...
...
constant/common.go
浏览文件 @
25860b00
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"
)
flag/flag.go
浏览文件 @
25860b00
...
...
@@ -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
:
"*"
,
}
}
project_level_variables/create.go
0 → 100644
浏览文件 @
25860b00
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
},
}
}
project_level_variables/project_level_variables.go
浏览文件 @
25860b00
...
...
@@ -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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录