问题描述
正在使用Promoted Builds插件,并希望在输出中的某个值超过给定阈值(例如大于1.00)时,将其自由样式作业推广为金星。
以下是来自回测作业的示例输出:
Pass Profit Total trades Profit factor Expected Payoff Drawdown $ Drawdown % 1 622.71 76 1.38 8.19 526.77 4.94 10 301.09 36 1.38 8.36 526.77 4.93 14 240.96 62 1.18 3.89 589.60 5.60
用户的目标是在标题行后的第一行中,当Profit factor
列的值超过1.00
时,将构建推广为金星,当值低于1.00
时,将构建推广为银星。
用户想知道如何实现这个目标。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
您可以使用Promoted Builds插件的Job DSL功能来实现此目标。以下是步骤:
1. 在Jenkins中安装Promoted Builds插件和Job DSL插件。
2. 在您的自由样式作业中,使用Job DSL语法定义推广条件。
3. 在Job DSL脚本中,使用Groovy脚本来解析输出并检查Profit factor
列的值。
4. 根据值的大小,设置推广条件为金星或银星。
以下是一个示例Job DSL脚本:
job('your_freestyle_job') {
// 定义其他作业配置
publishers {
promotedBuilds {
conditions {
groovyScript {
script("""
def output = '''
Pass Profit Total trades Profit factor Expected Payoff Drawdown $ Drawdown % 1 622.71 76 1.38 8.19 526.77 4.94 10 301.09 36 1.38 8.36 526.77 4.93 14 240.96 62 1.18 3.89 589.60 5.60
'''
def lines = output.split('\\n')
def firstLine = lines[1].trim()
def profitFactor = firstLine.split()[3].toDouble()
if (profitFactor > 1.00) {
return 'GOLD'
} else {
return 'SILVER'
}
""")
}
}
}
}
}
在上面的示例中,我们使用Job DSL语法定义了一个自由样式作业,并在promotedBuilds
部分中定义了推广条件。在groovyScript
条件中,我们使用Groovy脚本来解析输出并检查Profit factor
列的值。根据值的大小,我们设置推广条件为金星或银星。
请注意,您需要根据实际情况修改脚本中的输出和解析逻辑。
方案2
如果您不熟悉Job DSL或Groovy脚本,您可以考虑使用其他插件或工具来实现此目标。
另一种方法是使用其他插件或工具来解析输出并设置推广条件。您可以使用一些文本处理工具(如awk、sed或grep)来解析输出,并根据条件设置推广条件。
以下是一个示例bash脚本,可以使用awk来解析输出并设置推广条件:
#!/bin/bash
output=$(cat output.txt) # 将输出保存到变量中,或者将输出保存到文件中并将文件路径替换为实际路径
firstLine=$(echo "$output" | awk 'NR==2 {print $0}') # 获取第一行
profitFactor=$(echo "$firstLine" | awk '{print $4}') # 获取Profit factor列的值
if (( $(echo "$profitFactor > 1.00" | bc -l) )); then
echo "Set promotion to GOLD"
else
echo "Set promotion to SILVER"
fi
在这个示例中,我们首先将输出保存到变量output
中(或者将输出保存到文件中并将文件路径替换为实际路径)。然后,我们使用awk命令来获取第一行和Profit factor列的值。最后,我们使用bc命令来比较值和阈值,并根据结果设置推广条件。
请注意,您需要根据实际情况修改脚本中的输出和解析逻辑。