cicd-release/.gitlab-ci.yml

200 lines
12 KiB
YAML

stages:
- build
- build:docker
- sync
build:golang:1.21:
stage: build
image: golang:1.21
variables:
CGO_ENABLED: 0
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=$(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 cicd-release-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 cicd-release-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 cicd-release-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 cicd-release-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=$(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 cicd-release-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 cicd-release-darwin-arm64 .
- ./cicd-release-linux-amd64 --version
- ./cicd-release-linux-amd64
artifacts:
name: "${CI_JOB_NAME}"
expire_in: 3 day
paths:
- cicd-release-windows-*
- cicd-release-linux-*
- cicd-release-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 cicd-release-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/cicd-release-debian:$tag . --no-cache --progress plain
- docker tag $CI_REGISTRY_IMAGE/cicd-release-debian:$tag $DOCKER_USERNAME/cicd-release:$tag_hub
- docker images
- docker push $CI_REGISTRY_IMAGE/cicd-release-debian:$tag
- docker push $DOCKER_USERNAME/cicd-release:$tag_hub
- docker save -o cicd-release-dev-debian-$CI_PIPELINE_ID.tar $CI_REGISTRY_IMAGE/cicd-release-debian:$tag
artifacts:
name: "${CI_JOB_NAME}"
expire_in: 3 day
paths:
- docker/debian/*.tar
build:golang:1.21-alpine3.18:
stage: build
image: golang:1.21-alpine3.18
variables:
CGO_ENABLED: 0
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=$(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 cicd-release-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 cicd-release-linux-alpine-arm64 .
- ./cicd-release-linux-alpine-amd64 --version
- ./cicd-release-linux-alpine-amd64
artifacts:
name: "${CI_JOB_NAME}"
expire_in: 3 day
paths:
- cicd-release-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 cicd-release-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/cicd-release-alpine:$tag . --no-cache --progress plain
- docker tag $CI_REGISTRY_IMAGE/cicd-release-alpine:$tag $DOCKER_USERNAME/cicd-release:$tag_hub
- docker images
- docker push $CI_REGISTRY_IMAGE/cicd-release-alpine:$tag
- docker push $DOCKER_USERNAME/cicd-release:$tag_hub
- docker save -o cicd-release-dev-alpine-$CI_PIPELINE_ID.tar $CI_REGISTRY_IMAGE/cicd-release-alpine:$tag
artifacts:
name: "${CI_JOB_NAME}"
expire_in: 3 day
paths:
- docker/alpine/*.tar
# 嵌入
include:
# 同步代码
- /sync.yml