【问题标题】:Getting python3 to work in jenkins让 python3 在詹金斯中工作
【发布时间】:2017-08-31 16:45:29
【问题描述】:

我无法让 python3 在 jenkins 中工作。 Jenkins 目前正在一个 docker 容器中运行,我正在使用pipeline 脚本来促进 CI/CD

这是我的Jenkinsfile 用于 python 回购

pipeline {
    agent any
    tools {
        nodejs 'nodejs'
        python3 'python3'
    }
    environment{

    }
    stages {
        stage('build'){

            steps{
                echo 'Preparing'

                sh 'python3 --version'
                sh 'pip3 install -U pytest'
                script{
                    // pull git tag and add to a variable to set the build info - {tag#build_no}
                    GIT_TAG = sh(script: "git describe --abbrev=0 --tags", returnStdout: true).trim()
                    sh 'echo ${GIT_TAG}'
                    currentBuild.displayName = "${GIT_TAG}#${BUILD_NUMBER}"
                }
            }
        }

        stage('Checkout'){
            steps {
                echo 'Checking out code from repo'
                checkout scm
            }
        }

        stage('install'){
            steps{
                echo 'installing libraries'
                sh 'pip3 install -r requirements.txt'
            }
        }

        stage('test'){
            steps {
                echo 'running tests'
                sh 'pytest'
            }
            post{
                success{
                    bitbucketStatusNotify(buildState: 'SUCCESSFUL')
                    office365ConnectorSend message: "The build was successfull", status: "Success", webhookUrl: "${env.HOOK}"
                }
                failure{
                    bitbucketStatusNotify(buildState: 'FAILED')
                    office365ConnectorSend message: "The build has failed", status: "Failure", webhookUrl: "${env.HOOK}"
                }
            }
        }
    }
}

jenkins 无法识别python3,因为它尚未安装。如何在我的 jenkins 文件夹中安装 python3?我尝试在这里进行更改 - 但由于某种原因 - 这似乎不起作用(使用 shiningpanda 插件)

python2.7 实际上确实存在于/usr/bin/python 中,但这似乎未被 Jenkins 识别

【问题讨论】:

  • 您是否尝试过安装python3 以及位于/usr/bin/python3 的主目录或可执行文件?无论如何,我认为您可能需要将 python3 安装在您的 Jenkins 机器(您的容器映像)中
  • 如何做到这一点?我尝试进入 docker 容器并手动安装 python3 可执行文件,但出现以下错误 - E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied) E: Unable to lock the administration directory (/var/lib/dpkg/), are you root? - 但 sudo 在 docker 容器中不起作用:(
  • 你应该在镜像构建时进行(例如你的 Docker 文件)
  • 根据issues.jenkins-ci.org/browse/JENKINS-29007看来Jenkins目前不支持python3?..
  • @Kannaj 你设法让它工作了吗?我和你的情况一样。詹金斯为每项工作都启动了一个容器,但我不知道如何将 python“升级”到版本 3 或“安装”它......它现在只有版本 2..希望您有答案,因为这是一篇旧帖子...谢谢!

标签: python jenkins


【解决方案1】:

TL&DR:

默认情况下,Jenkins docker 镜像不包含 python。因此有必要在基础镜像上安装 python。需要注意的是,您还可以在完全安装了 python 的 docker-image 中运行测试。

说明

一种方法是修改 Jenkins docker-image。我使用 Jenkins-lts 构建,因为它通常更小。然后利用 apk 包管理器并添加 python

第 1 步:使用以下内容创建 Docker 文件

FROM jenkins/jenkins:lts-alpine
USER root
RUN apk add python3 && \
 python3 -m ensurepip && \
 pip3 install --upgrade pip setuptools && \
 if [ ! -e /usr/bin/pip ]; then ln -s pip3 /usr/bin/pip ; fi && \
 if [[ ! -e /usr/bin/python ]]; then ln -sf /usr/bin/python3 /usr/bin/python; fi && \
 rm -r /root/.cache
RUN pip install alpine==0.0.2
RUN apk add pkgconf
RUN apk add build-base
RUN apk add python3-dev
RUN apk add postgresql-dev
RUN apk add postgresql-client

【讨论】:

  • 任何人注意:您确实需要FROM jenkins/jenkins:lts-alpine,而不是FROM jenkins/jenkins,否则我收到此错误:/bin/sh: 1: apk: not found。此外,既没有找到pip,也没有找到pip3,所以在this answer 之外添加了i changed it to bootstrapping pip。我也遇到了 setuptools 的问题。 postgresql 是否与答案有关?
  • 是的@cadoiz:这是完全正确的,为什么原始答案包括正确的 FROM :)
【解决方案2】:

我还修改了我的Dockerfile,比如FlyingV suggested,但遇到了一些问题。使用curlbootstrap pip 的工作方式如下:

FROM jenkins/jenkins:lts-alpine
        #You need jenkins:lts-alpine instead of jenkins for apk among others
USER root

#Use apk to add python3 and then start bootstrapping pip
RUN apk add python3 \
        && curl -O https://bootstrap.pypa.io/get-pip.py \
        && python3 get-pip.py
        #I needed python&pip for ansible, which itself needs some more stuff.

#To have a clean environment with the typical aliases
RUN if [ ! -e /usr/bin/pip ]; then ln -s pip3 /usr/bin/pip ; fi && \
        if [[ ! -e /usr/bin/python ]]; then ln -sf /usr/bin/python3 /usr/bin/python; fi && \
        rm -r /root/.cache \

RUN pip install alpine==0.0.2
RUN apk add pkgconf #gives: /usr/glibc-compat/sbin/ldconfig: /usr/glibc-compat/lib/ld-linux-x86-64.so.2 is not a symbolic link
RUN apk add build-base #gives: /usr/glibc-compat/sbin/ldconfig: /usr/glibc-compat/lib/ld-linux-x86-64.so.2 is not a symbolic link
RUN apk add python3-dev #gives: /usr/glibc-compat/sbin/ldconfig: /usr/glibc-compat/lib/ld-linux-x86-64.so.2 is not a symbolic link

#change back to user jenkins
USER  jenkins

这里有两个链接指向我的具体情况考虑的其他依赖项:the first onesecond, probably more generally applicable onegcc

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多