【问题标题】:Executing python script using Jenkins parameterized pipeline使用 Jenkins 参数化管道执行 python 脚本
【发布时间】:2021-05-13 09:26:53
【问题描述】:

我已经设置了一个 Jenkins 参数化作业来使用 Jenkins 中的执行 shell 功能来执行 python 脚本。该作业具有以下参数:

user-name:字符串,order_area_name:逗号分隔的字符串,country_name:字符串,country_code:字符串,等等……

我的用例是拆分 order_area_name 并按顺序为每个 order_area_name 执行 python 脚本。所以,我写了一个看起来像这样的脚本:

#!/bin/bash
export PYTHONHASHSEED=0
empty_string=""
parameters_list=""
IFS=","

#Checking every parameter if it is present or not
if [ "$user_name" != "$empty_string" ]
then
    parameters_list=$parameters_list" --user "$user_name
fi
if [ "$country_code" != "$empty_string" ]
then
    parameters_list=$parameters_list" --country_code "$country_code
fi
if [ "$country_category" != "$empty_string" ]
then
    parameters_list=$parameters_list" --country_category "$country_category
fi

parameters_list=$parameters_list" --aws_access_key_id "$aws_access_key_id
parameters_list=$parameters_list" --aws_secret_access_key "$aws_secret_access_key


##Checking if the parameter is present then splitting the string and storing it into array
##Then for each order_area_name executing the python script in sequential manner
if [ "$order_area_names" != "$empty_string" ]
then
    read -r -a order_area_name_array <<< "$order_area_names"
    for order_area in "${order_area_name_array[@]}";
    do      
        final_list=$parameters_list" --order_area_name "$order_area
        echo $final_list
        python3 ./main.py ${final_list}
    done
fi

exit

我无法将 final_list 的值传递给 python 脚本,因此 Jenkins 作业失败。如果我回显 final_list,我会看到这些值已正确初始化:

--user jay@abc.com --mqs_level Q2 --num_parallel_pipelines 13 --sns_topic 主题名 --ramp_up_time 45 --max_duration_for_task 30 --batch_size 35 --lead_store_db_schema schema --airflow_k8s_web_server_pod_name airflow-web-xyz --aws_access_key_id 12345678 --aws_secret_access_key 12345678 --order_area_name 伦敦

错误看起来像这样:

main.py:错误:需要以下参数:--user、--sns_topic、--aws_access_key_id、--aws_secret_access_key 构建步骤“执行 shell”将构建标记为失败 完成:失败

我在很多地方都搜索过这个,但没有得到任何具体的答案。谁能帮我解决这个问题?

【问题讨论】:

  • 阅读 stackoverflow.com/a/44055875/9072753 并研究 bash 数组。在 shell 中研究引用并使用shellcheck.net检查您的脚本
  • @KamilCuk 抱歉,回复稍有延迟,但您的 cmets 确实帮助了我。我从你提到的链接中找到了答案,我使用了类似的东西:echo $command | bash 并且它有效。
  • echo $final_list | bash 哎呀,太可怕了,和 eval 一样糟糕。使用 bash 数组 - cmd=(something -param); "${cmd[@]}"
  • 好的,我试试这个,谢谢你的建议

标签: python shell jenkins


【解决方案1】:

而不是像这样写我的命令:

python3 ./main.py ${final_list}

我用过这个,效果很好:

echo $final_list | bash

“final_list”变量有需要执行的命令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多