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,direct - 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 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 . - ./gitlab-go-linux-amd64 --version - ./gitlab-go-linux-amd64 artifacts: name: "${CI_JOB_NAME}" expire_in: 3 day paths: - gitlab-go-* 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.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 - 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: 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,direct - 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 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 . - ./gitlab-go-linux-alpine-amd64 --version - ./gitlab-go-linux-alpine-amd64 artifacts: name: "${CI_JOB_NAME}" expire_in: 3 day paths: - gitlab-go-* 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.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 - 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: 3 day paths: - docker/alpine/*.tar # 嵌入 include: # 同步代码 - /sync.yml