将源代码从github复制到Jenkins中的docker容器

将源代码从github复制到Jenkins中的docker容器,git,shell,jenkins,build,pipeline,Git,Shell,Jenkins,Build,Pipeline,我的github中有一个源代码。我在jenkins中构建了一个自由风格的作业,并在SCM部分给出了git存储库。我需要编写一个shell脚本,将此源代码复制到外部运行的容器中。谁能帮忙吗 提前谢谢。问得好 在几乎所有实际情况下,Jenkins都必须需要与目标服务器(如tomcat、jboss、containers等)进行某种类型的通信 在tomcat或jboss for java应用程序的情况下,该服务器公开了一个http端点,该端点允许远程客户端(如jenkins)或插件上传构建工件以部署它们

我的github中有一个源代码。我在jenkins中构建了一个自由风格的作业,并在SCM部分给出了git存储库。我需要编写一个shell脚本,将此源代码复制到外部运行的容器中。谁能帮忙吗

提前谢谢。

问得好

在几乎所有实际情况下,Jenkins都必须需要与目标服务器(如tomcat、jboss、containers等)进行某种类型的通信

在tomcat或jboss for java应用程序的情况下,该服务器公开了一个http端点,该端点允许远程客户端(如jenkins)或插件上传构建工件以部署它们

对于docker解决方案,jenkins必须能够连接到docker主机,以便执行docker命令,如docker build、run等

对于像heroku、openshift等saas解决方案,所有的基础设施都由他们管理。开发者用户只需要推送源代码

这里有一些方法

方法1:将文件从jenkins主机复制到容器

这是一个如何将文件从主机复制到活动容器的示例

docker cp/file/in/host/foo.txt mycontainer:/foo.txt

从jenkins到本地docker(如果您的jenkins位于docker容器的同一主机中)或远程linux中的remote(如果jenkins和docker位于不同的机器中)

在第二种情况下(远程docker),所有代码也必须在远程机器中克隆

也许您可以在将源代码复制到容器之前压缩源代码

Jenkins必须有权访问docker才能执行docker命令

方法2:部署端点

  • 开发一个容器,公开一个名为/deploy的端点。该端点接收您的工件(如java)或文件(如php、nodejs等)
  • 从jenkins发送工件,执行http请求到/deploy
  • 其他想法:/deploy必须返回成功或失败,以便检测部署状态
这种方法是干净的,因为您不需要疯狂的shell脚本将工件或源代码传递给一个活的docker容器

在这种情况下,Jenkins不需要与docker容器进行低级别通信(ssh)。甚至你的容器应用程序也可以部署在其他云上,比如亚马逊、azure或谷歌

方法3:在容器内克隆源代码

  • 使用诸如ssh代理、git、语言(java、节点等)等现成配置创建docker映像
  • 在构建或运行阶段克隆容器内的源代码
  • 构建或启动映像时,按以下顺序执行此任务:克隆源代码、构建和启动
  • Jenkins将创建或启动此映像
    docker run…
    发送git_url等参数
Jenkins必须有权访问docker才能执行docker命令

方法4:创建类似heroku或openshift的东西

  • 实施方法3
  • 使用jenkins:()中的webhook配置检测git推送事件
  • 当检测到推送事件时,jenkins必须检测存储库的编程语言,并将启动方法3的酷docker映像
  • 通过电子邮件或类似的方式通知部署结果
  • 让它开源
此答案假设(根据您的评论):

  • 您有一个conteiner,其中有一个git裸存储库(a)
  • 您有一个conteiner,其中有jenkins安装(B)
  • 您希望从(B)中的(A)克隆/签出代码
在容器B上,您需要:

  • 创建ssh密钥对
  • 设置后,通过执行
    git clone来克隆代码ssh://username@containerA/path/to/repo.git
在容器A上,您需要:

  • 创建用户
    username
  • 将B上生成的公钥复制到
    用户名
    ~/.ssh/authorized\u keys
  • 暴露22端口

您到底想实现什么目标?您有3个组件:GitOrigin、jenkins、docker容器启动的独立主机,对吗?你想从Jenkin的工作中开始拉git origin docker容器吗?是的,我在一个容器上有Github,在另一个容器上有jenkins。现在使用jenkins free风格的作业,我需要将github上的源代码复制到另一个容器中。您的“github”是您的“Git服务器”吗,而不是github.com或github Enterprise?您是否进一步了解容器通常是如何工作的,也就是说,它们涉及到图像构建过程而不是更新过程?因为从我在你的问题和评论中读到的内容来看,听起来你对容器缺乏一些基本的理解(或者这只是一个语言障碍)。这是一个容器中的github.com。你认为这与最初的问题有多密切的关系?@JRichardsz,谢谢你的详细解释。我尝试了方法1,但问题是docker中的docker。我在docker集装箱上运行jenkins。因此,将代码从jenkins复制到另一个容器是一项任务。我在容器中安装了docker并尝试了docker cp,但它不起作用。我的问题是使用jenkins作业将源代码复制到另一个容器。你能帮我吗\pYashRao,让我们考虑一个更优雅的解决方案:运行SSH的数据容器。。请不要滥用容器;)关于A和B容器,你是对的。我想使用jenkins将代码推送到另一个容器Cjob@StephenKing你能提出解决这个问题的“容器方法”吗?阅读docker教程,你会学到为新的应用程序版本构建新的映像。所以Jenkins会建立一个新的映像并将其推送到注册表。这张图片随后被发布,而不是前一张。@StephenKing,但这与jenkins的做法相反。詹金