Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 0a59e3e153 |
@@ -1,11 +0,0 @@
|
||||
.git
|
||||
.gitignore
|
||||
|
||||
./Makefile
|
||||
|
||||
*.yml
|
||||
*.yaml
|
||||
|
||||
./LICENSE
|
||||
./README.md
|
||||
./img
|
||||
-26
@@ -1,26 +0,0 @@
|
||||
.DS_Store
|
||||
.AppleDouble
|
||||
.LSOverride
|
||||
|
||||
# Icon must end with two \r
|
||||
|
||||
Icon\r\r
|
||||
|
||||
# Thumbnails
|
||||
._*
|
||||
|
||||
# Files that might appear in the root of a volume
|
||||
.DocumentRevisions-V100
|
||||
.fseventsd
|
||||
.Spotlight-V100
|
||||
.TemporaryItems
|
||||
.Trashes
|
||||
.VolumeIcon.icns
|
||||
.com.apple.timemachine.donotpresent
|
||||
|
||||
# Directories potentially created on remote AFP share
|
||||
.AppleDB
|
||||
.AppleDesktop
|
||||
Network Trash Folder
|
||||
Temporary Items
|
||||
.apdisk
|
||||
@@ -1,73 +0,0 @@
|
||||
# CI/CD 的阶段定义,按顺序执行各阶段;默认包含`.pre`(最先执行)/`.post`(最后执行)两个阶段,不用显示定义
|
||||
stages:
|
||||
- build
|
||||
- test
|
||||
- deploy
|
||||
|
||||
# 全局变量定义
|
||||
variables:
|
||||
IMG_URL: "$HARBOR_HOST/$HARBOR_PROJECT/$CI_PROJECT_NAME"
|
||||
IMG_TAG: ":latest"
|
||||
|
||||
# 默认值信息配置
|
||||
default:
|
||||
# 各 stage 使用的默认镜像,如果不定义,则为 gitlab-runner 创建时指定的镜像;各 stage 可以覆盖该值以使用不同的镜像
|
||||
image: docker.colovu.com/library/docker:20.10.16
|
||||
# Gitlab-runner 配置的执行器为 Docker 时,需要 配置对应的 dind 服务(这里使用Runner中配置的Dind服务)
|
||||
#services:
|
||||
# - name: docker.colovu.com/library/docker:20.10.16-dind
|
||||
# alias: docker
|
||||
# 流水线中,各阶段都会执行的脚本命令,包括`before_script`(在各阶段 script 前执行)/`after_script`(在各阶段 script 后执行)
|
||||
before_script:
|
||||
- |
|
||||
if [[ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ]]; then
|
||||
IMG_TAG=":latest"
|
||||
else
|
||||
IMG_TAG=":$CI_COMMIT_REF_NAME"
|
||||
fi
|
||||
- docker login -u "$HARBOR_USERNAME" -p "$HARBOR_PASSWORD" $HARBOR_URL
|
||||
|
||||
# 环境变量信息
|
||||
env-variables:
|
||||
stage: .pre
|
||||
script:
|
||||
- export
|
||||
|
||||
# 编译阶段任务
|
||||
build-arm64:
|
||||
stage: build
|
||||
tags:
|
||||
- arm64
|
||||
script:
|
||||
- docker buildx build --platform=linux/arm64 --pull -t "$IMG_URL$IMG_TAG-linux-arm64" . --push
|
||||
- docker rmi "$IMG_URL$IMG_TAG-linux-arm64"
|
||||
|
||||
build-amd64:
|
||||
stage: build
|
||||
tags:
|
||||
- amd64
|
||||
script:
|
||||
- docker buildx build --platform=linux/amd64 --pull -t "$IMG_URL$IMG_TAG-linux-amd64" . --push
|
||||
- docker rmi "$IMG_URL$IMG_TAG-linux-amd64"
|
||||
|
||||
build-artifact:
|
||||
stage: build
|
||||
needs: [build-amd64, build-arm64]
|
||||
script:
|
||||
- docker manifest create "$IMG_URL$IMG_TAG" "$IMG_URL$IMG_TAG-linux-arm64" "$IMG_URL$IMG_TAG-linux-amd64"
|
||||
- docker manifest push "$IMG_URL$IMG_TAG"
|
||||
- docker manifest rm "$IMG_URL$IMG_TAG"
|
||||
|
||||
# 测试阶段任务
|
||||
test:
|
||||
stage: test
|
||||
script:
|
||||
- docker run --pull always --rm --platform=linux/arm64 "$IMG_URL$IMG_TAG" /bin/uname -a
|
||||
- docker run --pull always --rm --platform=linux/amd64 "$IMG_URL$IMG_TAG" /bin/uname -a
|
||||
- docker images -q "$IMG_URL" | sort -u | xargs docker rmi -f
|
||||
|
||||
# 部署阶段任务
|
||||
deploy:
|
||||
stage: deploy
|
||||
script:
|
||||
- echo "deploy stage"
|
||||
-51
@@ -1,51 +0,0 @@
|
||||
# Ver: 1.11 by Endial Fang (endial@126.com)
|
||||
#
|
||||
|
||||
# 系统默认变量 ====================================================================
|
||||
# 该部分变量为系统根据编译命令默认设置
|
||||
# `TARGETPLATFORM`:构建后的目标平台信息。如 `linux/amd64`,`linux/arm/v7`,`windows/amd64`
|
||||
# `TARGETOS`:目标平台信息(TARGETPLATFORM)中的操作系统部分,如:`linux`、`windows`
|
||||
# `TARGETARCH`:目标平台信息(TARGETPLATFORM)中的平台架构部分,如:`amd64`、`arm`
|
||||
# `TARGETVARIANT`:目标平台信息(TARGETPLATFORM)中的版本变体部分,如:`v7`
|
||||
# `BUILDPLATFORM`:用于构建的节点平台信息
|
||||
# `BUILDOS`:用于构建的节点平台信息(BUILDPLATFORM)中的操作系统部分
|
||||
# `BUILDARCH`:用于构建的节点平台信息(BUILDPLATFORM)中的平台架构部分
|
||||
# `BUILDVARIANT`:用于构建的节点平台信息(BUILDPLATFORM)中的版本变体部分
|
||||
|
||||
# 可变参数 ========================================================================
|
||||
# 该部分变量,在编译命令中通过 `--build-arg` 传入;如果未设置,则使用下面对应的默认值
|
||||
|
||||
ARG APP_NAME=aBuilder
|
||||
ARG APP_VER=3.20
|
||||
ARG REGISTRY_URL="swr.cn-north-4.myhuaweicloud.com/colovu/"
|
||||
ARG APT_SOURCE=ustc
|
||||
ARG LOCAL_URL="http://pkgs.colovu.com/dist"
|
||||
|
||||
# 1. 生成镜像 =====================================================================
|
||||
FROM --platform=${TARGETPLATFORM:-linux/amd64} ${REGISTRY_URL}alpine:${APP_VER}
|
||||
|
||||
# 声明需要使用的全局可变参数(ARG声明的变量仅编译打包阶段有效)
|
||||
ARG APP_NAME
|
||||
ARG APP_VER
|
||||
ARG APT_SOURCE
|
||||
|
||||
LABEL \
|
||||
"Version"="v${APP_VER}" \
|
||||
"Description"="Docker image for Builder based on Alpine." \
|
||||
"Github"="https://gitee.com/colovu/docker-${APP_NAME}" \
|
||||
"Vendor"="Endial Fang (endial@126.com)"
|
||||
|
||||
# 说明:
|
||||
# 虽然原始镜像包含 wget, 但该版本存在问题,下载部分资源(如redis)会报错,因此安装官方完整版
|
||||
RUN set -eux; \
|
||||
\
|
||||
# 选择软件包源,以加速后续软件包安装
|
||||
select_source ${APT_SOURCE}; \
|
||||
\
|
||||
# 安装编译环境及常用开发库
|
||||
install_pkg sudo wget git ca-certificates iproute2 net-tools nano dpkg gnupg \
|
||||
dpkg-dev bash build-base cmake pkgconf \
|
||||
linux-headers cmocka-dev openssl-dev
|
||||
|
||||
|
||||
CMD []
|
||||
@@ -1,21 +0,0 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2020 Endial Fang (endial@126.com)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -1,53 +0,0 @@
|
||||
# Ver: 1.11 by Endial Fang (endial@126.com)
|
||||
#
|
||||
# 当前 Docker 镜像的编译脚本
|
||||
|
||||
# 定义镜像名称
|
||||
image_name :=colovu/abuilder
|
||||
|
||||
# 定义默认镜像仓库地址
|
||||
REGISTRY_URL :=docker.colovu.com
|
||||
|
||||
# 定义系统默认使用的源服务器,包含:default / ustc / aliyun
|
||||
# 当前 Alpine 3.18 阿里云缺少部分软件包
|
||||
APT_SOURCE :=ustc
|
||||
|
||||
# 定义镜像TAG,类似:
|
||||
# <镜像名>:<分支名>-<7位Git ID> # Git 仓库且无文件修改直接编译
|
||||
# <镜像名>:<分支名>-<年月日>-<时分秒> # Git 仓库有文件修改后的编译
|
||||
# <镜像名>:latest-<年月日>-<时分秒> # 非 Git 仓库编译
|
||||
current_subversion:=$(shell if [ ! `git status >/dev/null 2>&1` ]; then git rev-parse --short HEAD; else date +%y%m%d-%H%M%S; fi)
|
||||
image_tag:=$(shell if [ ! `git status >/dev/null 2>&1` ]; then git rev-parse --abbrev-ref HEAD | sed -e 's/master/latest/' | sed -e 's/main/latest/'; else echo "latest"; fi)-$(current_subversion)
|
||||
|
||||
build-arg:=--build-arg REGISTRY_URL=$(REGISTRY_URL)
|
||||
build-arg+=--build-arg APT_SOURCE=$(APT_SOURCE)
|
||||
|
||||
# 设置本地下载服务器路径,加速调试时的本地编译速度
|
||||
local_ip:=`echo "en0 eth0" | xargs -n1 ip addr show 2>/dev/null | grep inet | grep -v 127.0.0.1 | grep -v inet6 | tr "/" " " | awk '{print $$2}'`
|
||||
build-arg+=--build-arg LOCAL_URL=http://local.colovu.com/dist
|
||||
|
||||
.PHONY: build clean clearclean upgrade
|
||||
|
||||
build:
|
||||
@echo "Build $(image_name):$(image_tag)"
|
||||
@docker buildx build --progress plain --force-rm $(build-arg) -t $(image_name):$(image_tag) .
|
||||
@echo "Add tag: $(image_name):latest"
|
||||
@docker tag $(image_name):$(image_tag) $(image_name):latest
|
||||
@echo "Build complete"
|
||||
|
||||
# 清理悬空的镜像(无TAG)及停止的容器
|
||||
clearclean: clean
|
||||
@echo "Clean untaged images and stoped containers..."
|
||||
@docker ps -a | grep "Exited" | awk '{print $$1}' | sort -u | xargs -L 1 docker rm
|
||||
@docker images | grep '<none>' | awk '{print $$3}' | sort -u | xargs -L 1 docker rmi -f
|
||||
|
||||
# 为了防止删除前缀名相同的镜像,在过滤条件中加入一个空格进行过滤
|
||||
clean:
|
||||
@echo "Clean all images for current application..."
|
||||
@docker images | grep "$(image_name) " | awk '{print $$3}' | sort -u | xargs -L 1 docker rmi -f
|
||||
|
||||
# 更新所有 colovu 仓库的镜像
|
||||
upgrade:
|
||||
@echo "Upgrade all images..."
|
||||
@docker images | grep 'colovu' | grep -v '<none>' | grep -v "latest-" | awk '{print $$1":"$$2}' | sort -u | xargs -L 1 docker pull
|
||||
|
||||
@@ -1,98 +1,3 @@
|
||||
# aBuilder
|
||||
|
||||
预安装常用工具及编译工具的镜像。
|
||||
|
||||
该镜像为基于 Alpine 系统的 Builder 环境,主要用于在使用多阶段方式制作镜像时,进行软件源代码的下载、编译等预处理操作。预安装软件包节省软件包下载及更新时间。
|
||||
|
||||
|
||||
**版本信息:**
|
||||
|
||||
- 3.20、latest
|
||||
- 3.20、3.18
|
||||
|
||||
**镜像信息:**
|
||||
|
||||
* 镜像地址:
|
||||
* 华为云: swr.cn-north-4.myhuaweicloud.com/colovu/abuilder
|
||||
* 依赖镜像:swr.cn-north-4.myhuaweicloud.com/colovu/abuilder
|
||||
|
||||
> 后续相关命令行默认使用华为云 SWR 镜像服务器做说明。
|
||||
|
||||
## TL;DR
|
||||
|
||||
Docker 快速启动命令:
|
||||
|
||||
```shell
|
||||
# 从 Registry 服务器下载镜像并启动
|
||||
docker run -it swr.cn-north-4.myhuaweicloud.com/colovu/abuilder:latest /bin/bash
|
||||
```
|
||||
|
||||
- latest:为镜像的 TAG,可针对性选择不同的 TAG 进行下载
|
||||
- 不指定 TAG 时,默认下载`latest`镜像
|
||||
|
||||
## 数据卷
|
||||
|
||||
镜像默认提供以下数据卷定义:
|
||||
|
||||
```shell
|
||||
/srv/data # 工作目录
|
||||
/srv/conf # 配置文件目录
|
||||
```
|
||||
|
||||
## 使用方式
|
||||
|
||||
使用`--from=0`方式:
|
||||
|
||||
```dockerfile
|
||||
# 预编译阶段 ===============================
|
||||
FROM swr.cn-north-4.myhuaweicloud.com/colovu/abuilder:latest
|
||||
|
||||
WORKDIR /tmp
|
||||
|
||||
# 相关下载/解压/编译操作
|
||||
|
||||
# ... 省略
|
||||
|
||||
# 镜像生成阶段 ==============================
|
||||
FROM scratch
|
||||
# 从编译阶段的中拷贝编译结果到当前镜像中(例如:编译的应用直接安装至/usr/local时)
|
||||
COPY --from=0 /usr/local/ /usr/local
|
||||
|
||||
# ... 省略其它操作
|
||||
|
||||
# 镜像命令
|
||||
CMD []
|
||||
```
|
||||
|
||||
使用`--from=name`方式:
|
||||
|
||||
```dockerfile
|
||||
# 预编译阶段。命名为`builder` ==================
|
||||
FROM swr.cn-north-4.myhuaweicloud.com/colovu/abuilder:latest as builder
|
||||
|
||||
WORKDIR /tmp
|
||||
|
||||
# 相关下载/解压/编译操作
|
||||
|
||||
# ... 省略
|
||||
|
||||
# 镜像生成阶段 ==============================
|
||||
FROM scratch
|
||||
# 从编译阶段的中拷贝编译结果到当前镜像中(例如:编译的应用直接安装至/usr/local时)
|
||||
COPY --from=builder /usr/local/ /usr/local
|
||||
|
||||
# ... 省略其它操作
|
||||
|
||||
# 镜像命令
|
||||
CMD []
|
||||
```
|
||||
|
||||
使用该方式的优势:
|
||||
|
||||
- 因系统相关软件包已更新,工具已经预先安装,不需要在每次编译镜像时耗费大量时间在类似重复工作上
|
||||
- 不用安装、删除临时软件,放置生成多余的垃圾文件;预编译阶段的内容使用完即丢弃,不会对镜像大小产生影响
|
||||
- 没有相关的中间操作步骤,不会产生多余的镜像分层
|
||||
|
||||
----
|
||||
|
||||
本文原始来源 [Endial Fang](https://gitee.com/colovu) @ [Gitee.com](https://gitee.com)
|
||||
停止维护 v3.21 版本.
|
||||
|
||||
@@ -1,110 +0,0 @@
|
||||
#!/bin/bash
|
||||
# Ver: 1.0 by Endial Fang (endial@126.com)
|
||||
#
|
||||
# Docker 镜像构建脚本 (仅linux/amd64)
|
||||
|
||||
IMAGE_NAME="abuilder"
|
||||
REGISTRY_URL="swr.cn-north-4.myhuaweicloud.com/colovu/"
|
||||
APT_SOURCE="ustc"
|
||||
|
||||
# 获取发布版本标签
|
||||
get_release_tag() {
|
||||
if ! git rev-parse --git-dir >/dev/null 2>&1; then
|
||||
echo "unknown"
|
||||
elif [ -n "$(git status --porcelain)" ]; then
|
||||
echo "latest"
|
||||
else
|
||||
# 尝试获取最近的git标签
|
||||
local tag=$(git describe --tags --abbrev=0 2>/dev/null)
|
||||
if [ -n "$tag" ]; then
|
||||
echo "$tag"
|
||||
else
|
||||
local branch=$(git rev-parse --abbrev-ref HEAD)
|
||||
case "$branch" in
|
||||
master|main) echo "latest" ;;
|
||||
*) echo "$branch" ;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# 获取镜像完整TAG
|
||||
get_image_tag() {
|
||||
local CURRENT_SUBVERSION
|
||||
if git rev-parse --git-dir >/dev/null 2>&1; then
|
||||
if [ -z "$(git status --porcelain)" ]; then
|
||||
CURRENT_SUBVERSION=$(git rev-parse --short=12 HEAD)
|
||||
else
|
||||
CURRENT_SUBVERSION=$(date +%Y%m%d-%H%M%S)
|
||||
fi
|
||||
local branch=$(git rev-parse --abbrev-ref HEAD)
|
||||
branch=$(echo "$branch" | sed -e 's/master/latest/' -e 's/main/latest/')
|
||||
echo "${branch}-${CURRENT_SUBVERSION}"
|
||||
else
|
||||
CURRENT_SUBVERSION=$(date +%Y%m%d-%H%M%S)
|
||||
echo "latest-${CURRENT_SUBVERSION}"
|
||||
fi
|
||||
}
|
||||
|
||||
# 构建amd64架构镜像
|
||||
build() {
|
||||
local TAG=${1:-$(get_image_tag)}
|
||||
echo "Building image ${IMAGE_NAME}:${TAG} (linux/amd64)"
|
||||
|
||||
podman build --platform linux/amd64 \
|
||||
--progress plain --force-rm \
|
||||
--build-arg REGISTRY_URL=${REGISTRY_URL} \
|
||||
--build-arg APT_SOURCE=${APT_SOURCE} \
|
||||
--build-arg LOCAL_URL=http://pkgs.colovu.com/dist \
|
||||
-t ${IMAGE_NAME}:${TAG} \
|
||||
-t ${IMAGE_NAME}:latest \
|
||||
.
|
||||
|
||||
echo "Build complete"
|
||||
}
|
||||
|
||||
# 推送镜像到colovu仓库
|
||||
push_colovu() {
|
||||
local TAG=${1:-$(get_image_tag)}
|
||||
echo "Pushing ${IMAGE_NAME}:${TAG} to registry.colovu.com"
|
||||
|
||||
podman tag "${IMAGE_NAME}:${TAG}" "registry.colovu.com/library/${IMAGE_NAME}:${TAG}"
|
||||
podman push "registry.colovu.com/library/${IMAGE_NAME}:${TAG}"
|
||||
|
||||
podman tag "${IMAGE_NAME}:latest" "registry.colovu.com/library/${IMAGE_NAME}:latest"
|
||||
podman push "registry.colovu.com/library/${IMAGE_NAME}:latest"
|
||||
}
|
||||
|
||||
# 推送镜像到华为云仓库
|
||||
push_huawei() {
|
||||
local TAG=${1:-$(get_release_tag)}
|
||||
echo "Pushing ${IMAGE_NAME}:${TAG} to swr.cn-north-4.myhuaweicloud.com"
|
||||
|
||||
podman tag "${IMAGE_NAME}:${TAG}" "swr.cn-north-4.myhuaweicloud.com/colovu/${IMAGE_NAME}:${TAG}"
|
||||
podman push "swr.cn-north-4.myhuaweicloud.com/colovu/${IMAGE_NAME}:${TAG}"
|
||||
|
||||
podman tag "${IMAGE_NAME}:latest" "swr.cn-north-4.myhuaweicloud.com/colovu/${IMAGE_NAME}:latest"
|
||||
podman push "swr.cn-north-4.myhuaweicloud.com/colovu/${IMAGE_NAME}:latest"
|
||||
}
|
||||
|
||||
# 清理工作空间
|
||||
clean() {
|
||||
echo "Cleaning workspace..."
|
||||
podman images | grep "${IMAGE_NAME} " | awk '{print $3}' | xargs -L 1 podman rmi -f
|
||||
podman ps -a | grep "Exited" | awk '{print $1}' | xargs -L 1 podman rm
|
||||
podman images | grep '<none>' | awk '{print $3}' | xargs -L 1 podman rmi -f
|
||||
}
|
||||
|
||||
# 主函数中更新使用说明
|
||||
main() {
|
||||
case "$1" in
|
||||
build) build "$2" ;; # 传递第二个参数作为标签
|
||||
clean) clean ;;
|
||||
push-cv) push_colovu "$2" ;;
|
||||
push-hw) push_huawei "$2" ;;
|
||||
push) push_colovu "$2"; push_huawei "$2" ;;
|
||||
*) echo "Usage: $0 {build [tag]|clean|push-cv [tag]|push-hw [tag]|push [tag]}"; exit 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user