Tag: jenkins

Jenkins 2.0:在Docker容器中运行SBT

我有以下Jenkinsfile : def notifySlack = { String color, String message -> slackSend(color: color, message: "${message}: Job ${env.JOB_NAME} [${env.BUILD_NUMBER}] (${env.BUILD_URL})") } node { try { notifySlack('#FFFF00', 'STARTED') stage('Checkout project') { checkout scm } scalaImage = docker.image('<myNexus>/centos-sbt:2.11.8') stage('Test project') { docker.withRegistry('<myNexus>', 'jenkins-nexus') { scalaImage.inside('-v /var/lib/jenkins/.ivy2:/root/.ivy2') { c -> sh 'sbt clean test' } } } if (env.BRANCH_NAME […]

Jenkinsfile:在Docker容器中运行sh步骤时拒绝了权限

我运行一个简单的Jenkinsfile有困难 – 例如 pipeline { agent { label 'ssh-slave' } stages { stage('Shell Test') { steps { sh 'echo "Hello World"' } } } } 主人Jenkins的日志文件显示容器已成功启动,但构build作业崩溃,并显示一条消息 sh: 1: /home/jenkins/workspace/pipeline@tmp/durable-34c21b81/script.sh: Permission denied 这里是我们configuration/计算出来的一些额外的东西: 我们正在使用RHEL的虚拟机上运行代理 我们使用Jenkins的Docker Plugin来启动/pipe理单独的Jenkins代理上的容器 我们在Jenkins插件中使用Connect with ssh方法启动Docker容器,并使用jenkinsci / ssh-slave Docker镜像 Jenkins在Docker容器中使用root用户(至less/home/jenkins/…所有文件都是以root身份创build的 当我们在pipe道和docker exec…添加一个sleep步骤到正在运行的容器时,如果我们试图用./script.sh来运行它(即使我们设置了正确的文件模式与之前的chmod +x script.sh ) – 我们也得到sh: 1: permission denied 。 但是我们可以运行脚本,如果我们使用sh script.sh […]

在容器中运行Jenkins Job

我有几个Jenkins作业和几个Jenkins从节点(物理机器)。 这些奴隶都运行docker1.12.1。 我想要这些工作任何这些奴隶上运行。 由于这些作业具有不同的环境要求,因此我认为可以为每个不同的环境创build泊坞窗图像,然后在作业“内部”指定作业将运行的容器。 这可能吗? 即在这些工作中指定一个特定的docker集装箱,我希望这些工作运行? 在工作结束时,集装箱将被销毁,只有工件和报告将保留。 在jenkins有几个docker插件,但我还没有find一个正是我想要的东西。

如何finddockerrestAPI的url?

我已经安装了jenkins的docker构build步骤插件。 文档告诉我: Name :Choose a name for this Docker cloud provider Docker URL :The URL to use to access your Docker server API (eg: http://172.16.42.43:4243) 如何find我的url到其余的API(我的主机上安装了docker)

ENTRYPOINT Docker指令在扩展图像时如何反应

我想知道遗产发生时是否会对ENTRYPOINT指令作出反应: 比方说,我有一个叫 jenkins的图片 FROM java:8-jdk RUN … ENTRYPOINT ["/bin/tini", "–", "/usr/local/bin/jenkins.sh"] 通过运行这个图像, ENTRYPOINT指令将启动并按预期安装应用程序 现在让我们来说说我想用一个新的Dockerfile来扩展这个图片 ,我把它称为: jenkins-custom FROM jenkins # enable start tls RUN echo "JENKINS_JAVA_OPTIONS=\"-Dmail.smtp.starttls.enable=true\"" >> /etc/default/jenkins RUN chown jenkins:docker /etc/default/jenkins 我应该考虑: jenkins入口点在我的新行后触发。 在我的新行之前,入口点会被触发。 入口点不会被触发。 在我的例子中,我想在默认的Jenkins泊坞窗图像中激活STARTTLS,我应该重新启动第二个图像的过程吗? 谢谢大家 ;)

让Jenkins在更新图像时“更新”正在运行的Docker容器的最佳方法

我们的组织对于Docker和Jenkins来说是比较新的。 我们正在开发从(Java)源代码更新到运行应用程序的CIpipe道。 目前Jenkins正在使用Cloudbees Docker Build and Publish插件在成功构build之后更新映像。 它只是拉取基础(JBoss)的图像,并使用刚刚构build的应用程序的WAR文件(通过Maven)更新它。 我们正在使用“通过SSH发送命令”构build步骤,以SSH方式进入服务器(当前正在运行的)容器处于打开状态,停止具有指定图像ID的容器,然后重新拉动并随后运行该容器。 但是,我知道必须有一个更好,更优雅的方式来做到这一点。 令人惊讶的是,我很难find如何做文档。 任何意见,将不胜感激。 请告诉我。

从jenkins开始的Tcl脚本将命令转为小写

在jenkins中运行tcl命令时遇到一个奇怪的问题。 tcl脚本有以下几行( 注意Id中的大写字母I ): foreach name $docker_names { set name "TestName" puts $name set command "docker inspect –format='{{.Id}}' ${name} > /home/temp/id.txt" send — "$command\n" expect "$" } 在jeknins日志中,我看到作业失败,因为在循环的第二个迭代中发送的是上面的命令,但是是小写的。 我需要我身份证上的大写。 这是在循环的第二次迭代中发送的内容 : docker inspect –format='{{.id}}' testname > /home/temp/id.txt 注意:在第一次迭代中,一切正常发送。 任何人都知道为什么会发生这种情况? 谢谢!

在Jenkins从节点上运行的Jenkinsfile中执行docker build命令的最简单的方法是什么?

什么我想要我的Jenkinsfile做的基本例子: node { sh 'docker build -t foo/bar .' } 好像我需要将docker安装到正在执行我的Jenkinsfile的Jenkins从属映像上。 有这样一个简单的方法吗? (jenkins的奴隶形象本身就是docker集装箱) 我的假设是否正确? 当与Jenkins主/奴隶运行时,jenkins文件由jenkins奴隶执行 通过pipe理插件部分(例如Docker插件或Gcloud SDK插件)安装的Jenkins插件只安装在Jenkins主站上,因此我需要手动构build我的Jenkins从Docker镜像并在镜像上安装Docker。 因为我也需要访问'gcloud'命令(我通过Kubernetes Helm / Charts运行Jenkins),所以我一直使用gcr.io/cloud-solutions-images/jenkins-k8s-slave图像作为我的Jenkins奴隶。 目前它错误地说“docker:找不到”

如何在Jenkins的Docker容器中运行多个命令?

我有一个复杂的构build和testing过程,我想在Docker容器中运行。 由于被测软件激活了一些xterm窗口,我使用supervisord在容器内运行X服务器和VNC来启动它们。 然后,一旦容器运行supervisord作为入口点,我可以使用docker exec手动启动构build和testing过程。 我无法确定使用Jenkins和Docker Pipeline插件执行此操作的方法。 目前版本的插件似乎有一些限制,我不能充分解决。 这是基本的想法: node { stage('Fetch installer') { // SCM commands go here } def image = docker.image('metatest') image.inside() { stage('Run installer') { sh "./installer.sh" } stage('Run tests') { sh "/opt/custom/run_tests.sh" } } } 然而,这种方法被破坏了,因为image.inside()方法覆盖了默认用户(它设置为Jenkins的用户ID)和入口点。 我需要能够使用默认的root用户启动Docker容器,因为X服务器进程必须是root用户。 但是,我需要在容器中运行安装和testing,作为Jenkins非root用户,以便Jenkins可以pipe理输出材料。 对于logging, image.inside()在启动Docker容器时设置了许多非常有用的参数: docker run -t -d -u 113:123 \ -w "/var/lib/jenkins/workspace/TestProj" \ -v […]

Docker:如何将容器及其数据克隆到一个新的

有没有办法将容器及其数据克隆到具有不同启动参数的新容器中? 目前,我只能启动一个新的克隆容器(从自定义图像),没有数据。 我告诉你我必须做什么:我启动了一个带有一些启动参数的“docker-jenkins”容器,然后configuration它,但是现在我注意到我忘记了一些重要的启动参数,所以我想重新启动相同的容器,添加更多的启动参数。 .. 问题是(如果我理解的很好),我不能修改现有的运行容器的起始参数,所以我的想法是开始一个克隆的(数据INCLUDED)具有不同的参数,但我不知道如何做… 有人能帮我吗?