Skip to content

Commit

Permalink
build: 完善gitlab自动打包以及其他make
Browse files Browse the repository at this point in the history
  • Loading branch information
郭靖 committed Nov 5, 2023
1 parent c2232d6 commit 6a7046e
Show file tree
Hide file tree
Showing 2 changed files with 101 additions and 11 deletions.
20 changes: 20 additions & 0 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
stages:
- docker

docker-job:
tags:
#TODO 需要修改此处对应各自项目的公共runner,避免都用all标签导致阻塞
- all
stage: docker
script:
#获取git分支版本,并传给Makefile
- VERSION=`echo $CI_COMMIT_REF_NAME | sed 's/\(v[0-9\x2e]*\).*/\1/'`
#本次提交最新的记录值
# - echo ${CI_COMMIT_SHA}
# c8679fbb719994631bc6a9930d41617f7a1b382d 是上一步某次提交的哈希值
# - COMMIT_COUNT=$(git rev-list --count e93e5e4b876d5b8d88399b15ec3bbb29a218e7d7..HEAD)
# - echo ${COMMIT_COUNT}
- make docker VERSION=$VERSION
# - make push_docker
# 打安装包,默认关闭,看实际产品情况是否要开启
# - make install_package VERSION=$VERSION COMMIT_COUNT=$COMMIT_COUNT
92 changes: 81 additions & 11 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,24 +1,94 @@
MODULE = hertz-admin


#镜像名称
#IMAGE_NAME := ha
PROJECT_NAME := $(shell grep ProjectName version.go | awk -F '"' '{print $$2}')
IMAGE_NAME := $(shell echo $(PROJECT_NAME) | sed 's/^//')-backend
#镜像版本,根据git分支名获取版本(gitlab runner中获取不到版本信息,修改为执行make时传参传过来/通过读取version.go获取版本)
#BRANCH := $(shell git rev-parse --abbrev-ref HEAD)
#IMAGE_TAG := $(shell echo $(BRANCH) | sed 's/\(v[0-9\x2e]*\).*/\1/')
#IMAGE_TAG := v0.1.0
#获取执行make时,传过来的变量值
IMAGE_TAG := $(VERSION)
ifeq ($(IMAGE_TAG),)
# 如果 IMAGE_TAG 未定义,则从version.go获取版本信息
#FILE_VERSION := $(shell grep Version version.go | awk -F '"' '{print $$2}')
#IMAGE_TAG := $(shell echo $(FILE_VERSION) | sed 's/^//')
endif

#要推送到harbor仓库的地址
REPOSITORY := 192.168.1.1:443/$(IMAGE_NAME)/$(IMAGE_NAME)-backend
#保存的镜像存放的目录
TARGET_DIR := /opt/build-host/$(PROJECT_NAME)/$(IMAGE_TAG)
#TARGET_DIR := ./

# 运行
.PHONY: run
run:
@echo "Building image with tag '$(IMAGE_TAG)'"
go run cmd/ha/main.go

.PHONY: build
build:
go env -w GO111MODULE=on \
&& go env -w GOPROXY=https://goproxy.cn,direct \
&& go env -w CGO_ENABLED=0 \
&& go mod tidy \
&& go build -ldflags="-s -w" -o ha ./cmd/ha/main.go
#go build -o ha cmd/ha/main.go

go build -o ha cmd/ha/main.go
# 打包成docker镜像
.PHONY: docker
TAG := $(IMAGE_NAME):$(IMAGE_TAG)
docker:
docker build -f ./build/docker/Dockerfile -t ha:latest .
docker save -o ha.tar ha:latest
gzip ha.tar
@echo "Building image with tag '$(TAG)'"
docker build -f ./build/docker/Dockerfile -t $(TAG) .
#如果运行在gitlab runner可能创建/opt/build-host/$(PROJECT_NAME)权限不足,需要到135服务器手动创建项目目录,并将目录权限更改为gitlab-runner
# chown -R gitlab-runner:gitlab-runner ./opt/build-host/***
mkdir -p $(TARGET_DIR)
#docker save -o $(TARGET_DIR)/$(IMAGE_NAME)-$(IMAGE_TAG).tar $(TAG)
docker save -o $(TARGET_DIR)/$(IMAGE_NAME).tar $(TAG)
gzip -f $(TARGET_DIR)/$(IMAGE_NAME).tar
docker image prune -f
#docker system prune -f

# 推送到镜像仓库
.PHONY: push_docker
push_docker:
@echo "Pushing image with tag '$(IMAGE_NAME):$(IMAGE_TAG)' to repository '$(REPOSITORY):$(IMAGE_TAG)'"
docker tag $(IMAGE_NAME):$(IMAGE_TAG) $(REPOSITORY):$(IMAGE_TAG)
docker login -u admin -p 123456 192.168.1.1:443
docker push $(REPOSITORY):$(IMAGE_TAG)

# 自动打包(根据dbes编写,其他产品线需自行修改)
.PHONY: install_package
#获取执行make时,传过来的变量值,直接使用
#COMMIT_COUNT := $(COMMIT_COUNT)
INSTALL_PATH := /opt/build-host/$(PROJECT_NAME)/$(PROJECT_NAME)_$(IMAGE_TAG).${COMMIT_COUNT}
install_package:
@echo "COMMIT_COUNT '$(COMMIT_COUNT)' install package install_path '$(INSTALL_PATH)'"
# 创建/opt/build-host/dbes/dbes_v0.2.0文件夹,用来打包v0.2.0版本安装包
mkdir -p $(INSTALL_PATH)
# 将该版本的backend安装包拷贝到打包目录下,此次只拷贝了backend镜像包。该段Makefile可拷贝到其他项目,修改执行打包操作
#cp -f $(TARGET_DIR)/$(IMAGE_NAME)-$(IMAGE_TAG).tar.gz $(INSTALL_PATH)/$(IMAGE_NAME).tar.gz
#将该版本下的文件全部拷贝到打包目录,包含前端后端和其他文件
cp -rf $(TARGET_DIR)/* $(INSTALL_PATH)/
# 每个版本有新的变动,写到./deployments/docker-compose/目录下,该目录下应包含install.sh(安装脚本)和update.sh(升级脚本)和其他项目依赖项
# install.sh和update.sh需要保持backend中是最新的,每次从该git仓库修改和打包。update.sh需要修改请求backend地址
cp -rf ./deployments/docker-compose/* $(INSTALL_PATH)/
# dbes下需要写proxy代理的配置文件,为方便,这里写到了config目录下
cp -rf ./config $(INSTALL_PATH)/
echo "{\"version\":\"$(shell echo "$(IMAGE_TAG).${COMMIT_COUNT}" | cut -c2-)\"}" > $(INSTALL_PATH)/config/version.json
# common文件夹中包含助手,自检服务,config/config.yml配置文件(避免本地调试配置文件覆盖线上标准配置)等
# 每个产品线,需要单独维护产品线下的common文件夹
cp -rf $(INSTALL_PATH)/../common/* $(INSTALL_PATH)/
#转换windows下写的sh为unix,其他sh自行添加
dos2unix $(INSTALL_PATH)/install.sh
dos2unix $(INSTALL_PATH)/update.sh
cd $(INSTALL_PATH)/..
# 打包成tar.gz安装包
chmod +x $(INSTALL_PATH)/install.sh
chmod +x $(INSTALL_PATH)/update.sh
tar -zcvf $(PROJECT_NAME)_$(IMAGE_TAG).$(COMMIT_COUNT).tar.gz -C /opt/build-host/$(PROJECT_NAME) $(PROJECT_NAME)_$(IMAGE_TAG).$(COMMIT_COUNT)
mv -f $(PROJECT_NAME)_$(IMAGE_TAG).$(COMMIT_COUNT).tar.gz $(INSTALL_PATH)/..
rm -rf $(INSTALL_PATH)


#生成swag接口文档
.PHONY: swag
swag:
swag init -g ./cmd/ha/main.go

0 comments on commit 6a7046e

Please sign in to comment.