Python Flask异步作业/任务提交给Cellery或Jenkins
我有一个烧瓶应用程序,我将任务提交给芹菜(工人)来执行它。这样我可以在提交后收回网页。如果我把任务交给Jenkins,我能达到同样的效果吗?我只是想了解一下,当我可以要求Jenkins通过Jenkins API安排/执行作业时,我为什么要使用芹菜?还是把我的网页拿回来。我的方法可能是错误的,但任何能够阐明这一点的人都会非常感激 主要目的是用户提交表单,而表单实际上是要执行的任务,点击submit task后,表单将从web上分离出来,重新加载表单。同时,任务在后台运行,芹菜可以有效地完成任务,但可以通过詹金斯完成Python Flask异步作业/任务提交给Cellery或Jenkins,python,jenkins,flask,celery,Python,Jenkins,Flask,Celery,我有一个烧瓶应用程序,我将任务提交给芹菜(工人)来执行它。这样我可以在提交后收回网页。如果我把任务交给Jenkins,我能达到同样的效果吗?我只是想了解一下,当我可以要求Jenkins通过Jenkins API安排/执行作业时,我为什么要使用芹菜?还是把我的网页拿回来。我的方法可能是错误的,但任何能够阐明这一点的人都会非常感激 主要目的是用户提交表单,而表单实际上是要执行的任务,点击submit task后,表单将从web上分离出来,重新加载表单。同时,任务在后台运行,芹菜可以有效地完成任务,但
>P> >芹菜与詹金斯之间的几点比较。
- 芹菜是专门为在后台运行资源密集型任务而设计和构建的,而jenkins是一个更通用的自动化工具
- jenkins是基于java构建的,因此本机集成是存在的,尽管插件是可用的,而Cellery是使用python构建的,因此您可以直接用python编写任务并将其发送给Cellery,或者从python调用shell任务
- 消息队列-同样,jenkins没有消息代理的内置支持,因此排队对您来说可能很困难。芹菜使用rabbitmq作为默认任务队列,这样您的任务就不会丢失
- 芹菜还提供简单的回调,所以当任务完成后,您可以运行一些函数
- 现在如果你问cpu消耗,芹菜一点也不重
当然,您可以在您选择的语言中实现类似的功能。如果您想更详细地了解这里发生了什么(特别是如何在运行时构建URI),那么只需使用
bash-x运行它即可configure@ArpitSolanki以什么方式?我们已经有詹金斯了。我见过芹菜占用大量cpu时间,而且它需要像redis或rabbitMQ这样的代理传输。问题是我能和詹金达成同样的目标吗?我个人更喜欢芹菜,但我被要求证明芹菜比詹金斯更合理。
#!/bin/bash
# Doing an HTTP job build request with Jenkins is a two-part deal.
#
# 1. Get a crumb using auth credentials
# 2. Use that crumb (along with auth credentials) to submit the job
#
# Reference:
# www.inanzzz.com/index.php/post/jnrg/running-jenkins-build-via-command-line
set -u
set -o pipefail
# -------------------------------------------------------------------------- #
# VARIABLE DEFINITION
# -------------------------------------------------------------------------- #
PATH=/usr/bin:/bin
readonly _srv="${JENKINS_SERVER:-x}"
readonly _job_path="${JENKINS_JOB_PATH:-x}"
readonly _token="${JENKINS_JOB_TOKEN:-x}"
readonly _u="${JENKINS_SERVICE_ACCOUNT:-x}"
readonly _p="${JENKINS_SERVICE_PASSWORD:-x}"
readonly _crumb_path='crumbIssuer/api/xml'
readonly _crumb_query='xpath=concat(//crumbRequestField,":",//crumb)'
readonly _uri1="https://${_srv}/${_crumb_path}?${_crumb_query}"
readonly _token_query="token=${_token}"
readonly _uri2="https://${_srv}/${_job_path}?${_token_query}"
readonly _output="$(mktemp)"
# -------------------------------------------------------------------------- #
# FUNCTIONS
# -------------------------------------------------------------------------- #
errout() {
local _msg="${0##*/} error: ${1}"
printf '%s\n' "${_msg}"
exit 1
}
cleanup() {
rm -f "${_output}"
}
audit_env() {
[ "${_srv}" == "x" ] || \
[ "${_job_path}" == "x" ] || \
[ "${_token}" == "x" ] || \
[ "${_u}" == "x" ] || \
[ "${_p}" == "x" ]
if [ ${?} -eq 0 ] ; then
errout "Missing ENV. Hint: grep -Eo 'JENKINS_[A-Z_]+' ${0}"
fi
}
req_crumb() {
curl \
--silent \
--show-error \
--user "${_u}:${_p}" \
--request 'GET' \
--output "${_output}" \
"${_uri1}"
if [ ${?} -ne 0 ] ; then
errout 'Problem with HTTP crumb request'
fi
}
get_value_into_crumb_var() {
local _s
read -r _s < "${_output}" || [ -n "${_s}" ]
if [ ${?} -ne 0 ] ; then
errout "Problem reading crumb from ${_output}"
fi
readonly _crumb="${_s}"
}
req_job_launch() {
curl \
--silent \
--show-error \
--user "${_u}:${_p}" \
--header "${_crumb}" \
--request 'POST' \
"${_uri2}"
if [ ${?} -ne 0 ] ; then
errout 'Problem with HTTP job run request'
fi
}
# -------------------------------------------------------------------------- #
# CLEANUP AND SIGNAL HANDLING
# -------------------------------------------------------------------------- #
trap 'cleanup' EXIT
trap 'exit 2' HUP INT QUIT TERM
# -------------------------------------------------------------------------- #
# MAIN LOGIC
# -------------------------------------------------------------------------- #
audit_env
req_crumb
get_value_into_crumb_var
req_job_launch
exit 0
# automatically generated in build config under "Use the
# following to trigger build job remotely"
export JENKINS_JOB_PATH='job/Folder/job/aa/buildWithParameters'
# the "Authentication Token" set by you in build config
export JENKINS_JOB_TOKEN='xxxyyyzzzaaabbbccc'
# hostname of your build server
export JENKINS_SERVER='my-ci-system.some.org'
# account and password that are authorized to call webhook;
# if you're using "Project-based Matrix Authorization Strategy",
# this account will need READ for Overall, Job, and Run authz
export JENKINS_SERVICE_ACCOUNT='user'
export JENKINS_SERVICE_PASSWORD='secret'