在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容器)
找出用于运行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正确显示此信息?我需要一个插件吗