Docker: 在 jenkinsfile 中 运行 cmds 时找不到
Docker: not found when running cmds in jenkinsfile
我是 docker 和 CI 的新手。我正在尝试创建一个 jenkinsfile 来构建和测试我的应用程序,然后使用我编写的 Dockerfile 构建一个 docker 图像,然后将其推送到 AWS ECR。我坚持的步骤是使用 docker 构建图像,我收到错误消息 docker: not found
。我下载了docker插件,并在全局工具配置选项卡中进行了配置。我没有正确地将它添加到工具中吗?
还有一个 post wear 你可以使用 kubernetes 来做,但是 kubernetes 不再支持 docker.
我如何在全局工具配置中配置 docker 的图片:
global tool config
错误
/var/jenkins_home/workspace/client-pipeline_feature-jenkins@tmp/durable-41220eb0/script.sh: 1: /var/jenkins_home/workspace/client-pipeline_feature-jenkins@tmp/durable-41220eb0/script.sh: docker: not found
error with permission to sock
def gv
containerVersion = "1.0"
appName = "foodcore"
imageName = appName + ":" + version
pipeline {
agent any
environment {
CI = 'true'
}
tools {
nodejs "node"
docker "docker"
}
stages {
stage("init") {
steps {
script {
gv = load "script.groovy"
CODE_CHANGES = gv.getGitChanges()
}
}
}
stage("build frontend") {
steps {
dir("client") {
sh 'npm install'
}
}
}
stage("build backend") {
steps {
dir("server") {
sh 'npm install'
}
}
}
stage("test") {
when {
expression {
script {
CODE_CHANGES == false
}
}
}
steps {
dir("client") {
sh 'npm test'
}
}
}
stage("build docker image") {
when {
expression {
script {
env.BRANCH_NAME.toString().equals('Main') && CODE_CHANGES == false
}
}
}
steps {
sh "docker build -t ${imageName} ."
}
}
stage("push docker image") {
when {
expression {
env.BRANCH_NAME.toString().equals('Main')
}
}
steps {
sh 'aws ecr get-login-password --region us-east-2 | docker login --username AWS --password-stdin repoURI'
sh 'docker tag foodcore:latest ...repoURI
sh 'docker push repoURI'
}
}
}
}
Docker 应该在服务器上安装 Jenkins 是 运行。 Jenkins 提供的 docker 插件就像一个为管道脚本生成一些片段的工具。安装和配置该工具不会安装 docker 守护程序。请检查 docker 是否安装在 OS 上。
使用echo hello world使...
正如我们在讨论帖中看到的,您在 docker.sock 上的权限开始被拒绝。
如果重启系统或docker服务,docker.sock权限将丢失。
要使其持久化,请设置一个 cron 以在每次重新启动后更改所有权
@reboot chmod 777 /var/run/docker.sock
并且当您重新启动 docker 时,确保 运行 下面的命令
chmod 777 /var/run/docker.sock
或者您也可以为其设置一个 cron,每 5 分钟执行一次。
要在 Jenkins 构建中使用 docker,有两种方法。
- 按照上述解决方案中的说明使用 Jenkins docker 插件。
- 或者在 Jenkins 容器中安装 docker 本身并挂载 docker.sock 文件。
我是 docker 和 CI 的新手。我正在尝试创建一个 jenkinsfile 来构建和测试我的应用程序,然后使用我编写的 Dockerfile 构建一个 docker 图像,然后将其推送到 AWS ECR。我坚持的步骤是使用 docker 构建图像,我收到错误消息 docker: not found
。我下载了docker插件,并在全局工具配置选项卡中进行了配置。我没有正确地将它添加到工具中吗?
还有一个 post wear 你可以使用 kubernetes 来做,但是 kubernetes 不再支持 docker.
我如何在全局工具配置中配置 docker 的图片: global tool config
错误
/var/jenkins_home/workspace/client-pipeline_feature-jenkins@tmp/durable-41220eb0/script.sh: 1: /var/jenkins_home/workspace/client-pipeline_feature-jenkins@tmp/durable-41220eb0/script.sh: docker: not found
error with permission to sock
def gv
containerVersion = "1.0"
appName = "foodcore"
imageName = appName + ":" + version
pipeline {
agent any
environment {
CI = 'true'
}
tools {
nodejs "node"
docker "docker"
}
stages {
stage("init") {
steps {
script {
gv = load "script.groovy"
CODE_CHANGES = gv.getGitChanges()
}
}
}
stage("build frontend") {
steps {
dir("client") {
sh 'npm install'
}
}
}
stage("build backend") {
steps {
dir("server") {
sh 'npm install'
}
}
}
stage("test") {
when {
expression {
script {
CODE_CHANGES == false
}
}
}
steps {
dir("client") {
sh 'npm test'
}
}
}
stage("build docker image") {
when {
expression {
script {
env.BRANCH_NAME.toString().equals('Main') && CODE_CHANGES == false
}
}
}
steps {
sh "docker build -t ${imageName} ."
}
}
stage("push docker image") {
when {
expression {
env.BRANCH_NAME.toString().equals('Main')
}
}
steps {
sh 'aws ecr get-login-password --region us-east-2 | docker login --username AWS --password-stdin repoURI'
sh 'docker tag foodcore:latest ...repoURI
sh 'docker push repoURI'
}
}
}
}
Docker 应该在服务器上安装 Jenkins 是 运行。 Jenkins 提供的 docker 插件就像一个为管道脚本生成一些片段的工具。安装和配置该工具不会安装 docker 守护程序。请检查 docker 是否安装在 OS 上。
使用echo hello world使...
正如我们在讨论帖中看到的,您在 docker.sock 上的权限开始被拒绝。
如果重启系统或docker服务,docker.sock权限将丢失。
要使其持久化,请设置一个 cron 以在每次重新启动后更改所有权
@reboot chmod 777 /var/run/docker.sock
并且当您重新启动 docker 时,确保 运行 下面的命令
chmod 777 /var/run/docker.sock
或者您也可以为其设置一个 cron,每 5 分钟执行一次。
要在 Jenkins 构建中使用 docker,有两种方法。
- 按照上述解决方案中的说明使用 Jenkins docker 插件。
- 或者在 Jenkins 容器中安装 docker 本身并挂载 docker.sock 文件。