【发布时间】:2020-09-29 08:48:56
【问题描述】:
我是 docker 和 jenkins 的新手,但想看看我是否可以在我的树莓派上自动部署和运行节点应用程序。在一个理想的世界里,我想让 Jenkins 从 github 拉下代码,使用 jenkinsfile 和 dockerfile 来构建和运行 docker 镜像(希望这是可能的)。
jenkinsfile
pipeline {
agent {
dockerfile true
}
environment {
CI = 'true'
HOME = '.'
}
stages {
stage('Install dependencies') {
steps {
sh 'npm install'
}
}
stage('Test') {
steps {
sh './scripts/test'
}
}
stage('Build Container') {
steps {
sh 'docker build -t test-app:${BUILD_NUMBER} . '
}
}
}
}
dockerfile
# Create image based on the official Node image
FROM node:12
# Create a directory where our app will be placed
RUN mkdir -p /usr/src/app
# Change directory so that our commands run inside this new directory
WORKDIR /usr/src/app
# Copy dependency definitions
COPY package.json /usr/src/app
# Install dependecies
RUN npm install
# Get all the code needed to run the app
COPY . /usr/src/app
# Expose the port the app runs in
EXPOSE 3000
# Serve the app
CMD ["npm", "start"]
但是,当我尝试在 jenkins 中运行它时,我收到以下错误:../script.sh: docker: not found。这似乎适用于任何 docker 命令。我实际上尝试运行以“sudo”开头的其他命令,但它抱怨 sudo: not found。是否缺少步骤或者我试图以不正确的方式做某事。 (注意:docker 安装在树莓派上。我可以使用 jenkins 用户登录并执行 docker 命令。它只是无法通过 web ui 工作)任何建议将不胜感激。
谢谢!
【问题讨论】:
-
Jenkins 命令由安装程序自动创建的 Jenkins 用户执行。尝试使用 sudo su -s /bin/bash jenkins 以 Jenkins 用户身份登录,然后尝试执行 docker 命令?我的猜测是 Jenkins 用户无权访问 docker 系统。你能验证一下吗?问题很可能不在您的脚本文件中,而是您尝试执行它的系统。更新:对不起,我注意到你已经尝试过了。您是否将 Jenkins 用户添加到 Dockergroup?
-
将 Jenkins 用户添加到 docker 组,然后重启 Jenkins 系统?
-
是的,如果我运行'groups jenkins',我会得到:'jenkins : jenkins sudo docker'。看起来它是“码头工人”组的一部分。注意:我最近也重启了 jenkins 服务
-
您是手动安装的还是使用 Docker 插件安装的?你可以试试这个插件是否解决了问题plugins.jenkins.io/docker-plugin 否则我认为你的系统仍然无法访问我的笔记本电脑上也发生的 docker 套接字。您可以尝试类似: sudo chown -R jenkins:jenkins /var/run/docker.sock 不确定这是否有效。一定是与无法连接到 docker 套接字有关。
-
我不完全确定这是做什么的,但我必须每次在我的 Xubuntu 系统上运行这个命令,然后我才能在本地启动 docker sudo setfacl -m user:$USER:rw /var/run /docker.sock 这个脚本对我有用,所以你也可以尝试用 jenkins 用户登录并执行这个命令
标签: node.js docker jenkins raspberry-pi