python使用python-jenkins模块操作jenkins

python-jenkins插件

python中有python-jenkins插件,用来实现python和jenkins交付。

使用如下命令,即可安装该模块

pip3 install python-jenkins

该模块的文档,可以参见: http://python-jenkins.readthedocs.org/en/latest/

创建jenkins token

为了方便后续python连接jenkins,需要在jenkins中,使用某一用户,创建token

首先进入到自己的用户设置,点击右上角自己的用户名,然后从下拉菜单中,选择设置

image-20220504121659569

在api-token选项中,创建一个新的token即可。

image-20220504122130051

需要注意,token一旦创建之后,需要自己进行记录,后续该页面刷新之后,就看不到了

python操作jenkins

连接jenkins

python中,通过jenkins这个模块,来连接jenkins。代码如下:

server = jenkins.Jenkins(jenkins_server, username=user_id, password=api_token)

其中:

  • jenkins_server:jenkins的网站链接
  • username:用户名
  • password: 该用户的token

如果jenkins的网站是https的方式,那么连接过程中会有证书认证。如果jenkins的证书是自签发的,那么是可能连接失败的。

可以在连接jenkins之前,加入如下代码,不认证证书

import os
os.environ['PYTHONHTTPSVERIFY'] = '0'

连接成功后,就可以通过server这个类实例,来对jenkins进行操作了。

job操作

job的操作,主要使用以下方法

方法 参数 说明
get_job_info job_name 获取指定job的信息
build_job job_name,parameters 构建指定的job,并且传入参数。参数是一个字典
get_build_info job_name,number 获取指定job的指定构建number的构建信息
get_build_console_output job_name, numer 获取指定job的指定构建number的console打印信息

获取job信息

获取job的信息,使用get_job_info方法。该方法会返回一个字典,该字典中,存储了该job的相关所有信息。

信息如下所示:

{
  '_class': 'org.jenkinsci.plugins.workflow.job.WorkflowJob',
  'actions': [
    {},
    {},
    {},
    {},
    {},
    {},
    {},
    {},
    {'_class': 'org.jenkinsci.plugins.displayurlapi.actions.JobDisplayAction'},
    {},
    {},
    {'_class': 'com.cloudbees.plugins.credentials.ViewCredentialsAction'}
  ],
  'buildable': True,
  'builds': [
    {
      '_class': 'org.jenkinsci.plugins.workflow.job.WorkflowRun',
      'number': 1333,
      'url': 'https://jenkins.corp.xxx.com/job/test_job/1333/'
    },
    {
      '_class': 'org.jenkinsci.plugins.workflow.job.WorkflowRun',
      'number': 1332,
      'url': 'https://jenkins.corp.xxx.com/job/test_job/1332/'
    },
    {
      '_class': 'org.jenkinsci.plugins.workflow.job.WorkflowRun',
      'number': 1331,
      'url': 'https://jenkins.corp.xxx.com/job/test_job/1331/'
    },
    {
      '_class': 'org.jenkinsci.plugins.workflow.job.WorkflowRun',
      'number': 1330,
      'url': 'https://jenkins.corp.xxx.com/job/test_job/1330/'
    }
  ],
  'color': 'blue',
  'concurrentBuild': False,
  'description': 'test job',
  'displayName': 'test_job',
  'displayNameOrNull': None,
  'firstBuild': {
    '_class': 'org.jenkinsci.plugins.workflow.job.WorkflowRun',
    'number': 1324,
    'url': 'https://jenkins.corp.xxx.com/job/test_job/1324/'
  },
  'fullDisplayName': 'test_job',
  'fullName': 'test_job',
  'healthReport': [
    {
      'description': 'Build stability: No recent builds failed.',
      'iconClassName': 'icon-health-80plus',
      'iconUrl': 'health-80plus.png',
      'score': 100
    }
  ],
  'inQueue': False,
  'keepDependencies': False,
  'lastBuild': {
    '_class': 'org.jenkinsci.plugins.workflow.job.WorkflowRun',
    'number': 1333,
    'url': 'https://jenkins.corp.xxx.com/job/test_job/1333/'
  },
  'lastCompletedBuild': {
    '_class': 'org.jenkinsci.plugins.workflow.job.WorkflowRun',
    'number': 1333,
    'url': 'https://jenkins.corp.xxx.com/job/test_job/1333/'
  },
  'lastFailedBuild': None,
  'lastStableBuild': {
    '_class': 'org.jenkinsci.plugins.workflow.job.WorkflowRun',
    'number': 1333,
    'url': 'https://jenkins.corp.xxx.com/job/test_job/1333/'
  },
  'lastSuccessfulBuild': {
    '_class': 'org.jenkinsci.plugins.workflow.job.WorkflowRun',
    'number': 1333,
    'url': 'https://jenkins.corp.xxx.com/job/test_job/1333/'
  },
  'lastUnstableBuild': None,
  'lastUnsuccessfulBuild': None,
  'name': 'test_job',
  'nextBuildNumber': 1334,
  'property': [
    {'_class': 'hudson.plugins.jira.JiraProjectProperty'},
    {'_class': 'hudson.security.AuthorizationMatrixProperty'},
    {'_class': 'com.dabsquared.gitlabjenkins.connection.GitLabConnectionProperty'},
    {'_class': 'org.jenkinsci.plugins.gitlablogo.GitlabLogoProperty'},
    {'_class': 'com.sonyericsson.rebuild.RebuildSettings'},
    {
      '_class': 'org.jenkinsci.plugins.workflow.job.properties.DisableConcurrentBuildsJobProperty'
    },
    {'_class': 'jenkins.model.BuildDiscarderProperty'},
    {
      '_class': 'org.jenkinsci.plugins.workflow.job.properties.PipelineTriggersJobProperty'
    }
  ],
  'queueItem': None,
  'resumeBlocked': False,
  'url': 'https://jenkins.corp.xxx.com/job/test_job/'
}
  • builds:记录所有构建的信息。值是一个列表。每一个列表是一个字典,该字典有如下参数:
    • number:构建编号
    • url:该构建对应的url
  • color:构建的颜色。以字符串体现
    • blue:蓝色,表示构建成功
    • red:红色,表示构建失败
  • concurrentBuild:是否支持并发构建。False不支持,True支持
  • description:该job的描述信息
  • lastBuild:上一次构建的信息。是一个字典,该字典有如下参数:
    • number:构建编号
    • url:构建对应的url
  • lastFailedBuild:之前失败构建的信息
  • lastSuccessfulBuild:之前成功构建的信息
  • nextBuildNumber:下一次构建的编号
  • url:该job对应的url链接

构建job

构建job,使用build_job方法。其中job_name是必须参数,parameters是可选参数。

无参数的构建job

server.build_job(job_name)

带参数的构建job

param_dict = {
            "pkg_path": cur_dir,
            "backup_path": bak_path,
            "ftp_dir": ftp_path,
            "user": USER
            }
server.build_job(job_name, param_dict)

获取构建build的信息

通过 get_build_info 方法,可以获取到指定job,在指定构建编号下的构建信息

该方法会返回一个字典,该字典中,存储了该job的相关所有信息。

信息如下所示:

{
  '_class': 'org.jenkinsci.plugins.workflow.job.WorkflowRun',
  'actions': [
    {
      '_class': 'hudson.model.CauseAction',
      'causes': [
        {
          '_class': 'hudson.triggers.TimerTrigger$TimerTriggerCause',
          'shortDescription': 'Started by timer'
        }
      ]
    },
    {'_class': 'org.jenkinsci.plugins.workflow.libs.LibrariesAction'},
    {},
    {},
    {
      '_class': 'hudson.plugins.git.util.BuildData',
      'buildsByBranchName': {
        'origin/master': {
          '_class': 'hudson.plugins.git.util.Build',
          'buildNumber': 1279,
          'buildResult': None,
          'marked': {
            'SHA1': 'b9200ebf6faf5bad1cda1742b27a48d75918d55c',
            'branch': [{'SHA1': 'b9200ebf6faf5bad1cda1742b27a48d75918d55c', 'name': 'origin/master'}]
          },
          'revision': {
            'SHA1': 'b9200ebf6faf5bad1cda1742b27a48d75918d55c',
            'branch': [{'SHA1': 'b9200ebf6faf5bad1cda1742b27a48d75918d55c', 'name': 'origin/master'}]
          }
        },
        'refs/remotes/origin/master': {
          '_class': 'hudson.plugins.git.util.Build',
          'buildNumber': 1333,
          'buildResult': None,
          'marked': {
            'SHA1': 'b9200ebf6faf5bad1cda1742b27a48d75918d55c',
            'branch': [
              {
                'SHA1': 'b9200ebf6faf5bad1cda1742b27a48d75918d55c',
                'name': 'refs/remotes/origin/master'
              }
            ]
          },
          'revision': {
            'SHA1': 'b9200ebf6faf5bad1cda1742b27a48d75918d55c',
            'branch': [
              {
                'SHA1': 'b9200ebf6faf5bad1cda1742b27a48d75918d55c',
                'name': 'refs/remotes/origin/master'
              }
            ]
          }
        }
      },
      'lastBuiltRevision': {
        'SHA1': 'b9200ebf6faf5bad1cda1742b27a48d75918d55c',
        'branch': [
          {
            'SHA1': 'b9200ebf6faf5bad1cda1742b27a48d75918d55c',
            'name': 'refs/remotes/origin/master'
          }
        ]
      },
      'remoteUrls': ['git@git.corp.xxx.com:test_job.git'],
      'scmName': ''
    },
    {},
    {},
    {},
    {},
    {},
    {'_class': 'org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'},
    {
      '_class': 'org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction'
    },
    {},
    {'_class': 'org.jenkinsci.plugins.workflow.job.views.FlowGraphAction'},
    {},
    {},
    {},
    {}
  ],
  'artifacts': [],
  'building': False,
  'changeSets': [],
  'culprits': [],
  'description': None,
  'displayName': '#1333',
  'duration': 29771,
  'estimatedDuration': 25817,
  'executor': None,
  'fullDisplayName': 'test_job #1333',
  'id': '1333',
  'keepLog': False,
  'nextBuild': {
    'number': 1334,
    'url': 'https://jenkins.corp.xxx.com/job/test_job/1334/'
  },
  'number': 1333,
  'previousBuild': {
    'number': 1332,
    'url': 'https://jenkins.corp.xxx.com/job/test_job/1332/'
  },
  'queueId': 194926,
  'result': 'SUCCESS',
  'timestamp': 1651633320785,
  'url': 'https://jenkins.corp.xxx.com/job/test_job/1333/'
}
  • actions:job执行过程中的一些操作。是一个列表,从该列表中,还可以获取到git的操作信息
  • building:是否在构建中。True:该job在构建中,False:该job已经构建结束
  • displayName:构建的显示名称
  • duration:该构建的持续时间,单位是秒
  • id:构建编号
  • result:构建结果,字符串表示
    • SUCCESS:构建成功
    • FAILURE:构建失败
  • url:该构建的链接

获取构建build的打印信息

通过 get_build_console_output方法,可以获取到指定job在指定构建编号下的打印信息。

获取到信息之后,就可以使用脚本进行处理提取信息了。

其他操作

jenkins模块,还提供了其他的一些操作,如创建job,修改job配置,创建node等等。这些就不再介绍了,直接参考官方文档即可: https://python-jenkins.readthedocs.io/en/latest/api.html

此条目发表在python分类目录,贴了, 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。