在Jenkins上执行时找不到package.json文件

119次阅读
没有评论

问题描述

在使用Jenkins执行任务时遇到了问题,他的Docker容器在执行过程中找不到package.json文件,同时还出现了sudo not found的错误。他已经在Jenkins服务器上将Jenkins ALL=(ALL) NOPASSWD: ALL添加到了/etc/sudoers文件中。用户的Dockerfile如下所示:

FROM mhart/alpine-node:8.11.3
RUN mkdir -p /app
COPY ./ /app
WORKDIR /app/build
RUN yarn global add serve
CMD ["serve", "-l", "3000"]
EXPOSE 3000

而他的JenkinsFile如下所示:

node {
  try {
    stage('Checkout source code') {
      checkout scm
    }
    stage('Install packages') {
      sh("docker run --rm -v `pwd`:/app -w /app node yarn install")
      //sh("sudo chown -R jenkins: ./node_modules")
    }
    stage('Set the enviroment variables') {
      sh("echo set-env-variables")
    }
    stage('Build static assets') {
      sh("docker run --rm -v `pwd`:/app -w /app node yarn build")
    }
  }
}

尽管用户在终端上手动运行这些命令时都正常工作,但在Jenkins上运行时却出现了问题。

解决方案

请注意以下操作可能涉及版本差异,务必进行备份。

容器的工作目录导致找不到package.json

用户的问题可能是由于容器的工作目录设置不当导致的。在Dockerfile中,用户将容器的工作目录设置为了/app/build,而复制package.json的指令在上一级目录执行。这导致在工作目录内找不到package.json文件。

要解决这个问题,可以考虑修改Dockerfile中的工作目录,使其与package.json所在的目录对应。

以下是可能的解决方案步骤:
1. 打开Dockerfile。
2. 将WORKDIR设置为与package.json所在的目录相对应的目录,即/app

修改后的Dockerfile示例如下:

FROM mhart/alpine-node:8.11.3
RUN mkdir -p /app
COPY ./ /app
WORKDIR /app
RUN yarn global add serve
CMD ["serve", "-l", "3000"]
EXPOSE 3000

sudo命令未找到问题

关于在Jenkins执行命令时出现sudo not found的问题,这可能与容器中没有安装sudo命令有关。在Docker容器中默认是没有安装sudo的,因此无法使用sudo命令。

要解决这个问题,可以尝试避免在容器内使用sudo命令,或者可以考虑在Dockerfile中安装sudo命令。

以下是可能的解决方案步骤:
1. 打开Dockerfile。
2. 在Dockerfile中添加安装sudo的指令,例如:RUN apk add --no-cache sudo
3. 在JenkinsFile中去除使用sudo的相关命令。

修改后的Dockerfile示例如下:

FROM mhart/alpine-node:8.11.3
RUN mkdir -p /app
COPY ./ /app
WORKDIR /app
RUN yarn global add serve
RUN apk add --no-cache sudo
CMD ["serve", "-l", "3000"]
EXPOSE 3000

请注意,安装sudo命令可能会引入一些安全风险,因此在实际应用中需谨慎考虑。

总结

通过修改容器的工作目录,确保package.json在工作目录内,可以解决找不到package.json文件的问题。另外,避免在容器内使用sudo命令,或者在Dockerfile中安装sudo命令,可以解决sudo not found的问题。

在实际操作中,建议根据具体情况选择合适的解决方案,并进行必要的测试和验证,以确保任务顺利执行。

正文完