【问题标题】:How do I use the Jenkins API in Python for pre and post build steps?如何在 Python 中使用 Jenkins API 进行构建前和构建后步骤?
【发布时间】:2015-04-30 05:47:20
【问题描述】:

我正在使用 Jenkins Python API,并希望自动执行构建前和构建后的步骤。我怎样才能做到这一点?

我能够连接到我的 Jenkins 服务器并列出所有构建和插件,但是如何使用 Python Jenkins API 自动执行构建前和构建后步骤?

【问题讨论】:

    标签: python api jenkins


    【解决方案1】:



    您说您想要'自动化构建前后的步骤'
    我假设您的意思是要自动将构建前和构建后步骤添加到现有作业?

    为此,我通常必须查看作业的 config.xml,可从以下 URL 获得: http://<IP_of_jenkins_instance>:8080/job/<JOB_NAME>/config.xml

    然后我找出我需要在哪里插入前/后构建步骤,相应地拆分它并上传新的作业配置。

    例如,下面的示例将插入和“执行 Shell”构建步骤(作为第一个构建步骤!),它会打印“hello”。

    import requests
    
    
    from jenkinsapi.jenkins import Jenkins
    from jenkinsapi.utils.requester import Requester
    
    
    USERNAME, PASSWORD = '<USERNAME>', '<PASSWORD>'
    JK = 'http://<IP of jenkins instance>:8080'
    
    
    def jenkins_instance(jenkins):
    
        requests.packages.urllib3.disable_warnings()
        return Jenkins(jenkins, requester=Requester(USERNAME, PASSWORD, baseurl=jenkins, ssl_verify=False, timeout=20))
    
    
    def _get_config_given_job(server, job_name):
    
        config = server.get_job(job_name).get_config().encode('utf-8')
        return config
    
    
    def _upload_new_job_config(job_name, config):
    
        url = '{0}/job/{1}/config.xml'.format(JK, job_name)
        r = requests.post(url, data=config, auth=(USERNAME, PASSWORD))
        if str(r.status_code).startswith('2'):
            print 'Successfully updated config for:' + job_name
    
    
    def main():
    
        job_name = '<YOUR JOB NAME>'
        server = jenkins_instance(JK)
        config = _get_config_given_job(server, job_name)
        shell_build_step = '<hudson.tasks.Shell><command>echo hello</command></hudson.tasks.Shell>'
        new_config = '{0}{1}{2}{3}'.format(
            config.split('<builders>')[0],
            '<builders>',
            shell_build_step,
            config.split('<builders>')[1]
        )
        _upload_new_job_config(job_name, new_config)
    
    
    if __name__ == '__main__':
        main()
    
    

    【讨论】:

      猜你喜欢
      • 2022-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-27
      • 2016-01-15
      相关资源
      最近更新 更多