Files
k3s_auto_deploy/scripts/push-demo-app.sh

136 lines
3.3 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
CONFIG_FILE="$PROJECT_DIR/config/cluster-vars.yml"
echo "=== 推送示例应用到Gitea ==="
# 读取配置
GITEA_USER=$(yq eval '.gitea_user_name' "$CONFIG_FILE")
GITEA_PASSWORD=$(yq eval '.gitea_user_password' "$CONFIG_FILE")
GITEA_ORG=$(yq eval '.gitea_org_name' "$CONFIG_FILE")
GITEA_REPO=$(yq eval '.gitea_repo_name' "$CONFIG_FILE")
# 获取Gitea NodePort
GITEA_NODEPORT=$(kubectl get svc gitea-http -n gitea -o jsonpath='{.spec.ports[0].nodePort}')
NODE_IP=$(kubectl get nodes -o jsonpath='{.items[0].status.addresses[?(@.type=="ExternalIP")].address}')
if [ -z "$NODE_IP" ]; then
NODE_IP=$(kubectl get nodes -o jsonpath='{.items[0].status.addresses[?(@.type=="InternalIP")].address}')
fi
GITEA_URL="http://$NODE_IP:$GITEA_NODEPORT"
REPO_URL="$GITEA_URL/$GITEA_ORG/$GITEA_REPO.git"
# 创建临时目录
TEMP_DIR=$(mktemp -d)
cd "$TEMP_DIR"
echo "📝 创建示例应用清单..."
# 创建manifests目录
mkdir -p manifests
# 创建示例Deployment
cat > manifests/deployment.yaml <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-nginx
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: demo-nginx
template:
metadata:
labels:
app: demo-nginx
spec:
containers:
- name: nginx
image: nginx:1.25-alpine
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi"
cpu: "100m"
limits:
memory: "128Mi"
cpu: "200m"
EOF
# 创建示例Service
cat > manifests/service.yaml <<EOF
apiVersion: v1
kind: Service
metadata:
name: demo-nginx
namespace: default
spec:
type: NodePort
selector:
app: demo-nginx
ports:
- port: 80
targetPort: 80
nodePort: 30080
EOF
# 创建README
cat > README.md <<EOF
# Demo Application
这是一个由ArgoCD管理的示例应用。
## 应用信息
- **应用名称**: demo-nginx
- **镜像**: nginx:1.25-alpine
- **副本数**: 2
- **访问端口**: NodePort 30080
## 更新应用
修改 \`manifests/\` 目录下的文件并提交到GitArgoCD会自动同步部署。
## 测试访问
\`\`\`bash
curl http://<NODE_IP>:30080
\`\`\`
EOF
# 初始化Git仓库
echo "🔧 初始化Git仓库..."
git init -b main
git config user.name "$GITEA_USER"
git config user.email "$GITEA_USER@example.com"
git add .
git commit -m "Initial commit: Add demo nginx application
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>"
# 推送到Gitea
echo "📤 推送到Gitea..."
git remote add origin "$REPO_URL"
# 使用用户名密码推送(临时方案)
# URL encode the password to handle special characters
ENCODED_PASSWORD=$(python3 -c "import urllib.parse; print(urllib.parse.quote('$GITEA_PASSWORD'))")
git push -u origin main || {
echo "⚠️ 首次推送失败,尝试使用凭证..."
git remote set-url origin "http://$GITEA_USER:$ENCODED_PASSWORD@$NODE_IP:$GITEA_NODEPORT/$GITEA_ORG/$GITEA_REPO.git"
git push -u origin main
}
# 清理
cd "$PROJECT_DIR"
rm -rf "$TEMP_DIR"
echo "✅ 示例应用推送成功!"
echo "📊 仓库地址: $REPO_URL"
echo "🌐 访问Gitea查看: $GITEA_URL/$GITEA_ORG/$GITEA_REPO"
echo "⏳ 等待ArgoCD同步约3分钟..."
echo "📊 查看同步状态: kubectl get application -n argocd"