This commit is contained in:
lychang
2025-06-23 00:12:29 +08:00
parent 3ba2335865
commit 92e267ece6
3 changed files with 60 additions and 56 deletions

View File

@@ -1,37 +0,0 @@
stages:
- generate_image
- deploy
variables:
BUILD_NAME: "go/ddns"
SERVICE_NAME: "ddns"
IMAGE_TAG: "latest"
generate_image_dev:
stage: generate_image
image: docker:20.10.2
script:
- docker build -t $BUILD_NAME:$IMAGE_TAG .
tags:
- '001'
only:
- dev
except:
- triggers
deploy_dev:
stage: deploy
image: docker:20.10.2
script:
- CONTAINER_NAME=$(docker ps -aq --filter name=$SERVICE_NAME)
- echo $CONTAINER_NAME
- if [[ -n "$CONTAINER_NAME" ]]; then
docker rm -f $CONTAINER_NAME;
fi
- docker run -d --name $SERVICE_NAME $BUILD_NAME:$IMAGE_TAG
tags:
- '001'
only:
- dev
except:
- triggers

21
action.yml Normal file
View File

@@ -0,0 +1,21 @@
name: Dns
run-name: dynamic dns
on:
push:
branches:
- 'master'
env:
jobs:
build:
runs-on: docker:20.18
env:
BUILD_NAME: "go/ddns"
SERVICE_NAME: "ddns"
IMAGE_TAG: "latest"
steps:
- run: CONTAINER_NAME=$(docker ps -aq --filter name=$SERVICE_NAME)
- run: echo $CONTAINER_NAME
- run: if [[ -n "$CONTAINER_NAME" ]]; then
docker rm -f $CONTAINER_NAME;
fi
- run: docker run -d --name $SERVICE_NAME $BUILD_NAME:$IMAGE_TAG

58
main.go
View File

@@ -2,7 +2,7 @@
package main
import (
"bytes"
"encoding/json"
"fmt"
_ "github.com/PuerkitoBio/goquery"
dns "github.com/alibabacloud-go/alidns-20150109/v2/client"
@@ -21,30 +21,50 @@ import (
* @throws Exception
*/
func QueryPublicIP() string {
type QueryResult struct {
Code int `json:"code"`
Msg interface{} `json:"msg"`
Data struct {
IP string `json:"ip"`
IPv6 string `json:"ipv6"`
} `json:"data"`
}
client := &http.Client{Timeout: 5 * time.Second}
resp, err := client.Get("http://ifconfig.me/ip")
resp, err := client.Get("https://openapi.lddgo.net/base/gtool/api/v1/GetIp")
if err != nil {
panic(err)
fmt.Printf("HTTP request failed: %v\n", err)
return ""
}
defer func(Body io.ReadCloser) {
err := Body.Close()
if err != nil {
defer func() {
if err := resp.Body.Close(); err != nil {
fmt.Printf("Failed to close response body: %v\n", err)
}
}()
}
}(resp.Body)
var buffer [512]byte
result := bytes.NewBuffer(nil)
for {
n, err := resp.Body.Read(buffer[0:])
result.Write(buffer[0:n])
if err != nil && err == io.EOF {
break
} else if err != nil {
fmt.Println(err)
}
if resp.StatusCode != http.StatusOK {
fmt.Printf("Unexpected status code: %d\n", resp.StatusCode)
return ""
}
return result.String()
body, err := io.ReadAll(resp.Body)
if err != nil {
fmt.Printf("Failed to read response body: %v\n", err)
return ""
}
var query QueryResult
if err := json.Unmarshal(body, &query); err != nil {
fmt.Printf("JSON unmarshal failed: %v\n", err)
return ""
}
if query.Code != 0 { // 假设 0 表示成功状态码
fmt.Printf("API returned error: %v\n", query.Msg)
return ""
}
return query.Data.IP
}
func QueryRecordId(client *dns.Client, domainName *string) map[string]interface{} {