标签: jenkins-docker

如何在具有正确组的docker容器中将docker socket作为卷安装

我想在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)

jenkins docker dockerfile jenkins-docker

22
推荐指数
2
解决办法
1万
查看次数

在预构建的docker容器中更改用户的uid(jenkins)

我是码头工的新手,所以如果这是一个我很想念的相当明显的过程,我会为前面的愚蠢问题道歉.

我正在使用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 docker jenkins-docker

10
推荐指数
2
解决办法
7480
查看次数

在Docker容器中运行Jenkins测试从codebase中的dockerfile构建

我想部署一个基于Jenkins的持续集成平台.因为我有各种各样的项目(PHP/Symfony,node,angular,...),并且我希望这些测试在本地和Jenkins上运行,我正在考虑使用Dockers容器.

我的目标是:

  • 在Github/Gitlab上打开合并请求
  • webhook通知Jenkins合并请求
  • Jenkins提取repo,构建容器并运行shell脚本来执行测试
  • 测试完成后,Jenkins从其中一个容器(通过共享卷)检索结果并处理结果.

我不希望Jenkins在一个容器中.

通过这种过程,我希望能够非常轻松地在每个开发人员计算机上运行类似a docker-composer up然后在其中一个容器中的测试./tests all.

我对詹金斯不太熟悉.我已经阅读了很多文档,但是大多数文档建议事先为每种项目定义Jenkins的奴隶.我希望一切都尽可能动态,并尽可能减少Jenkins的配置.

如果你曾经实现过类似的东西,我将非常感谢你对测试过程的描述.如果你认为我的目标是不可能的,如果你能向我解释原因,我也将不胜感激.

testing automated-tests jenkins docker jenkins-docker

10
推荐指数
1
解决办法
2472
查看次数

如何正确地将 ssh 密钥文件从 Jenkins 凭据变量传递到 docker build 命令?

这个问题是这个问题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 …

credentials jenkins docker devops jenkins-docker

8
推荐指数
1
解决办法
7376
查看次数

如何找到在Jenkins"Docker插件"中使用的"Docker主机URI"?

有没有我们可以运行的命令并找到"Doc​​ker Host URI"?我找到了一些相关的问题,但没有得到它.

docker jenkins-docker

7
推荐指数
4
解决办法
9097
查看次数

设备上没有Jenkins和Docker的空间 - 如何正确清理

我们在Ubuntu 16.04.1服务器上运行Jenkins(版本2.60.1).我们最近遇到的一个问题是我们经常得到错误" 设备上没有剩余空间 ".

我知道在使用Docker时需要进行严格的清理过程,因为文件会留下并占用不必要的空间.

我们使用CloudBees Docker Build and Publish插件来处理构建并推送到AWS ECS.我想删除所有未使用的图像.问题是如果我登录Jenkins实例(通过SSH)并尝试运行它提供的docker命令 - "无法连接到Docker守护程序.这个主机上是否运行了docker守护程序?"

我想我需要在Jenkins环境或插件的一部分中做到这一点?

有人之前处理过此事或有过一些建议吗? - 我真的很感激.

jenkins jenkins-plugins cloudbees docker jenkins-docker

6
推荐指数
2
解决办法
7750
查看次数

jenkins 声明式管道中的模板 docker 代理

我有一个使用 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

6
推荐指数
0
解决办法
1064
查看次数

Jenkins Amazon ECR:没有基本的身份验证凭据

我无法用Jenkins Pipeline将ocker图像推送到Amazon ECR:我总是得到no basic auth credentials:-(

这是我的设置:

  • 詹金斯2.46.2
  • Amazon ECR插件1.4
  • 我已将AWS凭证添加aws-jenkins到Jenkins(在本地测试并成功推送到AWS ECR)
  • 我打印/root/.dockercfg到我的调试authJenkinsfile

Jenkinsfile:

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)

jenkins jenkins-docker jenkins-pipeline amazon-ecr

5
推荐指数
1
解决办法
2633
查看次数

从詹金斯内部的Docker容器获取日志

我试图让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)

java jenkins docker jenkins-docker jenkins-pipeline

5
推荐指数
2
解决办法
6538
查看次数

在多个阶段之间在Jenkins中重用代理程序(docker容器)

我有一个具有多个阶段的管道,并且我想仅在“ 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 jenkins-docker jenkins-pipeline

5
推荐指数
2
解决办法
4684
查看次数