Conn_id не определен в Airflow JenkinsJobTriggerOperator

Я пытаюсь запустить работу в Jenkins с помощью метки Airflow. Я пробовал следующее,

dag = DAG("test_jenkins", default_args=default_args, schedule_interval=None)

job_trigger = JenkinsJobTriggerOperator(
    dag=dag,
    task_id="trigger_job",
    job_name="generate-code-trigger",
    jenkins_connection_id="http://localhost:8080/"  # The connection must be configured first
)

def grab_artifact_from_jenkins(**context):
hook = JenkinsHook("http://localhost:8080/")
jenkins_server = hook.get_jenkins_server()
url = context['task_instance'].xcom_pull(task_ids='trigger_job')
url = url + "code-generator/pom.xml"  # Or any other artifact name
request = Request(url)
response = jenkins_server.jenkins_open(request)
return response  # We store the artifact content in a xcom variable for later use

artifact_grabber = PythonOperator(
    task_id='artifact_grabber',
    provide_context=True,
    python_callable=grab_artifact_from_jenkins,
    dag=dag)

artifact_grabber.set_upstream(job_trigger)

Но это дает мне ошибку,

The conn_id `http://localhost:8080/` isn't defined

Я впервые использую JenkinsJobTriggerOperator. Также нет никаких полезных примеров. Как мне избежать этой ошибки.


person codebot    schedule 08.03.2020    source источник
comment
Вы уже установили детали соединения в админке - ›соединения в веб-интерфейсе воздушного потока?   -  person alexgids    schedule 09.03.2020


Ответы (2)


У вас возникло недопонимание относительно jenkins_connection_id.

jenkins_connection_id="http://localhost:8080/"  # The connection must be configured first

Сначала вам нужно создать правильное соединение с вашим сервером jenkins через пользовательский интерфейс воздушного потока. То, что у вас есть прямо сейчас, - это пример строки. Это должно выглядеть примерно так:

jenkins_connection_id="the_connection_id_name_which_you_gave_through_the_ui" 

Подробности можно прочитать здесь: https://airflow.apache.org/docs/stable/howto/connection/index.html

person PeterRing    schedule 09.03.2020

Я пробовал что-то подобное, и он работает с оператором bash.

jenkins_iuser_id = Variable.get("jenkins_user_name")
jenkins_pswd = Variable.get("api_token")

cmand_to_exec ='curl -X POST --user ' + jenkins_iuser_id + ':' + jenkins_pswd + ' http://< IP >:8080/job/<JOBNAME>/build '
trigger_cleanup = BashOperator(
        task_id='trigger_jenkins_cleanup_jobs',
        bash_command=cmand_to_exec,
        dag=dag)
trigger_cleanup
person kylasam    schedule 07.12.2020
comment
++ Пожалуйста, убедитесь, что ваше входящее правило для целевого сервера разрешает весь трафик! - person kylasam; 26.04.2021