Step5-rpm任务执行
# 1. 源码分段解读与注释
Task trpm = task "$target-rpm"(dependsOn: ["${target}-srpm"],
description: "Building RPM for $target artifacts",
group: PACKAGES_GROUP) doLast {
// 如果目标rpm文件已存在,直接退出,避免重复构建
if (new File(config.bigtop.components[target].targetrpm)?.exists()) {
println "\tNothing to do. Exiting..."
return
}
// 1. 变量初始化,主控本次 rpm 包构建的核心参数
def final BIGTOP_BASE_VERSION = "${config.bigtop.base_version}"
def final PKG_NAME_SUFFIX = config.bigtop.components[target].rpm_pkg_suffix
def RPM_PKG_NAME_SUFFIX = PKG_NAME_SUFFIX
def GRADLE_PKG_NAME_SUFFIX = PKG_NAME_SUFFIX
// 如果没显式指定后缀,防止出现 null 拼接
if (!project.hasProperty("pkgSuffix") || !PKG_NAME_SUFFIX) {
RPM_PKG_NAME_SUFFIX = "%{nil}"
GRADLE_PKG_NAME_SUFFIX = ""
}
// 构建版本戳,从环境变量或配置自动切换
def final BIGTOP_BUILD_STAMP = System.getenv('BIGTOP_BUILD_STAMP') ?:
config.bigtop.components[target].version.release
// 常用路径变量
def final PKG_BUILD_DIR = config.bigtop.components[target].builddir
def final NAME = config.bigtop.components[target].name
def final PKG_NAME = config.bigtop.components[target].pkg
def final PKG_OUTPUT_DIR = config.bigtop.components[target].outputdir
def final PKG_VERSION = config.bigtop.components[target].version.pkg
def final BASE_VERSION = config.bigtop.components[target].version.base
def final HADOOP_VERSION = config.bigtop.components["hadoop"].version.pkg
// 2. 拼接发行版后缀(如 .el8),用于兼容不同系统的 rpm 包
def RELEASE_DIST = "rpmbuild --eval '%{?dist}' 2>/dev/null".execute().text.trim().replaceAll("'", '')
// 拼接输入的 srpm 路径
def SRCRPM = "$PKG_OUTPUT_DIR/${PKG_NAME}${GRADLE_PKG_NAME_SUFFIX}-${PKG_VERSION}-$BIGTOP_BUILD_STAMP${RELEASE_DIST}.src.rpm"
// 3. Maven集成相关参数
def final DO_MAVEN_DEPLOY = project.findProperty('doMavenDeploy') == 'true'
def final MAVEN_DEPLOY_SOURCE = project.findProperty('mavenDeploySource') == 'true'
def final MAVEN_REPO_ID = project.hasProperty('mavenRepoId') ? project.property('mavenRepoId') : 'default'
def final MAVEN_REPO_URI = project.hasProperty('mavenRepoUri') ? project.property('mavenRepoUri') : null
// 4. 父级目录,支持不同环境下产物隔离
def final PARENT_DIR = project.hasProperty("parentDir") ? project.property('parentDir') : "%{nil}"
def FULL_PARENT_DIR = "${PARENT_DIR}"
if (PARENT_DIR != "%{nil}") {
FULL_PARENT_DIR = "${PARENT_DIR}/${BIGTOP_BASE_VERSION}"
}
// 5. 组装 rpmbuild 命令参数
def command = [
'--define', "_topdir $PKG_BUILD_DIR/rpm/",
'--define', "${NAME}_base_version $BASE_VERSION",
'--define', "hadoop_version ${HADOOP_VERSION}",
'--define', "${NAME}_version ${PKG_VERSION}",
'--define', "${NAME}_release ${BIGTOP_BUILD_STAMP}%{?dist}",
'--rebuild', SRCRPM,
'--define', "do_maven_deploy ${DO_MAVEN_DEPLOY}",
'--define', "maven_deploy_source ${MAVEN_DEPLOY_SOURCE}",
"--define", "parent_dir ${FULL_PARENT_DIR}",
"--define", "bigtop_base_version ${BIGTOP_BASE_VERSION}",
"--define", "pkg_name_suffix ${RPM_PKG_NAME_SUFFIX}",
]
// maven私服集成可选项
if (MAVEN_REPO_URI != null) {
command.addAll('--define', "maven_repo_uri ${MAVEN_REPO_URI}")
command.addAll('--define', "maven_repo_id ${MAVEN_REPO_ID}")
}
// 6. 执行rpm构建
exec {
workingDir BASE_DIR
executable 'rpmbuild'
environment QA_RPATHS: 0x0002
args command
}
// 7. 拷贝产物到输出目录(归档所有新生成的rpm文件)
copy {
from fileTree("$PKG_BUILD_DIR/rpm/RPMS") {
include '**/*'
}
into PKG_OUTPUT_DIR
}
// 8. 打标记文件,供下游自动检测rpm产物
touchTargetFile(config.bigtop.components[target].targetrpm)
}
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
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
# 2. 日志追踪与实际参数
任务执行日志(典型场景):
实际命令和参数全部在日志有回显,可以用表格做映射:
参数名 | 日志实际值 | 含义 |
---|---|---|
_topdir | /opt/modules/bigtop/build/redis/rpm/ | rpm构建根目录 |
redis_base_version | 7.4.0 | 组件基础版本 |
hadoop_version | 3.3.4 | hadoop依赖版本 |
redis_version | 7.4.0 | 组件主版本 |
redis_release | 1%{?dist} | release后缀 |
do_maven_deploy | false | maven部署 |
maven_deploy_source | false | 部署源码 |
parent_dir | /usr/bigtop/3.2.0 | 父级归档目录 |
bigtop_base_version | 3.2.0 | bigtop主版本 |
pkg_name_suffix | _3_2_0 | 包名后缀 |
# 3. 还原 rpmbuild 实际执行命令
rpmbuild \
--define "_topdir /opt/modules/bigtop/build/redis/rpm/" \
--define "redis_base_version 7.4.0" \
--define "hadoop_version 3.3.4" \
--define "redis_version 7.4.0" \
--define "redis_release 1%{?dist}" \
--rebuild /opt/modules/bigtop/output/redis/redis_3_2_0-7.4.0-1.el8.src.rpm \
--define "do_maven_deploy false" \
--define "maven_deploy_source false" \
--define "parent_dir /usr/bigtop/3.2.0" \
--define "bigtop_base_version 3.2.0" \
--define "pkg_name_suffix _3_2_0"
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 4. 原始日志
Starting process 'command 'rpmbuild''. Working directory: /opt/modules/bigtop Command: rpmbuild --define
_topdir /opt/modules/bigtop/build/redis/rpm/ --define redis_base_version 7.4.0 --define hadoop_version 3.3.4 --define redis_version 7.4.0 --define redis_release 1%{?dist} --
rebuild /opt/modules/bigtop/output/redis/redis_3_2_0-7.4.0-1.el8.src.rpm --define do_maven_deploy false --define maven_deploy_source false --define parent_dir /usr/bigtop/3.
2.0 --define bigtop_base_version 3.2.0 --define pkg_name_suffix _3_2_0
07:45:49.418 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Environment for process 'command 'rpmbuild'': {PATH=/root/.nvm/versions/node/v12.13.0/bin:/opt/enhance_e
nv/miniconda3/bin:/opt/enhance_env/miniconda3/condabin:/usr/local/R-4.4.2/bin:/opt/modules/apache-maven-3.8.4/bin:/usr/lib64/ccache:/usr/local/sbin:/usr/local/bin:/usr/sbin:
/usr/bin:/sbin:/bin:/opt/modules/gradle-5.6.4/bin:/opt/modules/apache-ant-1.10.12/bin:/opt/modules/apache-ivy-2.5.0/bin:/opt/modules/jdk1.8.0_202/bin, HISTCONTROL=ignoredups
, CONDA_DEFAULT_ENV=base, CONDA_EXE=/opt/enhance_env/miniconda3/bin/conda, HISTSIZE=1000, JAVA_HOME=/opt/modules/jdk1.8.0_202, IMPALA_HOME=/opt/modules/bigtop/build/impala/r
pm/BUILD/impala-4.4.1, BASH_FUNC_which%%=() { ( alias;
eval ${which_declare} ) | /usr/bin/which --tty-only --read-alias --read-functions --show-tilde --show-dot $@
}, CONDA_PYTHON_EXE=/opt/enhance_env/miniconda3/bin/python, TERM=xterm, LANG=C.UTF-8, GRADLE_HOME=/opt/modules/gradle-5.6.4, CONDA_PREFIX=/opt/enhance_env/miniconda3, ANT_HO
ME=/opt/modules/apache-ant-1.10.12, MAVEN_HOME=/opt/modules/apache-maven-3.8.4, MAIL=/var/spool/mail/root, NVM_INC=/root/.nvm/versions/node/v12.13.0/include/node, _CE_M=, wh
ich_declare=declare -f, LOGNAME=root, NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node, PWD=/opt/modules/bigtop, CONDA_SHLVL=1, NVM_CD_FLAGS=, NVM_DIR=/root/.nvm, LE
SSOPEN=||/usr/bin/lesspipe.sh %s, R_HOME=/usr/local/R-4.4.2, OLDPWD=/opt/modules/gradle-5.6.4, USER=root, _CE_CONDA=, HOSTNAME=rocky8, DEBUGINFOD_URLS=https://debuginfod.cen
tos.org/ , CONDA_PROMPT_MODIFIER=(base) , IVY_HOME=/opt/modules/apache-ivy-2.5.0, QA_RPATHS=2, NVM_BIN=/root/.nvm/versions/node/v12.13.0/bin, HOME=/root, SHLVL=1}
07:45:49.418 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: STARTING
07:45:49.418 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Waiting until process started: command 'rpmbuild'.
07:45:49.422 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: STARTED
07:45:49.422 [INFO] [org.gradle.process.internal.DefaultExecHandle] Successfully started process 'command 'rpmbuild''
07:45:49.422 [DEBUG] [org.gradle.process.internal.ExecHandleRunner] waiting until streams are handled...
07:45:49.446 [QUIET] [system.out] Installing /opt/modules/bigtop/output/redis/redis_3_2_0-7.4.0-1.el8.src.rpm
07:45:49.446 [QUIET] [system.out] Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.B8k8DN
07:45:49.447 [ERROR] [system.err] + umask 022
07:45:49.447 [ERROR] [system.err] + cd /opt/modules/bigtop/build/redis/rpm//BUILD
07:45:49.447 [ERROR] [system.err] + cd /opt/modules/bigtop/build/redis/rpm/BUILD
07:45:49.447 [ERROR] [system.err] + rm -rf redis-7.4.0
07:45:49.449 [ERROR] [system.err] + /usr/bin/gzip -dc /opt/modules/bigtop/build/redis/rpm/SOURCES/7.4.0.tar.gz
07:45:49.450 [ERROR] [system.err] + /usr/bin/tar -xvvof -
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
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
- 01
- bigtop-select 打包缺 compat 报错修复 deb07-16
- 02
- bigtop-select 打包缺 control 文件报错修复 deb07-16
- 03
- 首次编译-环境初始化 必装07-16