first commit
This commit is contained in:
commit
c3d6e06235
8
.idea/.gitignore
vendored
Normal file
8
.idea/.gitignore
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
9
.idea/drone-kuboard.iml
Normal file
9
.idea/drone-kuboard.iml
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="WEB_MODULE" version="4">
|
||||
<component name="Go" enabled="true" />
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
6
.idea/misc.xml
Normal file
6
.idea/misc.xml
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="MarkdownSettingsMigration">
|
||||
<option name="stateVersion" value="1" />
|
||||
</component>
|
||||
</project>
|
8
.idea/modules.xml
Normal file
8
.idea/modules.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/drone-kuboard.iml" filepath="$PROJECT_DIR$/.idea/drone-kuboard.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
16
Dockerfile
Normal file
16
Dockerfile
Normal file
@ -0,0 +1,16 @@
|
||||
FROM golang:alpine as builder
|
||||
WORKDIR /builder
|
||||
COPY . .
|
||||
|
||||
ENV GO111MODULE=on
|
||||
ENV GOPROXY=https://goproxy.cn,direct
|
||||
|
||||
RUN go version
|
||||
RUN go mod download && go build -o drone-kuboard
|
||||
RUN ls -lh && chmod +x ./drone-kuboard
|
||||
|
||||
FROM repo.lxh.io/alpine:3.16.0 as runner
|
||||
LABEL org.opencontainers.image.authors="lxh@cxh.cn"
|
||||
|
||||
COPY --from=builder /builder/drone-kuboard /bin
|
||||
ENTRYPOINT ["/bin/drone-kuboard"]
|
11
go.mod
Normal file
11
go.mod
Normal file
@ -0,0 +1,11 @@
|
||||
module drone-kuboard
|
||||
|
||||
go 1.21
|
||||
|
||||
require github.com/urfave/cli/v2 v2.25.7
|
||||
|
||||
require (
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
|
||||
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
||||
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect
|
||||
)
|
8
go.sum
Normal file
8
go.sum
Normal file
@ -0,0 +1,8 @@
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
|
||||
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||
github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs=
|
||||
github.com/urfave/cli/v2 v2.25.7/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ=
|
||||
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU=
|
||||
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8=
|
98
main.go
Normal file
98
main.go
Normal file
@ -0,0 +1,98 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/urfave/cli/v2"
|
||||
"log"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type payload struct {
|
||||
Kind string `json:"kind"`
|
||||
Name string `json:"name"`
|
||||
Namespace string `json:"namespace"`
|
||||
Images map[string]string `json:"images,omitempty"`
|
||||
}
|
||||
|
||||
type errorResponse struct {
|
||||
Reason string
|
||||
}
|
||||
|
||||
func main() {
|
||||
// 默认是重启
|
||||
action := restart
|
||||
// 判断是啥操作
|
||||
if actionKey := os.Getenv("PLUGIN_ACTION"); actionKey != "" {
|
||||
switch strings.ToLower(actionKey) {
|
||||
case "restart":
|
||||
action = restart
|
||||
case "update":
|
||||
action = update
|
||||
}
|
||||
}
|
||||
|
||||
app := &cli.App{
|
||||
Name: "drone-kuboard",
|
||||
Usage: "Update Kuboard Workloads Image Tag",
|
||||
Authors: []*cli.Author{
|
||||
&cli.Author{
|
||||
Name: "lxh",
|
||||
Email: "lxh@cxh.cn",
|
||||
},
|
||||
},
|
||||
Action: action,
|
||||
Flags: []cli.Flag{
|
||||
&cli.StringFlag{
|
||||
Name: "cluster",
|
||||
Usage: "cluster name",
|
||||
EnvVars: []string{"PLUGIN_CLUSTER"},
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Name: "kind",
|
||||
Usage: "workload type",
|
||||
EnvVars: []string{"PLUGIN_KIND"},
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Name: "name",
|
||||
Usage: "workload name",
|
||||
EnvVars: []string{"PLUGIN_NAME"},
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Name: "namespace",
|
||||
Usage: "workload namespace",
|
||||
EnvVars: []string{"PLUGIN_NAMESPACE"},
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Name: "image",
|
||||
Usage: "image uri",
|
||||
EnvVars: []string{"PLUGIN_IMAGE"},
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Name: "tag",
|
||||
Usage: "image tag",
|
||||
EnvVars: []string{"PLUGIN_TAG"},
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Name: "kuboard_uri",
|
||||
Usage: "kuboard uri",
|
||||
EnvVars: []string{"PLUGIN_KUBOARD_URI"},
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Name: "kuboard_username",
|
||||
Usage: "kuboard username",
|
||||
EnvVars: []string{"PLUGIN_KUBOARD_USERNAME"},
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Name: "kuboard_key",
|
||||
Usage: "kuboard access key",
|
||||
EnvVars: []string{"PLUGIN_KUBOARD_KEY"},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
if err := app.Run(os.Args); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
log.Println("The image version was successfully updated.")
|
||||
}
|
4
readme.md
Normal file
4
readme.md
Normal file
@ -0,0 +1,4 @@
|
||||
### 手动打包镜像
|
||||
```shell
|
||||
docker build --push -t repo.lxh.io/lxh/drone-kuboard:latest .
|
||||
```
|
66
restart.go
Normal file
66
restart.go
Normal file
@ -0,0 +1,66 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"github.com/urfave/cli/v2"
|
||||
"io"
|
||||
"net/http"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func restart(ctx *cli.Context) error {
|
||||
cluster := ctx.Value("cluster").(string)
|
||||
uri := strings.Trim(ctx.Value("kuboard_uri").(string), "/")
|
||||
uri = uri + "/kuboard-api/cluster/" + cluster + "/kind/CICDApi/admin/resource/restartWorkload"
|
||||
|
||||
data, err := json.Marshal(payload{
|
||||
Name: ctx.Value("name").(string),
|
||||
Namespace: ctx.Value("namespace").(string),
|
||||
Kind: ctx.Value("kind").(string),
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
request, err := http.NewRequest("PUT", uri, bytes.NewBuffer(data))
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
request.Header.Add("Content-Type", "application/json")
|
||||
request.AddCookie(&http.Cookie{
|
||||
Name: "KuboardUsername",
|
||||
Value: ctx.Value("kuboard_username").(string),
|
||||
})
|
||||
request.AddCookie(&http.Cookie{
|
||||
Name: "KuboardAccessKey",
|
||||
Value: ctx.Value("kuboard_key").(string),
|
||||
})
|
||||
|
||||
client := &http.Client{}
|
||||
response, err := client.Do(request)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
defer response.Body.Close()
|
||||
|
||||
if response.StatusCode != 200 {
|
||||
body, _ := io.ReadAll(response.Body)
|
||||
errResp := &errorResponse{}
|
||||
err := json.Unmarshal(body, errResp)
|
||||
|
||||
if err != nil {
|
||||
return errors.New(response.Status)
|
||||
} else {
|
||||
return errors.New(errResp.Reason)
|
||||
}
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
71
update.go
Normal file
71
update.go
Normal file
@ -0,0 +1,71 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"github.com/urfave/cli/v2"
|
||||
"io"
|
||||
"net/http"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func update(ctx *cli.Context) error {
|
||||
cluster := ctx.Value("cluster").(string)
|
||||
uri := strings.Trim(ctx.Value("kuboard_uri").(string), "/")
|
||||
uri = uri + "/kuboard-api/cluster/" + cluster + "/kind/CICDApi/admin/resource/updateImageTag"
|
||||
image := strings.Trim(ctx.Value("image").(string), "/")
|
||||
tag := ctx.Value("tag").(string)
|
||||
|
||||
data, err := json.Marshal(payload{
|
||||
Name: ctx.Value("name").(string),
|
||||
Namespace: ctx.Value("namespace").(string),
|
||||
Kind: ctx.Value("kind").(string),
|
||||
Images: map[string]string{
|
||||
image: image + ":" + tag,
|
||||
},
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
request, err := http.NewRequest("PUT", uri, bytes.NewBuffer(data))
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
request.Header.Add("Content-Type", "application/json")
|
||||
request.AddCookie(&http.Cookie{
|
||||
Name: "KuboardUsername",
|
||||
Value: ctx.Value("kuboard_username").(string),
|
||||
})
|
||||
request.AddCookie(&http.Cookie{
|
||||
Name: "KuboardAccessKey",
|
||||
Value: ctx.Value("kuboard_key").(string),
|
||||
})
|
||||
|
||||
client := &http.Client{}
|
||||
response, err := client.Do(request)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
defer response.Body.Close()
|
||||
|
||||
if response.StatusCode != 200 {
|
||||
body, _ := io.ReadAll(response.Body)
|
||||
errResp := &errorResponse{}
|
||||
err := json.Unmarshal(body, errResp)
|
||||
|
||||
if err != nil {
|
||||
return errors.New(response.Status)
|
||||
} else {
|
||||
return errors.New(errResp.Reason)
|
||||
}
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
Loading…
Reference in New Issue
Block a user