当前位置: 首页 > 知识库问答 >
问题:

詹金斯码头许可

白腾
2023-03-14

在Ubuntu服务器上,我正在运行jenkins docker容器。出于测试目的,在我项目的jenkinsfile中,我必须运行一个postgres服务器。我试图建立一个容器postegres docker在我的步骤。

但是,我无法执行此操作,我收到了权限错误:

在unix://var/run/docker.sock连接到Docker守护程序套接字时,权限被拒绝:获取超文本传输协议:///var/run/docker.sock/v1.26/containers/json?filters={"name":{"vpx_postgres": true}}:拨号unix /var/run/docker.sock:连接:权限拒绝

这是我的詹金斯档案。“数据库创建”阶段正在失败。

def message = "";
def author = "";

def getLastCommitMessage = {
    message = sh(returnStdout: true, script: 'git log -1 --pretty=%B').trim()
}

def getGitAuthor = {
    def commit = sh(returnStdout: true, script: 'git rev-parse HEAD')
    author = sh(returnStdout: true, script: "git --no-pager show -s --format='%an' ${commit}").trim()
}

pipeline {
    agent {
        docker { image 'starefossen/ruby-node' }
    }
    stages {
       stage('Database creation') {
                    steps {
                        sh 'docker ps -f name=project_postgres -q | xargs --no-run-if-empty docker container stop'
                        sh 'docker container ls -a -fname=project_postgres -q | xargs -r docker container rm'
                        sh 'docker pull postgres'
                        sh 'docker run --name project_postgres -e POSTGRES_PASSWORD=secret -e POSTGRES_USER=postgres -p 5432:5432 -d postgres'
                    }
        }
        stage('Test') {
            steps {
                script {
                  getLastCommitMessage()
                  getGitAuthor()
                }
                sh 'RAILS_ENV=test bundle install --jobs 3'
                sh 'RAILS_ENV=test yarn install'
                sh 'RAILS_ENV=test bundle exec rails db:migrate'
                sh 'RAILS_ENV=test bundle exec rspec -f documentation'
            }
        }
    }
    post {
        failure {
          rocketSend channel: 'project-x-ci', emoji: ':x:', message: "Build failed - Commit : '${message}' by ${author}", rawMessage: true
        }
    }
}

也许是詹金斯码头工人的问题?码头工人来了。yml:

version: '2'

services:
  jenkins-server:
    build: ./ 
    ports:
      - 8080:8080
      - 50000:50000
    volumes:
      - /home/xero/jenkins/jenkins_home:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock
      - /usr/bin/docker:/usr/bin/docker
    environment:
      JENKINS_USER: jenkins
      JENKINS_URL: "http://10.0.1.66:8080/"
      DOCKER_SOCKET: /var/run/docker.sock
      DOCKER_GROUP: dockerhost
      DOCKER_HOST: unix:///var/run/docker.sock
    restart: always
    dns:
      - 10.0.1.1

Dockerfile:

FROM jenkinsci/jenkins:latest
USER root

COPY ["entrypoint.sh", "/"]

RUN apt-get update && \
    apt-get install sudo && \
    chmod 755 /entrypoint.sh

ENTRYPOINT ["/bin/bash","-c","./entrypoint.sh"]

还有我的入口。上海:

#!/bin/bash

if [ -S ${DOCKER_SOCKET} ]; then
    DOCKER_GID=$(stat -c '%g' ${DOCKER_SOCKET})
    groupadd -for -g ${DOCKER_GID} ${DOCKER_GROUP}
    usermod -aG ${DOCKER_GROUP} ${JENKINS_USER}
fi

exec sudo -E -H -u jenkins bash -c /usr/local/bin/jenkins.sh

重要:

主机(ubuntu)-

在我的jenkins docker容器中,docker可用,我没有问题。问题是当我从jenkins文件在jenkins中构建项目时。

因此JENKINS容器不能创建其他容器(这里是POSTGRES容器)

共有1个答案

万嘉熙
2023-03-14

找出用于运行jenkins的用户,并将该用户添加到docker组。

这应该解决权限问题。

您可以使用sudo usermod-aG docker将用户添加到docker组

为什么需要这样做的信息:

docker守护程序绑定到Unix套接字而不是TCP端口。默认情况下,Unix套接字由用户root拥有,其他用户只能使用sudo访问它。docker守护进程始终作为根用户运行。

如果在使用docker命令时不想使用sudo,请创建一个名为docker的Unix组并向其中添加用户。docker守护进程启动时,docker组将读取/写入Unix套接字的所有权。

 类似资料:
  • 有没有可能让詹金斯使用真正的浏览器而不是无头浏览器?我正在运行一些用TestNG编写的测试(使用Selenium webdriver)。当我运行testng时。在Eclipse中,浏览器启动并运行测试。但当我使用Jenkins并用maven运行测试时,它不会启动任何浏览器。

  • 问题内容: 如何轻松地将Jenkins与qUnit集成?我将使用真正的浏览器(如firefox和chrome)运行测试。我的服务器在RedHat 6.1 Linux上运行。我想我都需要插件/库,但我仍然不知道如何使其工作。我第一次与Jenkins合作(在服务器端)。 //编辑: 如果有人也可以共享想法如何构建覆盖率报告,那将是很棒的。 提前致谢 :)。 问题答案: 说詹金斯和QUnit只是难题的一

  • 我想做一些非常简单的事情,在一个文件夹中,我有一个jar文件和一个包含脚本的名为脚本的文件夹。但我可以让詹金斯拉链来做这件事。 zip目录:“awsdeploy”,排除:“”,glob:“”,“scripts/”,zipFile:“SQSToElasticProcessor.zip” 必须显式命名“zip”的参数。@ 第 31 行,第 16 列。

  • 我有一个詹金斯的工作,如图所示,配置如下, 我的jenkins工作区是我的本地回购目录,如下所示 ie TestCI是我在上面位置克隆的github repo名称,并将其设置为我的jenkins工作区路径。 所以基本上,我的jenkins工作是在我的github repo被推送更改时生成的,在生成之后,当我在本地repo中输入git状态时,我会得到错误“HEAD Distached at” 詹金斯

  • 问题内容: 我想配置bitbutcket来触发詹金斯构建。 我花了一些时间对此进行了研究,所有的答案都来自几年前,并且没有找到任何指导,因为从那以后情况似乎有所变化。 我正在尝试做的事情: 将位桶推送到特定分支会触发构建。 我所拥有的: Bitbucket Web挂钩,可在推送到任何分支时向Jenkins发出HTTP请求。我还在Jenkins上安装了Bitbucket插件,该插件在job conf

  • 问题内容: 我已经阅读了Jenkins网站及其JUnit插件,由于某种原因,一些基本的东西对我来说并不明显。 Jenkins有一个插件,可以在运行构建时发送自定义/高级通知电子邮件。在这些电子邮件中,您可以放置​​“ 内容令牌 ”,它们是运行时变量,在生成电子邮件时会被动态值替换。 这些标记之一是 允许您显示已运行或失败的JUnit测试的数量。 如何使Jenkins正确显示此信息?我需要一个插件吗