gitlab-go/.gitlab-ci.yml

207 lines
12 KiB
YAML
Raw Permalink Normal View History

2023-10-01 21:43:52 +08:00
stages:
2023-10-01 22:37:43 +08:00
- build
2023-10-05 21:22:28 +08:00
- build:docker
2023-10-01 21:43:52 +08:00
- sync
2023-10-01 22:37:43 +08:00
build:golang:1.21:
stage: build
image: golang:1.21
2023-11-21 16:58:11 +08:00
variables:
CGO_ENABLED: 0
2023-10-01 22:37:43 +08:00
script:
- echo $CI_PIPELINE_ID
- echo $CI_JOB_ID
2023-10-01 22:37:43 +08:00
- go version
- go env -w GOPROXY=https://goproxy.cn,direct
2023-12-02 15:17:08 +08:00
#- go env -w GOPROXY=https://mirrors.aliyun.com/goproxy,direct
2023-10-02 01:55:40 +08:00
- go mod download
2023-10-09 01:14:10 +08:00
- go test ./... -v
- go run main.go
- go build -o buildinfo/buildinfo buildinfo/buildinfo.go
- GOOS=windows GOARCH=amd64 go build -ldflags "-s -w -buildid= -X main.BuildDate=$(buildinfo/buildinfo now) -X main.Compiler= -X main.GitCommitBranch=$CI_COMMIT_BRANCH -X main.GitCommitSha=$(buildinfo/buildinfo commitSha) -X main.GitCommitShortSha=$(buildinfo/buildinfo commitShortSha) -X main.GitCommitTag=$(buildinfo/buildinfo commitTag) -X main.GitCommitTimestamp=$(buildinfo/buildinfo commitTimestamp) -X main.GitTreeState=$(buildinfo/buildinfo git-tree-state) -X main.GitVersion=$(buildinfo/buildinfo commitTag) -X main.GoVersion=$(buildinfo/buildinfo goShortVersion) -X main.Major= -X main.Minor= -X main.Revision= -X main.Platform=windows/amd64 -X main.InstanceUrl=$CI_SERVER_URL -X main.CiPipelineId=$CI_PIPELINE_ID -X main.CiJobId=$CI_JOB_ID" -trimpath -o gitlab-go-windows-amd64.exe .
- GOOS=windows GOARCH=arm64 go build -ldflags "-s -w -buildid= -X main.BuildDate=$(buildinfo/buildinfo now) -X main.Compiler= -X main.GitCommitBranch=$CI_COMMIT_BRANCH -X main.GitCommitSha=$(buildinfo/buildinfo commitSha) -X main.GitCommitShortSha=$(buildinfo/buildinfo commitShortSha) -X main.GitCommitTag=$(buildinfo/buildinfo commitTag) -X main.GitCommitTimestamp=$(buildinfo/buildinfo commitTimestamp) -X main.GitTreeState=$(buildinfo/buildinfo git-tree-state) -X main.GitVersion=$(buildinfo/buildinfo commitTag) -X main.GoVersion=$(buildinfo/buildinfo goShortVersion) -X main.Major= -X main.Minor= -X main.Revision= -X main.Platform=windows/arm64 -X main.InstanceUrl=$CI_SERVER_URL -X main.CiPipelineId=$CI_PIPELINE_ID -X main.CiJobId=$CI_JOB_ID" -trimpath -o gitlab-go-windows-arm64.exe .
- GOOS=linux GOARCH=amd64 go build -ldflags "-s -w -buildid= -X main.BuildDate=$(buildinfo/buildinfo now) -X main.Compiler= -X main.GitCommitBranch=$CI_COMMIT_BRANCH -X main.GitCommitSha=$(buildinfo/buildinfo commitSha) -X main.GitCommitShortSha=$(buildinfo/buildinfo commitShortSha) -X main.GitCommitTag=$(buildinfo/buildinfo commitTag) -X main.GitCommitTimestamp=$(buildinfo/buildinfo commitTimestamp) -X main.GitTreeState=$(buildinfo/buildinfo git-tree-state) -X main.GitVersion=$(buildinfo/buildinfo commitTag) -X main.GoVersion=$(buildinfo/buildinfo goShortVersion) -X main.Major= -X main.Minor= -X main.Revision= -X main.Platform=linux/amd64 -X main.InstanceUrl=$CI_SERVER_URL -X main.CiPipelineId=$CI_PIPELINE_ID -X main.CiJobId=$CI_JOB_ID" -trimpath -o gitlab-go-linux-amd64 .
- GOOS=linux GOARCH=arm64 go build -ldflags "-s -w -buildid= -X main.BuildDate=$(buildinfo/buildinfo now) -X main.Compiler= -X main.GitCommitBranch=$CI_COMMIT_BRANCH -X main.GitCommitSha=$(buildinfo/buildinfo commitSha) -X main.GitCommitShortSha=$(buildinfo/buildinfo commitShortSha) -X main.GitCommitTag=$(buildinfo/buildinfo commitTag) -X main.GitCommitTimestamp=$(buildinfo/buildinfo commitTimestamp) -X main.GitTreeState=$(buildinfo/buildinfo git-tree-state) -X main.GitVersion=$(buildinfo/buildinfo commitTag) -X main.GoVersion=$(buildinfo/buildinfo goShortVersion) -X main.Major= -X main.Minor= -X main.Revision= -X main.Platform=linux/arm64 -X main.InstanceUrl=$CI_SERVER_URL -X main.CiPipelineId=$CI_PIPELINE_ID -X main.CiJobId=$CI_JOB_ID" -trimpath -o gitlab-go-linux-arm64 .
- GOOS=linux GOARCH=loong64 go build -ldflags "-s -w -buildid= -X main.BuildDate=$(buildinfo/buildinfo now) -X main.Compiler= -X main.GitCommitBranch=$CI_COMMIT_BRANCH -X main.GitCommitSha=$(buildinfo/buildinfo commitSha) -X main.GitCommitShortSha=$(buildinfo/buildinfo commitShortSha) -X main.GitCommitTag=$(buildinfo/buildinfo commitTag) -X main.GitCommitTimestamp=$(buildinfo/buildinfo commitTimestamp) -X main.GitTreeState=$(buildinfo/buildinfo git-tree-state) -X main.GitVersion=$(buildinfo/buildinfo commitTag) -X main.GoVersion=$(buildinfo/buildinfo goShortVersion) -X main.Major= -X main.Minor= -X main.Revision= -X main.Platform=linux/arm64 -X main.InstanceUrl=$CI_SERVER_URL -X main.CiPipelineId=$CI_PIPELINE_ID -X main.CiJobId=$CI_JOB_ID" -trimpath -o gitlab-go-loong64 .
- GOOS=darwin GOARCH=amd64 go build -ldflags "-s -w -buildid= -X main.BuildDate=$(buildinfo/buildinfo now) -X main.Compiler= -X main.GitCommitBranch=$CI_COMMIT_BRANCH -X main.GitCommitSha=$(buildinfo/buildinfo commitSha) -X main.GitCommitShortSha=$(buildinfo/buildinfo commitShortSha) -X main.GitCommitTag=$(buildinfo/buildinfo commitTag) -X main.GitCommitTimestamp=$(buildinfo/buildinfo commitTimestamp) -X main.GitTreeState=$(buildinfo/buildinfo git-tree-state) -X main.GitVersion=$(buildinfo/buildinfo commitTag) -X main.GoVersion=$(buildinfo/buildinfo goShortVersion) -X main.Major= -X main.Minor= -X main.Revision= -X main.Platform=darwin/amd64 -X main.InstanceUrl=$CI_SERVER_URL -X main.CiPipelineId=$CI_PIPELINE_ID -X main.CiJobId=$CI_JOB_ID" -trimpath -o gitlab-go-darwin-amd64 .
- GOOS=darwin GOARCH=arm64 go build -ldflags "-s -w -buildid= -X main.BuildDate=$(buildinfo/buildinfo now) -X main.Compiler= -X main.GitCommitBranch=$CI_COMMIT_BRANCH -X main.GitCommitSha=$(buildinfo/buildinfo commitSha) -X main.GitCommitShortSha=$(buildinfo/buildinfo commitShortSha) -X main.GitCommitTag=$(buildinfo/buildinfo commitTag) -X main.GitCommitTimestamp=$(buildinfo/buildinfo commitTimestamp) -X main.GitTreeState=$(buildinfo/buildinfo git-tree-state) -X main.GitVersion=$(buildinfo/buildinfo commitTag) -X main.GoVersion=$(buildinfo/buildinfo goShortVersion) -X main.Major= -X main.Minor= -X main.Revision= -X main.Platform=darwin/arm64 -X main.InstanceUrl=$CI_SERVER_URL -X main.CiPipelineId=$CI_PIPELINE_ID -X main.CiJobId=$CI_JOB_ID" -trimpath -o gitlab-go-darwin-arm64 .
2023-10-01 22:37:43 +08:00
- ./gitlab-go-linux-amd64 --version
- ./gitlab-go-linux-amd64
artifacts:
name: "${CI_JOB_NAME}"
2023-11-21 21:03:45 +08:00
expire_in: 3 day
2023-10-01 22:37:43 +08:00
paths:
- gitlab-go-*
2023-10-01 22:37:43 +08:00
2023-10-05 21:22:28 +08:00
build:docker:
stage: build:docker
needs:
- job: build:golang:1.21
artifacts: true
image: docker:24.0.6
variables:
DOCKER_TLS_CERTDIR: ""
DOCKER_HOST: tcp://docker:2375
services:
- name: docker:24.0.6-dind
alias: docker
before_script:
- set +e
- start_time=$(date +%s)
- elapsed=0
- interval=5
- timeout=60
- |
while true; do
docker info >/dev/null 2>&1
result=$?
echo "result=$result"
current_time=$(date +%s)
elapsed_time=$((current_time - start_time))
if [[ $result -eq 0 ]]; then
echo "docker 完成启动"
break
fi
if [[ $elapsed_time -gt $timeout ]]; then
echo "docker 启动超时"
exit 1
fi
echo "docker 正在启动($elapsed) ..."
elapsed=$((elapsed+interval))
sleep $interval
done
- set -e
- docker info
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD
script:
- cp gitlab-go-linux-amd64 docker/debian/
2023-10-05 21:22:28 +08:00
- cd $CI_PROJECT_DIR/docker/debian
- docker pull registry.cn-qingdao.aliyuncs.com/xuxiaowei/public:debian_12.1
- docker tag registry.cn-qingdao.aliyuncs.com/xuxiaowei/public:debian_12.1 docker.io/library/debian:12.1
2023-10-05 21:22:28 +08:00
- if [ "$CI_COMMIT_TAG" ]; then
tag="$CI_COMMIT_TAG";
2023-10-05 21:22:28 +08:00
tag_hub="$CI_COMMIT_TAG-debian";
else
tag="dev-$CI_PIPELINE_ID";
2023-10-05 21:22:28 +08:00
tag_hub="dev-debian";
fi
- echo "tag=$tag"
- echo "tag_hub=$tag_hub"
- docker build -t $CI_REGISTRY_IMAGE/gitlab-go-debian:$tag . --no-cache --progress plain
- docker tag $CI_REGISTRY_IMAGE/gitlab-go-debian:$tag $DOCKER_USERNAME/gitlab-go:$tag_hub
- docker images
- docker push $CI_REGISTRY_IMAGE/gitlab-go-debian:$tag
- docker push $DOCKER_USERNAME/gitlab-go:$tag_hub
- docker save -o gitlab-go-dev-debian-$CI_PIPELINE_ID.tar $CI_REGISTRY_IMAGE/gitlab-go-debian:$tag
artifacts:
name: "${CI_JOB_NAME}"
2023-11-21 21:03:45 +08:00
expire_in: 3 day
2023-10-05 21:22:28 +08:00
paths:
- docker/debian/*.tar
rules:
# framagit.org 不构建 docker 镜像
- if: $CI_SERVER_HOST == 'framagit.org'
when: never
2023-10-05 21:22:28 +08:00
2023-10-01 22:37:43 +08:00
build:golang:1.21-alpine3.18:
stage: build
image: golang:1.21-alpine3.18
2023-11-21 16:58:11 +08:00
variables:
CGO_ENABLED: 0
2023-10-01 22:37:43 +08:00
script:
- echo $CI_PIPELINE_ID
- echo $CI_JOB_ID
2023-10-01 22:37:43 +08:00
- go version
- go env -w GOPROXY=https://goproxy.cn,direct
2023-12-02 15:17:08 +08:00
#- go env -w GOPROXY=https://mirrors.aliyun.com/goproxy,direct
2023-10-02 01:55:40 +08:00
- go mod download
2023-10-09 01:16:19 +08:00
- go test ./... -v
- go run main.go
- go build -o buildinfo/buildinfo buildinfo/buildinfo.go
- GOOS=linux GOARCH=amd64 go build -ldflags "-s -w -buildid= -X main.BuildDate=$(buildinfo/buildinfo now) -X main.Compiler= -X main.GitCommitBranch=$CI_COMMIT_BRANCH -X main.GitCommitSha=$CI_COMMIT_SHA -X main.GitCommitShortSha=$CI_COMMIT_SHORT_SHA -X main.GitCommitTag=$CI_COMMIT_TAG -X main.GitCommitTimestamp=$CI_COMMIT_TIMESTAMP -X main.GitTreeState=$(buildinfo/buildinfo git-tree-state) -X main.GitVersion=$(buildinfo/buildinfo commitTag) -X main.GoVersion=$(buildinfo/buildinfo goShortVersion) -X main.Major= -X main.Minor= -X main.Revision= -X main.Platform=linux/alpine/amd64 -X main.CiPipelineId=$CI_PIPELINE_ID -X main.CiJobId=$CI_JOB_ID" -trimpath -o gitlab-go-linux-alpine-amd64 .
- GOOS=linux GOARCH=arm64 go build -ldflags "-s -w -buildid= -X main.BuildDate=$(buildinfo/buildinfo now) -X main.Compiler= -X main.GitCommitBranch=$CI_COMMIT_BRANCH -X main.GitCommitSha=$CI_COMMIT_SHA -X main.GitCommitShortSha=$CI_COMMIT_SHORT_SHA -X main.GitCommitTag=$CI_COMMIT_TAG -X main.GitCommitTimestamp=$CI_COMMIT_TIMESTAMP -X main.GitTreeState=$(buildinfo/buildinfo git-tree-state) -X main.GitVersion=$(buildinfo/buildinfo commitTag) -X main.GoVersion=$(buildinfo/buildinfo goShortVersion) -X main.Major= -X main.Minor= -X main.Revision= -X main.Platform=linux/alpine/arm64 -X main.CiPipelineId=$CI_PIPELINE_ID -X main.CiJobId=$CI_JOB_ID" -trimpath -o gitlab-go-linux-alpine-arm64 .
2023-10-01 22:37:43 +08:00
- ./gitlab-go-linux-alpine-amd64 --version
- ./gitlab-go-linux-alpine-amd64
artifacts:
name: "${CI_JOB_NAME}"
2023-11-21 21:03:45 +08:00
expire_in: 3 day
2023-10-01 22:37:43 +08:00
paths:
- gitlab-go-*
2023-10-01 22:37:43 +08:00
2023-10-05 21:22:28 +08:00
build:docker:alpine3.18:
stage: build:docker
needs:
- job: build:golang:1.21-alpine3.18
artifacts: true
image: docker:24.0.6
variables:
DOCKER_TLS_CERTDIR: ""
DOCKER_HOST: tcp://docker:2375
services:
- name: docker:24.0.6-dind
alias: docker
before_script:
- set +e
- start_time=$(date +%s)
- elapsed=0
- interval=5
- timeout=60
- |
while true; do
docker info >/dev/null 2>&1
result=$?
echo "result=$result"
current_time=$(date +%s)
elapsed_time=$((current_time - start_time))
if [[ $result -eq 0 ]]; then
echo "docker 完成启动"
break
fi
if [[ $elapsed_time -gt $timeout ]]; then
echo "docker 启动超时"
exit 1
fi
echo "docker 正在启动($elapsed) ..."
elapsed=$((elapsed+interval))
sleep $interval
done
- set -e
- docker info
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD
script:
- cp gitlab-go-linux-alpine-amd64 docker/alpine/
2023-10-05 21:22:28 +08:00
- cd $CI_PROJECT_DIR/docker/alpine
- docker pull registry.cn-qingdao.aliyuncs.com/xuxiaowei/public:alpine_3.18.3
- docker tag registry.cn-qingdao.aliyuncs.com/xuxiaowei/public:alpine_3.18.3 docker.io/library/alpine:3.18.3
2023-10-05 21:22:28 +08:00
- if [ "$CI_COMMIT_TAG" ]; then
tag="$CI_COMMIT_TAG";
tag_hub="$CI_COMMIT_TAG-alpine";
2023-10-05 21:22:28 +08:00
else
tag="dev-$CI_PIPELINE_ID";
tag_hub="dev-alpine";
2023-10-05 21:22:28 +08:00
fi
- echo "tag=$tag"
- echo "tag_hub=$tag_hub"
- docker build -t $CI_REGISTRY_IMAGE/gitlab-go-alpine:$tag . --no-cache --progress plain
- docker tag $CI_REGISTRY_IMAGE/gitlab-go-alpine:$tag $DOCKER_USERNAME/gitlab-go:$tag_hub
- docker images
- docker push $CI_REGISTRY_IMAGE/gitlab-go-alpine:$tag
- docker push $DOCKER_USERNAME/gitlab-go:$tag_hub
- docker save -o gitlab-go-dev-alpine-$CI_PIPELINE_ID.tar $CI_REGISTRY_IMAGE/gitlab-go-alpine:$tag
artifacts:
name: "${CI_JOB_NAME}"
2023-11-21 21:03:45 +08:00
expire_in: 3 day
2023-10-05 21:22:28 +08:00
paths:
- docker/alpine/*.tar
rules:
# framagit.org 不构建 docker 镜像
- if: $CI_SERVER_HOST == 'framagit.org'
when: never
2023-10-05 21:22:28 +08:00
2023-10-01 21:43:52 +08:00
# 嵌入
include:
# 同步代码
- /sync.yml