136 lines
3.3 KiB
Bash
Executable File
136 lines
3.3 KiB
Bash
Executable File
#!/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/\` 目录下的文件并提交到Git,ArgoCD会自动同步部署。
|
||
|
||
## 测试访问
|
||
\`\`\`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"
|