【问题标题】:Pylint integration with Jenkins build running on dynamic kubernetes pods as agentsPylint 与 Jenkins 的集成构建在作为代理的动态 kubernetes pod 上运行
【发布时间】:2021-10-27 10:14:47
【问题描述】:

我们在 Google Kubernetes Engine 上有一个 Jenkins 设置,其中动态 kubernetes pod 用作构建代理。我想将 Pylint 集成为构建步骤。在 kubernetes pod 上运行的 Python 版本是 2.7.16。知道如何安装 Pylint 并将其集成到 Jenkins 构建中吗?

编辑:

Jenkins 在 Google Kubernetes Engine 集群上运行。

Kubernetes Cloud 在 Jenkins 中配置如下:

安装的插件列表如下:

Analysis Model API Plugin
Ant Plugin
Apache HttpComponents Client 4.x API Plugin
Bundles Apache HttpComponents Client 4.x and allows it to be used by Jenkins plugins.
Authentication Tokens API Plugin
Bootstrap 4 API Plugin
Bootstrap 5 API Plugin
bouncycastle API Plugin
Branch API Plugin
Caffeine API Plugin
Checks API plugin
Command Agent Launcher Plugin
Credentials Binding Plugin
Credentials Plugin
DataTables.net API Plugin
Display URL API
Docker API Plugin
Docker Commons Plugin
Docker Pipeline
Docker plugin
Durable Task Plugin
ECharts API Plugin
Provides ECharts for Jenkins plugins.
Folders Plugin
Font Awesome API Plugin
Forensics API Plugin
Git
Git client plugin
GIT server Plugin
GitHub API Plugin
GitHub plugin
Google Authenticated Source plugin
Google Cloud Storage plugin
Google Compute Engine Plugin
Google Kubernetes Engine Plugin
Google Metadata plugin
Google OAuth Credentials plugin
Jackson 2 API Plugin
JavaScript GUI Lib: ACE Editor bundle plugin
JavaScript GUI Lib: Handlebars bundle plugin
JavaScript GUI Lib: jQuery bundles (jQuery and jQuery UI) plugin
JavaScript GUI Lib: Moment.js bundle plugin
JQuery3 API Plugin
JSch dependency plugin
JUnit Plugin
Kubernetes Client API Plugin
Kubernetes Credentials Plugin
Kubernetes plugin
LDAP Plugin
Lockable Resources plugin
Mailer Plugin
Matrix Project Plugin
Metrics Plugin
Monitoring
OAuth Credentials plugin
OkHttp
Oracle Java SE Development Kit Installer Plugin
OWASP Markup Formatter Plugin
Pipeline
Pipeline Graph Analysis Plugin
Pipeline: API
Pipeline: Basic Steps
Pipeline: Build Step
Pipeline: Declarative
Pipeline: Declarative Extension Points API
Pipeline: Groovy
Pipeline: Input Step
Pipeline: Job
Pipeline: Milestone Step
Pipeline: Model API
Pipeline: Multibranch
Pipeline: Nodes and Processes
Pipeline: REST API Plugin
Pipeline: SCM Step
Pipeline: Shared Groovy Libraries
Pipeline: Stage Step
Pipeline: Stage Tags Metadata
Pipeline: Stage View Plugin
Pipeline: Step API
Pipeline: Supporting APIs
Plain Credentials Plugin    
Plugin Utilities API Plugin
Popper.js 2 API Plugin
Popper.js API Plugin
SCM API Plugin
Script Security Plugin
Snakeyaml API Plugin
SSH Agent Plugin
SSH Build Agents plugin
SSH Credentials Plugin
SSH plugin
SSH server
Structs Plugin
Token Macro Plugin
Trilead API Plugin
Variant Plugin  
Warnings Next Generation Plugin

Jankins 版本为 Jenkins 2.303.2,所有插件都是最新版本。

【问题讨论】:

  • 不是 jenkins/gcp 的专家,但是为什么不用 pip 安装 pylint 然后运行呢?
  • pip 未安装在动态 kubernetes pod 上。并且无法在 pod 上安装 pip,因为这些 pod 会在作业完成后自动生成并销毁。
  • 好的,那么你可能需要一个带有 pylint for python 2.7.16 的 pod。
  • 这就是我的问题。如何在 Jenkins pod 上安装 Pylint。
  • @AbhinavDhiman 您在使用 Kubernetes 插件吗?请问,您能否进一步描述一下您是如何使用 Jenkins 和 Kubernetes 的?

标签: jenkins google-cloud-platform google-kubernetes-engine pylint


【解决方案1】:

我认为您可能可以通过向您的 pod 模板添加一个方便的容器来实现所需的行为:该容器将包含必要的 Pylint 依赖项,并将在您的 pod 中与默认的 Jenkins 代理映像一起使用。

正如您在屏幕截图中看到的,您可以在 Jenkins Web 控制台中配置 pod 模板和 Kubernetes 时添加此容器。

此外,您可以在定义管道时提供必要的信息。例如,考虑Jenkins Kubernetes plugin documentation 中提供的示例:

podTemplate(containers: [
    containerTemplate(name: 'maven', image: 'maven:3.8.1-jdk-8', command: 'sleep', args: '99d'),
    containerTemplate(name: 'golang', image: 'golang:1.16.5', command: 'sleep', args: '99d')
  ]) {

    node(POD_LABEL) {
        stage('Get a Maven project') {
            git 'https://github.com/jenkinsci/kubernetes-plugin.git'
            container('maven') {
                stage('Build a Maven project') {
                    sh 'mvn -B -ntp clean install'
                }
            }
        }

        stage('Get a Golang project') {
            git url: 'https://github.com/hashicorp/terraform.git', branch: 'main'
            container('golang') {
                stage('Build a Go project') {
                    sh '''
                    mkdir -p /go/src/github.com/hashicorp
                    ln -s `pwd` /go/src/github.com/hashicorp/terraform
                    cd /go/src/github.com/hashicorp/terraform && make
                    '''
                }
            }
        }

    }
}

请注意所需容器的定义以及每个容器在管道中的使用方式。

您可以在插件 Github 存储库中查看 additional examples

This Jenkins blog post,还有大量关于如何使用这些自定义容器的信息。

对于您的 Pylint 容器模板,您可以提供自己的图像,尽管有 different ones already available in Docker hub,例如。

我不是 Pylint 使用方面的专家,但我偶然发现了这些相关资源:

我希望其中一些对您的管道定义有所帮助。

【讨论】:

  • 谢谢。这解决了我的问题。 ?
  • 抱歉回复晚了。欢迎您@AbhinavDhiman。我很乐意提供帮助。
猜你喜欢
  • 2020-11-17
  • 2021-03-17
  • 1970-01-01
  • 2017-09-29
  • 2021-04-26
  • 2020-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多