196 lines
11 KiB
YAML
196 lines
11 KiB
YAML
stages:
|
|
- build
|
|
- build:docker
|
|
- sync
|
|
|
|
build:golang:1.21:
|
|
stage: build
|
|
image: golang:1.21
|
|
script:
|
|
- echo $CI_PIPELINE_ID
|
|
- echo $CI_JOB_ID
|
|
- go version
|
|
- go env -w GOPROXY=https://goproxy.cn,direct
|
|
#- go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/
|
|
- go mod download
|
|
- 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= -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.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= -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.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= -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.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= -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.CiPipelineId=$CI_PIPELINE_ID -X main.CiJobId=$CI_JOB_ID" -trimpath -o gitlab-go-linux-arm64 .
|
|
- 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= -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.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= -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.CiPipelineId=$CI_PIPELINE_ID -X main.CiJobId=$CI_JOB_ID" -trimpath -o gitlab-go-darwin-arm64 .
|
|
- ./gitlab-go-linux-amd64 --version
|
|
- ./gitlab-go-linux-amd64
|
|
artifacts:
|
|
name: "${CI_JOB_NAME}"
|
|
expire_in: 1 week
|
|
paths:
|
|
- gitlab-go-windows-*
|
|
- gitlab-go-linux-*
|
|
- gitlab-go-darwin-*
|
|
|
|
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/
|
|
- cd $CI_PROJECT_DIR/docker/debian
|
|
- docker pull registry.jihulab.com/xuxiaowei-cloud/xuxiaowei-cloud/debian:12.1
|
|
- docker tag registry.jihulab.com/xuxiaowei-cloud/xuxiaowei-cloud/debian:12.1 docker.io/library/debian:12.1
|
|
- if [ "$CI_COMMIT_TAG" ]; then
|
|
tag="$CI_COMMIT_TAG";
|
|
tag_hub="$CI_COMMIT_TAG-debian";
|
|
else
|
|
tag="dev-$CI_PIPELINE_ID";
|
|
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}"
|
|
expire_in: 1 week
|
|
paths:
|
|
- docker/debian/*.tar
|
|
|
|
build:golang:1.21-alpine3.18:
|
|
stage: build
|
|
image: golang:1.21-alpine3.18
|
|
script:
|
|
- echo $CI_PIPELINE_ID
|
|
- echo $CI_JOB_ID
|
|
- go version
|
|
- go env -w GOPROXY=https://goproxy.cn,direct
|
|
#- go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/
|
|
- go mod download
|
|
- 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= -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= -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 .
|
|
- ./gitlab-go-linux-alpine-amd64 --version
|
|
- ./gitlab-go-linux-alpine-amd64
|
|
artifacts:
|
|
name: "${CI_JOB_NAME}"
|
|
expire_in: 1 week
|
|
paths:
|
|
- gitlab-go-linux-*
|
|
|
|
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/
|
|
- cd $CI_PROJECT_DIR/docker/alpine
|
|
- docker pull registry.jihulab.com/xuxiaowei-cloud/xuxiaowei-cloud/alpine:3.18.3
|
|
- docker tag registry.jihulab.com/xuxiaowei-cloud/xuxiaowei-cloud/alpine:3.18.3 docker.io/library/alpine:3.18.3
|
|
- if [ "$CI_COMMIT_TAG" ]; then
|
|
tag="$CI_COMMIT_TAG";
|
|
tag_hub="$CI_COMMIT_TAG-alpine";
|
|
else
|
|
tag="dev-$CI_PIPELINE_ID";
|
|
tag_hub="dev-alpine";
|
|
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}"
|
|
expire_in: 1 week
|
|
paths:
|
|
- docker/alpine/*.tar
|
|
|
|
# 嵌入
|
|
include:
|
|
# 同步代码
|
|
- /sync.yml
|