Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Flask异步作业/任务提交给Cellery或Jenkins_Python_Jenkins_Flask_Celery - Fatal编程技术网

Python Flask异步作业/任务提交给Cellery或Jenkins

Python Flask异步作业/任务提交给Cellery或Jenkins,python,jenkins,flask,celery,Python,Jenkins,Flask,Celery,我有一个烧瓶应用程序,我将任务提交给芹菜(工人)来执行它。这样我可以在提交后收回网页。如果我把任务交给Jenkins,我能达到同样的效果吗?我只是想了解一下,当我可以要求Jenkins通过Jenkins API安排/执行作业时,我为什么要使用芹菜?还是把我的网页拿回来。我的方法可能是错误的,但任何能够阐明这一点的人都会非常感激 主要目的是用户提交表单,而表单实际上是要执行的任务,点击submit task后,表单将从web上分离出来,重新加载表单。同时,任务在后台运行,芹菜可以有效地完成任务,但

我有一个烧瓶应用程序,我将任务提交给芹菜(工人)来执行它。这样我可以在提交后收回网页。如果我把任务交给Jenkins,我能达到同样的效果吗?我只是想了解一下,当我可以要求Jenkins通过Jenkins API安排/执行作业时,我为什么要使用芹菜?还是把我的网页拿回来。我的方法可能是错误的,但任何能够阐明这一点的人都会非常感激

主要目的是用户提交表单,而表单实际上是要执行的任务,点击submit task后,表单将从web上分离出来,重新加载表单。同时,任务在后台运行,芹菜可以有效地完成任务,但可以通过詹金斯完成


>P> >芹菜与詹金斯之间的几点比较。

  • 芹菜是专门为在后台运行资源密集型任务而设计和构建的,而jenkins是一个更通用的自动化工具

  • jenkins是基于java构建的,因此本机集成是存在的,尽管插件是可用的,而Cellery是使用python构建的,因此您可以直接用python编写任务并将其发送给Cellery,或者从python调用shell任务

  • 消息队列-同样,jenkins没有消息代理的内置支持,因此排队对您来说可能很困难。芹菜使用rabbitmq作为默认任务队列,这样您的任务就不会丢失

  • 芹菜还提供简单的回调,所以当任务完成后,您可以运行一些函数

  • 现在如果你问cpu消耗,芹菜一点也不重
@Macintosh_89-为了子孙后代,添加我(非常晚)的答案

每个人都说HTTP,包括Jenkins,所以您的架构建议是可行的。(除非芹菜中有一些特定的功能使其成为您的成功解决方案,否则您没有理由无法通过Jenkins实现相同的功能。)我建议使用Jenkins的“远程触发构建”选项,它为您提供了一个webhook

向该webhook发出适当的HTTP请求将触发构建作业的运行。(另请注意:请确保将“身份验证令牌”设置为长而强的值。)

作为奖励,我还包括了一个bash脚本,我编写该脚本是为了测试对启用了“远程触发构建”的Jenkins作业的调用


当然,您可以在您选择的语言中实现类似的功能。如果您想更详细地了解这里发生了什么(特别是如何在运行时构建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'