我想在docker容器中运行Jenkins实例.
我希望Jenkins本身能够将docker容器作为从属设备来运行测试.
似乎最好的方法是使用
docker run -v /var/run.docker.sock:/var/run/docker.sock -p 8080:8080 -ti my-jenkins-image
Run Code Online (Sandbox Code Playgroud)
在Dockerfile我使用的是
FROM jenkins
COPY plugins.txt /usr/share/jenkins/plugins.txt
RUN /usr/local/bin/plugins.sh /usr/share/jenkins/plugins.txt
USER root
RUN apt-get update && apt-get install -y docker.io
RUN usermod -aG docker jenkins
USER jenkins
Run Code Online (Sandbox Code Playgroud)
如果我在正在运行的容器中启动一个bash会话并运行docker info我的图像,我得到了
$ docker info
FATA[0000] Get http:///var/run/docker.sock/v1.18/info: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?
Run Code Online (Sandbox Code Playgroud)
如果我以root身份运行bash会话
docker exec -u 0 -ti cocky_mccarthy bash
root@5dbd0efad2b0:/# docker info
Containers: 42
Images: …Run Code Online (Sandbox Code Playgroud) 我是码头工的新手,所以如果这是一个我很想念的相当明显的过程,我会为前面的愚蠢问题道歉.
我正在使用jenkinsdocker镜像设置一个持续集成服务器.我做了一个docker pull jenkins,并创建了一个用户jenkins,允许我/var/jenkins_home将容器中的容器挂载到我的主机/var/jenkins_home(也由jenkins:jenkins用户拥有).
问题是容器似乎jenkins用uid 102 来定义用户,但是我的主机将jenkins用户设置为1002,所以当我运行它时,我得到:
docker run --name jenkins -u jenkins -p 8080 -v /var/jenkins_home:/var/jenkins_home jenkins
/usr/local/bin/jenkins.sh: line 25: /var/jenkins_home/copy_reference_file.log: Permission denied
Run Code Online (Sandbox Code Playgroud)
我只是让主机jenkins用户的uid为102 /etc/passwd,但是这个uid已经被sshd占用了.我认为解决方案是改变容器使用uid 1002,但我不知道如何.
编辑
实际上,主机上的用户102是messagebus,而不是sshd.
我想部署一个基于Jenkins的持续集成平台.因为我有各种各样的项目(PHP/Symfony,node,angular,...),并且我希望这些测试在本地和Jenkins上运行,我正在考虑使用Dockers容器.
我的目标是:
我不希望Jenkins在一个容器中.
通过这种过程,我希望能够非常轻松地在每个开发人员计算机上运行类似a docker-composer up然后在其中一个容器中的测试./tests all.
我对詹金斯不太熟悉.我已经阅读了很多文档,但是大多数文档建议事先为每种项目定义Jenkins的奴隶.我希望一切都尽可能动态,并尽可能减少Jenkins的配置.
如果你曾经实现过类似的东西,我将非常感谢你对测试过程的描述.如果你认为我的目标是不可能的,如果你能向我解释原因,我也将不胜感激.
这个问题是这个问题How to pass jenkins凭据到docker build命令的后续问题 ?
我从 groovy 管道中的 jenkins 凭证存储获取 ssh 密钥文件,并通过 --build-arg 将其传递到 docker build 命令,以便我可以从 docker 容器内的私有 git 存储库中签出和构建工件
凭证存储 id :cicd-user,用于按照我的常规 Jenkinsfile 的预期检查我的私人作品
checkout([$class: 'GitSCM',
userRemoteConfigs: [[credentialsId: 'cicd-user', url:'ssh://git@bitbucket.myorg.co:7999/A/software.git']]
Run Code Online (Sandbox Code Playgroud)
我访问它并尝试将其传递给 docker build 命令:
withCredentials([sshUserPrivateKey(credentialsId: 'cicd-user', keyFileVariable: 'FILE')]) {
sh "cd ${WORKSPACE} && docker build -t ${some-name} --build-arg USERNAME=cicd-user --build-arg PRIV_KEY_FILE=\$FILE --network=host -f software/tools/jenkins/${some-name}/Dockerfile ."
}
Run Code Online (Sandbox Code Playgroud)
在 Dockerfile 中我做
RUN echo "$PRIV_KEY_FILE" > /home/"$USERNAME"/.ssh/id_rsa && \
chmod 700 /home/"$USERNAME"/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)
RUN echo "Host bitbucket.myorg.co\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config …
有没有我们可以运行的命令并找到"Docker Host URI"?我找到了一些相关的问题,但没有得到它.
我们在Ubuntu 16.04.1服务器上运行Jenkins(版本2.60.1).我们最近遇到的一个问题是我们经常得到错误" 设备上没有剩余空间 ".
我知道在使用Docker时需要进行严格的清理过程,因为文件会留下并占用不必要的空间.
我们使用CloudBees Docker Build and Publish插件来处理构建并推送到AWS ECS.我想删除所有未使用的图像.问题是如果我登录Jenkins实例(通过SSH)并尝试运行它提供的docker命令 - "无法连接到Docker守护程序.这个主机上是否运行了docker守护程序?"
我想我需要在Jenkins环境或插件的一部分中做到这一点?
有人之前处理过此事或有过一些建议吗? - 我真的很感激.
我有一个使用 docker 代理的声明性管道的 Jenkinsfile。许多步骤使用 docker 代理,并且为这些步骤添加相同的代理有点重复
例如
pipeline {
agent any
stages {
stage('Stage 1') {
steps {
//Do something
}
}
stage('Stage 2') {
agent {
docker { image 'jenkins/jenkins-slave:latest'
reuseNode true
registryUrl 'https://some.registry/'
registryCredentialsId 'git'
args '-v /etc/passwd:/etc/passwd -v /etc/group:/etc/group -e HOME=${WORKSPACE}'
}
}
steps {
//Do something
}
}
stage('Stage 3') {
steps {
//Do something
}
}
stage('Stage 4') {
agent {
docker { image 'jenkins/jenkins-slave:latest'
reuseNode true
registryUrl 'https://some.registry/'
registryCredentialsId 'git'
args '-v /etc/passwd:/etc/passwd -v …Run Code Online (Sandbox Code Playgroud) jenkins-docker jenkins-pipeline jenkins-declarative-pipeline
我无法用Jenkins Pipeline将ocker图像推送到Amazon ECR:我总是得到no basic auth credentials:-(
这是我的设置:
aws-jenkins到Jenkins(在本地测试并成功推送到AWS ECR)/root/.dockercfg到我的调试authJenkinsfileJenkinsfile:
stage("Docker") {
dir(path) {
docker.build("my-image:latest")
}
docker.withRegistry("https://<my-aws-id>.dkr.ecr.eu-central-1.amazonaws.com", "ecr:eu-central-1:aws-jenkins") {
sh "cat /root/.dockercfg" // debug
docker.image("my-image:latest").push()
}
}
Run Code Online (Sandbox Code Playgroud)
日志:
[Pipeline] withDockerRegistry
Wrote authentication to /root/.dockercfg
[Pipeline] {
[Pipeline] sh
[docker-emotion-compilers] Running shell script
+ cat /root/.dockercfg
{"https://<my-aws-id>.dkr.ecr.eu-central-1.amazonaws.com": {
"auth": "[...]",
"email": "nobody@example.com"
}}[Pipeline] sh
[docker-emotion-compilers] Running shell script
+ docker tag --force=true my-image:latest <my-aws-id>.dkr.ecr.eu-central-1.amazonaws.com/my-image:latest
Warning: '--force' is deprecated, it will …Run Code Online (Sandbox Code Playgroud) 我试图让Docker设置一个可以在其中运行集成测试的完整测试环境,但是到目前为止,它还没有真正起作用,我什至在从中取回日志时也遇到了问题。
所以我想将其作为管道运行,并且我想使用jenkinsfile。这是我到目前为止所得到的:
pipeline {
agent any
stages {
stage('build war') {
agent {
docker {
image 'gradle:latest'
reuseNode true
}
}
steps {
sh 'gradle war -b oven/build.gradle'
}
}
stage('test') {
steps {
script {
docker.image('mysql:latest').withRun('-e "MYSQL_ROOT_PASSWORD=password" -e "MYSQL_USER=root" -e "MYSQL_DATABASE=highlygroceries"') { c ->
docker.image('munhunger/highly-oven').withRun('-e "test=test"') { h ->
docker.image('mysql:latest').inside("--link ${c.id}:db") {
sh 'while ! mysqladmin ping -hdb --silent; do sleep 1; done'
}
docker.image('munhunger/highly-oven').inside("--link ${c.id}:db -e 'DB_URL=db:3306' -e 'DB_PASS=password' -e 'DB_USER=root'") {
sh 'sleep 5'
}
docker.image('gradle:latest').inside("--link ${h.id}:backend …Run Code Online (Sandbox Code Playgroud) 我有一个具有多个阶段的管道,并且我想仅在“ n”个阶段之间而不是所有阶段之间重用docker容器:
pipeline {
agent none
stages {
stage('Install deps') {
agent {
docker { image 'node:10-alpine' }
}
steps {
sh 'npm install'
}
}
stage('Build, test, lint, etc') {
agent {
docker { image 'node:10-alpine' }
}
parallel {
stage('Build') {
agent {
docker { image 'node:10-alpine' }
}
// This fails because it runs in a new container, and the node_modules created during the first installation are gone at this point
// How do I reuse the …Run Code Online (Sandbox Code Playgroud) jenkins-docker ×10
jenkins ×8
docker ×7
amazon-ecr ×1
cloudbees ×1
credentials ×1
devops ×1
dockerfile ×1
java ×1
jenkins-declarative-pipeline ×1
testing ×1