自动化构建

Time: 2025-03-18 Tuesday 16:35:35

自动化构建

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#!/bin/bash
set -eo pipefail

LOG_FILE="/var/log/auto_install.log"
MYSQL_PWD="Casio233."

# 初始化日志文件
exec > >(tee -a "$LOG_FILE") 2>&1
echo "自动化安装开始于 $(date)"

# 函数:错误处理
handle_error() {
echo "错误发生在第 $1 行,退出状态码 $2"
exit $2
}

trap 'handle_error $LINENO $?' ERR

# 安装MySQL
install_mysql() {
echo "#### 正在安装MySQL ####"

# 安装仓库
sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm || {
echo "MySQL仓库安装失败"
return 1
}

# 安装服务
sudo yum install mysql-community-server -y || {
echo "MySQL服务安装失败"
return 1
}

# 启动服务
sudo systemctl start mysqld
sudo systemctl enable mysqld

# 等待生成临时密码
echo "等待生成临时密码..."
for i in {1..30}; do
if sudo grep -q 'temporary password' /var/log/mysqld.log; then
break
fi
sleep 2
done

# 获取临时密码
TEMP_PWD=$(sudo grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}')
[ -z "$TEMP_PWD" ] && { echo "无法获取临时密码"; return 1; }

# 修改root密码
echo "修改root密码..."
mysql -u root -p"${TEMP_PWD}" --connect-expired-password --ssl-mode=DISABLED <<EOF || {
echo "密码修改失败"
return 1
}
ALTER USER 'root'@'localhost' IDENTIFIED BY '${MYSQL_PWD}';
FLUSH PRIVILEGES;
EOF

# 安全配置
echo "执行安全配置..."
mysql -u root -p"${MYSQL_PWD}" <<EOF
DELETE FROM mysql.user WHERE User='';
DROP DATABASE IF EXISTS test;
CREATE USER 'root'@'%' IDENTIFIED BY '${MYSQL_PWD}';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EOF
}

# 安装Node.js
install_node() {
echo "#### 正在安装Node.js ####"
curl -sL https://rpm.nodesource.com/setup_16.x | sudo bash - || {
echo "NodeSource仓库配置失败"
return 1
}

sudo yum install nodejs -y || {
echo "Node.js安装失败"
return 1
}

echo "Node版本:$(node -v)"
}

# 安装JDK
install_jdk() {
echo "#### 正在安装JDK ####"
JDK_RPM="jdk-17.0.12_linux-x64_bin.rpm"

# 下载JDK(添加license同意header)
wget --no-check-certificate \
--header "Cookie: oraclelicense=accept-securebackup-cookie" \
https://download.oracle.com/java/17/archive/${JDK_RPM} || {
echo "JDK下载失败"
return 1
}

# 安装JDK
sudo rpm -ivh ${JDK_RPM} || {
echo "JDK安装失败"
return 1
}

echo "Java版本:$(java -version 2>&1 | head -n1)"
}

# 主执行流程
main() {
# 检查操作系统
[ -f /etc/redhat-release ] || { echo "仅支持CentOS/RHEL系统"; exit 1; }

# 安装依赖组件
sudo yum install -y wget curl

install_mysql
install_node
install_jdk

echo "所有组件安装完成!"
echo "MySQL root密码: ${MYSQL_PWD}"
echo "详细日志请查看:${LOG_FILE}"
}

main

自动化构建
http://example.com/2025/03/18/自动化构建/
作者
Jack Asher
发布于
2025年3月18日
许可协议