mirror of
https://git.bjxgj.com/xgj/xgj-actions.git
synced 2025-10-14 08:53:36 +08:00
feat: 添加构建和部署环境配置的 GitHub Action,包括 Docker 和 kubectl 的安装与配置,支持阿里云镜像源,提供详细的日志输出和错误处理。
This commit is contained in:
204
setup-env/scripts/setup-environment.sh
Executable file
204
setup-env/scripts/setup-environment.sh
Executable file
@@ -0,0 +1,204 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# 颜色输出
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 输出函数
|
||||
log_info() {
|
||||
echo -e "${BLUE}ℹ️ $1${NC}"
|
||||
}
|
||||
|
||||
log_success() {
|
||||
echo -e "${GREEN}✅ $1${NC}"
|
||||
}
|
||||
|
||||
log_warning() {
|
||||
echo -e "${YELLOW}⚠️ $1${NC}"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}❌ $1${NC}"
|
||||
}
|
||||
|
||||
# 检查是否为 root 用户
|
||||
check_root() {
|
||||
if [[ $EUID -ne 0 ]]; then
|
||||
log_error "此脚本需要 root 权限运行"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 配置阿里云镜像源
|
||||
setup_aliyun_sources() {
|
||||
log_info "配置阿里云镜像源..."
|
||||
|
||||
# 备份原始源列表
|
||||
if [[ -f /etc/apt/sources.list ]]; then
|
||||
cp /etc/apt/sources.list /etc/apt/sources.list.backup
|
||||
fi
|
||||
|
||||
# 设置阿里云镜像源
|
||||
cat > /etc/apt/sources.list << 'EOF'
|
||||
deb https://mirrors.aliyun.com/debian/ bullseye main contrib non-free
|
||||
deb https://mirrors.aliyun.com/debian-security bullseye-security main contrib non-free
|
||||
deb https://mirrors.aliyun.com/debian/ bullseye-updates main contrib non-free
|
||||
EOF
|
||||
|
||||
log_success "阿里云镜像源配置完成"
|
||||
}
|
||||
|
||||
# 安装基础依赖
|
||||
install_base_packages() {
|
||||
log_info "更新包列表并安装基础依赖..."
|
||||
|
||||
apt-get update
|
||||
apt-get install -y \
|
||||
ca-certificates \
|
||||
curl \
|
||||
gnupg \
|
||||
coreutils \
|
||||
lsb-release \
|
||||
software-properties-common \
|
||||
apt-transport-https
|
||||
|
||||
log_success "基础依赖安装完成"
|
||||
}
|
||||
|
||||
# 安装 Docker
|
||||
install_docker() {
|
||||
log_info "安装 Docker..."
|
||||
|
||||
# 创建密钥目录
|
||||
mkdir -p /etc/apt/keyrings
|
||||
|
||||
# 下载 Docker GPG 密钥
|
||||
if [[ "${USE_ALIYUN_MIRROR:-true}" == "true" ]]; then
|
||||
log_info "使用阿里云 Docker 镜像源..."
|
||||
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg | \
|
||||
gpg --batch --yes --dearmor -o /etc/apt/keyrings/docker.gpg
|
||||
else
|
||||
log_info "使用官方 Docker 源..."
|
||||
curl -fsSL https://download.docker.com/linux/debian/gpg | \
|
||||
gpg --batch --yes --dearmor -o /etc/apt/keyrings/docker.gpg
|
||||
fi
|
||||
|
||||
chmod a+r /etc/apt/keyrings/docker.gpg
|
||||
|
||||
# 添加 Docker 源
|
||||
if [[ "${USE_ALIYUN_MIRROR:-true}" == "true" ]]; then
|
||||
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/debian $(lsb_release -cs) stable" | \
|
||||
tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||
else
|
||||
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | \
|
||||
tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||
fi
|
||||
|
||||
# 更新源并安装 Docker
|
||||
apt-get update
|
||||
apt-get install -y \
|
||||
docker-ce-cli \
|
||||
docker-buildx-plugin \
|
||||
docker-compose-plugin
|
||||
|
||||
log_success "Docker 安装完成"
|
||||
}
|
||||
|
||||
# 安装 kubectl
|
||||
install_kubectl() {
|
||||
if [[ "${SKIP_KUBECTL:-false}" == "true" ]]; then
|
||||
log_info "跳过 kubectl 安装"
|
||||
return 0
|
||||
fi
|
||||
|
||||
log_info "安装 kubectl..."
|
||||
|
||||
# 添加 Kubernetes GPG 密钥
|
||||
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key | \
|
||||
gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
|
||||
chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg
|
||||
|
||||
# 添加 Kubernetes apt 仓库
|
||||
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.33/deb/ /' | \
|
||||
tee /etc/apt/sources.list.d/kubernetes.list
|
||||
chmod 644 /etc/apt/sources.list.d/kubernetes.list
|
||||
|
||||
# 更新包索引并安装 kubectl
|
||||
apt-get update
|
||||
apt-get install -y kubectl
|
||||
|
||||
log_success "kubectl 安装完成"
|
||||
}
|
||||
|
||||
# 验证安装
|
||||
verify_installation() {
|
||||
log_info "验证安装..."
|
||||
|
||||
# 验证 Docker
|
||||
if command -v docker &> /dev/null; then
|
||||
DOCKER_VERSION=$(docker --version | cut -d' ' -f3 | cut -d',' -f1)
|
||||
log_success "Docker 版本: $DOCKER_VERSION"
|
||||
else
|
||||
log_error "Docker 安装失败"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 验证 kubectl (如果安装了)
|
||||
if [[ "${SKIP_KUBECTL:-false}" != "true" ]]; then
|
||||
if command -v kubectl &> /dev/null; then
|
||||
KUBECTL_VERSION=$(kubectl version --client --short 2>/dev/null | cut -d' ' -f3 || echo "已安装")
|
||||
log_success "kubectl 版本: $KUBECTL_VERSION"
|
||||
else
|
||||
log_error "kubectl 安装失败"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# 清理临时文件
|
||||
cleanup() {
|
||||
log_info "清理临时文件..."
|
||||
apt-get clean
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
log_success "清理完成"
|
||||
}
|
||||
|
||||
# 主函数
|
||||
main() {
|
||||
log_info "开始配置构建环境..."
|
||||
|
||||
# 检查 root 权限
|
||||
check_root
|
||||
|
||||
# 配置镜像源
|
||||
if [[ "${USE_ALIYUN_MIRROR:-true}" == "true" ]]; then
|
||||
setup_aliyun_sources
|
||||
fi
|
||||
|
||||
# 安装基础包
|
||||
install_base_packages
|
||||
|
||||
# 安装 Docker
|
||||
install_docker
|
||||
|
||||
# 安装 kubectl
|
||||
install_kubectl
|
||||
|
||||
# 验证安装
|
||||
verify_installation
|
||||
|
||||
# 清理
|
||||
cleanup
|
||||
|
||||
log_success "环境配置完成!"
|
||||
}
|
||||
|
||||
# 错误处理
|
||||
trap 'log_error "脚本执行失败,退出码: $?"' ERR
|
||||
|
||||
# 执行主函数
|
||||
main "$@"
|
67
setup-env/scripts/setup-kubectl.sh
Executable file
67
setup-env/scripts/setup-kubectl.sh
Executable file
@@ -0,0 +1,67 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# 颜色输出
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 输出函数
|
||||
log_info() {
|
||||
echo -e "${BLUE}ℹ️ $1${NC}"
|
||||
}
|
||||
|
||||
log_success() {
|
||||
echo -e "${GREEN}✅ $1${NC}"
|
||||
}
|
||||
|
||||
log_warning() {
|
||||
echo -e "${YELLOW}⚠️ $1${NC}"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}❌ $1${NC}"
|
||||
}
|
||||
|
||||
# 配置 kubectl
|
||||
setup_kubectl_config() {
|
||||
log_info "配置 kubectl..."
|
||||
|
||||
# 检查环境变量
|
||||
if [[ -z "${KUBE_CONFIG_BASE64:-}" ]]; then
|
||||
log_error "KUBE_CONFIG_BASE64 环境变量未设置"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 创建 .kube 目录
|
||||
mkdir -p "$HOME/.kube"
|
||||
|
||||
# 解码并写入配置文件
|
||||
echo "$KUBE_CONFIG_BASE64" | base64 -d > "$HOME/.kube/config"
|
||||
|
||||
# 设置正确的权限
|
||||
chmod 600 "$HOME/.kube/config"
|
||||
|
||||
log_success "kubectl 配置文件已创建"
|
||||
|
||||
# 验证配置文件格式
|
||||
if ! kubectl config view --minify >/dev/null 2>&1; then
|
||||
log_error "kubectl 配置文件格式无效"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_success "kubectl 配置验证通过"
|
||||
}
|
||||
|
||||
# 主函数
|
||||
main() {
|
||||
setup_kubectl_config
|
||||
}
|
||||
|
||||
# 错误处理
|
||||
trap 'log_error "kubectl 配置失败,退出码: $?"' ERR
|
||||
|
||||
# 执行主函数
|
||||
main "$@"
|
76
setup-env/scripts/verify-kubectl.sh
Executable file
76
setup-env/scripts/verify-kubectl.sh
Executable file
@@ -0,0 +1,76 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# 颜色输出
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 输出函数
|
||||
log_info() {
|
||||
echo -e "${BLUE}ℹ️ $1${NC}"
|
||||
}
|
||||
|
||||
log_success() {
|
||||
echo -e "${GREEN}✅ $1${NC}"
|
||||
}
|
||||
|
||||
log_warning() {
|
||||
echo -e "${YELLOW}⚠️ $1${NC}"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}❌ $1${NC}"
|
||||
}
|
||||
|
||||
# 验证 kubectl 连接
|
||||
verify_kubectl_connection() {
|
||||
log_info "验证 kubectl 连接..."
|
||||
|
||||
# 设置超时时间
|
||||
TIMEOUT=30
|
||||
|
||||
# 检查集群连接
|
||||
if timeout $TIMEOUT kubectl cluster-info >/dev/null 2>&1; then
|
||||
log_success "集群连接成功"
|
||||
|
||||
# 显示集群信息
|
||||
log_info "集群信息:"
|
||||
kubectl cluster-info
|
||||
|
||||
# 显示节点信息
|
||||
log_info "集群节点:"
|
||||
if kubectl get nodes >/dev/null 2>&1; then
|
||||
kubectl get nodes
|
||||
else
|
||||
log_warning "无法获取节点信息(可能权限不足)"
|
||||
fi
|
||||
|
||||
# 显示当前上下文
|
||||
CURRENT_CONTEXT=$(kubectl config current-context 2>/dev/null || echo "未知")
|
||||
log_info "当前上下文: $CURRENT_CONTEXT"
|
||||
|
||||
# 显示 kubectl 版本
|
||||
log_info "kubectl 版本信息:"
|
||||
kubectl version --short 2>/dev/null || kubectl version --client
|
||||
|
||||
else
|
||||
log_error "kubectl 连接验证失败"
|
||||
log_info "尝试显示详细错误信息..."
|
||||
kubectl cluster-info || true
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 主函数
|
||||
main() {
|
||||
verify_kubectl_connection
|
||||
}
|
||||
|
||||
# 错误处理
|
||||
trap 'log_error "kubectl 验证失败,退出码: $?"' ERR
|
||||
|
||||
# 执行主函数
|
||||
main "$@"
|
Reference in New Issue
Block a user