【问题标题】:How to run node test inside docker within Jenkins如何在 Jenkins 内的 docker 内运行节点测试
【发布时间】:2021-04-14 23:40:24
【问题描述】:

说明

我正在尝试创建一个构建映像并将其推送到注册表的 Jenkinsfile。但是我希望在推送之前,管道确保所有测试都通过。

环境

Jenkinsfile

node {
    checkout scm

    def customImage = docker.build("my-image:test")

    customImage.inside {
        dir("app"){
            // chown was added to try to solve the problem with the suggested solution
            // from the error log,but doesn't work.
            sh 'sudo chown -R 126:133 "/.npm"'
            sh 'npm run test'
        }
    }
}

确保应用目录,只是为了放弃这种可能性。

Dockerfile

FROM node
WORKDIR /usr/src/app
COPY app/package*.json ./
RUN npm install -D
COPY app .
EXPOSE 3000
CMD ["npm", "start"]

NPM 脚本

  "scripts": {
    "start": "node server.js",
    "test": "NODE_ENV=test npx mocha"
  },

在 podman 上运行测试

在尝试在 podman 上运行测试以快速检查它之前

问题

当我执行 Jenkins 管道(使用多分支管道)时,我从控制台输出中收到以下错误:

由于错误建议从错误日志中添加了 chown,所以这就是我在 Jenkinsfile 中包含它的原因,尽管它不识别 sudo:

还尝试在没有 sudo 的情况下将 chown 添加到 Jenkinsfile,这是错误消息:

【问题讨论】:

    标签: docker jenkins npm


    【解决方案1】:

    你可以试试这个 docker 文件吗?

    FROM node
    WORKDIR /usr/src/app
    COPY app/package*.json ./
    RUN npm install -D && chown -R 1000:1000 ~/.npm/
    COPY app .
    EXPOSE 3000
    CMD ["npm", "start"]
    

    注意:我们需要在创建图像时更正权限。

    【讨论】:

    • 试了一下,出现“errno EACCES”错误
    • 从 Jenkins 文件中删除 chown 步骤,然后尝试将 chown 步骤保留在 dockerfile 中
    • 两种方法都试过了,都没有成功
    • 我已经更新了 chown 命令,你可以试试更新的 dokcerfile
    【解决方案2】:

    看来是由于jenkins pipeline在使用inside时做了uid映射,没办法让它工作。

    插件运行的 docker 命令可以在问题图像中给出的控制台输出中看到。 所以想到了一个混合解决方案,在两者之间使用sh 步骤来使用 docker cli 运行测试。 这是 Jenkins 文件:

    node {
        checkout scm
    
        def app = docker.build("itasahobby/app")
    
        stage('Test'){
            sh 'docker run itasahobby/app npm run test'
        }
    
        docker.withRegistry('https://registry.hub.docker.com', 'docker-hub'){
            app.push()
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-27
      • 2021-08-22
      • 1970-01-01
      • 2018-12-13
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      相关资源
      最近更新 更多