【问题标题】:How to pass parameters to Jenkins' API with Python and api4jenkins?如何使用 Python 和 api4jenkins 将参数传递给 Jenkins 的 API?
【发布时间】:2022-07-27 23:20:47
【问题描述】:

我在使用 Python 3.10.2 和 Ubuntu LTS 20.4 和 Jenkins 2.361 和 api4jenkins 时遇到了 Jenkins 的 API 问题>1.11 作为 API 的包装器。

我的主要问题是将参数传递给任务。我能够启动任务,并且我正在按照examples 指示传递参数,但是任务的执行不打印参数。

Jenkins 为每个用户都有一个全局安全配置,这是为启动任务的用户配置的:

我的任务叫Prueba4,任务安全配置是这样的:

现在,我只有参数client

我还启用了脚本执行:

唯一的步骤就是这个shell命令:

echo Hello
echo $USER
echo $cliente

使用 Python 我正在这样做:

from api4jenkins import Jenkins
j = Jenkins('http://localhost:8080/', auth=('my_user', 'mypass'))

j.build_job('Prueba4', arg1="my cliente", token="my_token", delay='1sec')

所以找不到echo $client这行没有显示我传递的参数的问题。将打印添加到 api4jenkins 我能够确定它通过了这个 kwards:

method: POST
url +: http://localhost:8080/job/Prueba4/buildWithParameters
kwards: {'params': {'arg1': 'my_client'}, 'token': 'my_token', 'delay': '1sec'}, 'headers': {'Jenkins-Crumb': '81bec758701d0783a68f3ad4050e42c647953834f1c552120b194d6e8b989f52'}} 

我不知道我做错了什么。这是一个从不打印参数的python开始的执行:

我尝试使用 CURL 和 Python 的 Request 库,但我还不能向它们发出请求。

希望有人可以帮助我。谢谢

【问题讨论】:

    标签: python jenkins jenkins-api api4jenkins


    【解决方案1】:

    好的,我忘记在 api4jenkins 的 Github 页面中的问题页面中搜索,在那里我找到了 this issue。 Sinutok 在 2021 年 9 月 7 日评论了解决方案:

    对不起,浪费了你的时间....得到它的脸,我会发布我现在正在运行的 代码为例,如果有人需要它

    jenkins_server = api4jenkins.Jenkins('https://myjenkins.example.com:8443', auth=('someuser','the_api_token'),verify=False)
    user = jenkins_server.me.exists()
    version = jenkins_server.version
    print(str(user))
    print(str(version))
    job = jenkins_server.get_job("API-TEST - JOB")
    print(job)
    lauf = job.build(TEXT1="C",TEXT2="lalala")
    print(lauf)
    
    Output:
    True
    2.277.4
    <FreeStyleProject: https://myjenkins.example.com:8443/job/API-TEST%20-%20JOB/>
    <QueueItem: https://myjenkins.example.com:8443/queue/item/1149/>
    
    and the jenkis job runs correctly with the Parameters: "C" (of the dropdown-box) and "lalala" (of the text-in-field)
    

    所以我猜想使用参数你必须有 Job/Task 对象并用它构建它,而不是直接使用 Jenkins 对象,因为它不读取它们(至少我尝试的方式是这样)。

    【讨论】:

      猜你喜欢
      • 2013-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-29
      • 1970-01-01
      • 2021-08-23
      相关资源
      最近更新 更多