gpt4 book ai didi

perl - Jenkins - 管道和自由式构建的不同结果(纸箱安装无法安装某些模块)

转载 作者:行者123 更新时间:2023-12-01 00:20:44 25 4
gpt4 key购买 nike

我有一个 Perl 项目,包括 cpanfile .

REPO/
Jenkinsfile
PROJECT1/
cpanfile
local/
PROJECT2/
cpanfile -> ../PROJECT1/cpanfile
local/ -> ../PROJECT1/local
...

我在 jenkinsci/blueocean 的 Docker 容器中运行 Jenkins图片。

现在我想使用 Jenkins 构建、测试和部署这个 Perl 项目。

起初,我尝试使用自由式构建。这是我的构建脚本:
docker run -t --rm \
-v $WORKSPACE:/usr/src/myapp -w /usr/src/myapp/PROJECT1 \
localhost:20000/perl-carton:5.26 \
carton install
  • localhost:20000/perl-carton:5.26是我从 perl:5.26 构建的 Docker 镜像.我为我的项目添加了一些 Perl 模块(如 Carton)和一些依赖项(如 libgd-dev)。
  • 我将工作区安装到 /usr/src/myapp并将容器的工作目录设置为PROJECT1在工作区下方,因为 cpanfile有没有。

  • 这个 docker run ...命令在我的主机上运行良好(将 $WORKSPACE 替换为 $PWD )。

    此命令也适用于 Jenkins 容器。

    然后,我尝试使用 Jenkins Pipeline。我做了 Jenkinsfile像这样:
    // Jenkinsfile
    pipeline {
    agent none
    stages {
    stage('Build') {
    agent {
    docker {
    image 'localhost:20000/perl-carton:5.26'
    // args '-v $WORKSPACE:/usr/src/myapp -w /usr/src/myapp/PROJECT1'
    }
    }
    steps {
    sh 'cd PROJECT1 && carton install'
    }
    ...
    }
  • 我注释掉了-v ... -w ...因为我从输出中发现 Jenkins 挂载了它的工作区并强制将工作目录设置为该工作区:docker run ... -w /var/jenkins_home/workspace/JOBNAME --volumes-from DOCKER_CONTAINER_ID ... .所以我的-w ...选项被覆盖。

  • 我希望这条管道能做同样的工作。但是当我运行这个管道时,它无法安装一些模块。
    [AppStore(pipeline)] Running shell script
    + cd PROJECT1
    + carton install
    Installing modules using /var/jenkins_home/workspace/JOBNAME/PROJECT1/cpanfile
    ! Installing DBD::SQLite failed. See /root/.cpanm/work/1519351987.18/build.log for details. Retry with --force to force install it.
    ! Installing the dependencies failed: Module 'DBD::SQLite' is not installed
    ! Bailing out the installation for DBIx-Class-0.082840.
    ...
    Installing modules failed

    最后,我尝试修改 Jenkinsfile 不使用 agent docker并让它在 shell 命令中运行 docker:
    agent any
    steps {
    sh 'docker run -t --rm -v $WORKSPACE:/usr/src/myapp -w /usr/src/myapp/PROJECT1 localhost:20000/perl-carton:5.26 carton install'
    }

    正如我所料,它成功了。

    我不知道是什么导致了这种差异。

    最佳答案

    我找到了答案。

    我将管道作业命名为 TestProject(pipeline)在 Jenkins 。

    作业名称包含括号,
    工作区目录的名称也是如此,
    和 BOOM 在 shell 命令中......

    cc -c  -I/Users/gypark/temp/b(test)/local/..omitted../Install
    -fno-common -DPERL_DARWIN -fno-strict-aliasing -pipe -fstack-protector -O3
    -DVERSION=\"0.005\" -DXS_VERSION=\"0.005\"
    "-I/Users/gypark/perl5/perlbrew/perls/perl-5.18/lib/5.18.1/darwin-thread-multi-2level/CORE" filehandles.c
    /bin/sh: -c: line 0: syntax error near unexpected token `(

    我做了一个新的管道项目,名称中没有括号。一切都成功了。

    关于perl - Jenkins - 管道和自由式构建的不同结果(纸箱安装无法安装某些模块),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48940834/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com