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

时间:2018-09-26 18:02:43

标签: git shell jenkins build pipeline

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

谢谢。

2 个答案:

答案 0 :(得分:0)

此答案假设(根据您的评论):

  • 您有一个conteiner,其中有一个git裸存储库(A),
  • 您的conteiner中装有jenkins安装程序(B),
  • 您想从(B)中的(A)克隆/签出代码。

在容器B上,您需要:

  • 创建ssh密钥对
  • 设置A后,通过执行git clone ssh://username@containerA/path/to/repo.git
  • 克隆代码

在容器A上,您需要:

  • 创建用户username
  • 将B上生成的公钥复制到username的{​​{1}}
  • 暴露22个端口

答案 1 :(得分:-1)

好问题。

在几乎所有实际情况下,詹金斯都必须要求与目标服务器(例如tomcat,jboss,容器等)进行某种类型的通信

对于用于Java应用程序的tomcat或jboss,此服务器公开一个http端点,该端点允许远程客户端(如jenkins)或插件上载构建工件以进行部署。

在使用docker解决方案的情况下,jenkins必须能够连接到docker主机才能执行docker build,run等docker命令

在使用诸如heroku,openshift等之类的saas解决方案的情况下,所有复杂的基础架构都由它们来管理。开发人员用户只需推送源代码即可。

这里有一些方法

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

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

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

执行从jenkins到本地docker(如果您的jenkins在docker容器的同一主机中)或在远程linux远程(如果jenkins和docker在不同的机器中)的这一行。

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

也许您可以先压缩源代码,然后再将其复制到容器中。

  

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

方法2:部署端点

  • 开发一个容器,该容器公开名为 / deploy 的终结点。该端点接收您的工件(如Java)或仅接收文件(如php,nodejs等)。
  • 从jenkins发送工件,执行对 / deploy
  • 的http请求
  • 其他想法:/ deploy必须返回成功或失败,才能检测到部署状态

这种方法是干净的,因为您不需要疯狂的Shell脚本即可将工件或源代码传递给活动的Docker容器。

  

在这种情况下,Jenkins不需要与您的Docker容器进行低级通信(ssh)。甚至您的容器应用也可以部署在其他云中,例如亚马逊,天蓝色或谷歌。

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

  • 使用ssh-agent,git,语言(java,node等)等现成的配置创建docker镜像
  • 在构建或运行阶段在容器内克隆源代码
  • 在构建或启动映像时,请按以下顺序执行以下任务:克隆源代码,构建并启动。
  • Jenkins只会构建或启动此图像docker run ...,并发送git_url等参数。
  

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

方法4:创建类似heroku或openshift的内容