gitlab-go/.gitlab-ci.yml

188 lines
11 KiB
YAML

stages:
- build
- build:docker
- sync
build:golang:1.21:
stage: build
image: golang:1.21
script:
- go version
- go env -w GOPROXY=https://goproxy.cn,direct
#- go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/
- go mod download
- 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=$(buildinfo/buildinfo commitBranch) -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= -X main.CiPipelineId= -X main.CiJobId=" -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=$(buildinfo/buildinfo commitBranch) -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= -X main.CiPipelineId= -X main.CiJobId=" -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=$(buildinfo/buildinfo commitBranch) -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= -X main.CiPipelineId= -X main.CiJobId=" -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=$(buildinfo/buildinfo commitBranch) -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= -X main.CiPipelineId= -X main.CiJobId=" -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=$(buildinfo/buildinfo commitBranch) -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= -X main.CiPipelineId= -X main.CiJobId=" -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=$(buildinfo/buildinfo commitBranch) -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= -X main.CiPipelineId= -X main.CiJobId=" -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:
- go version
- go env -w GOPROXY=https://goproxy.cn,direct
#- go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/
- go mod download
- 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=$(buildinfo/buildinfo commitBranch) -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= -X main.CiPipelineId= -X main.CiJobId=" -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=$(buildinfo/buildinfo commitBranch) -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= -X main.CiPipelineId= -X main.CiJobId=" -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