使用 AWS CodePipeline 在 Jenkins 中构建多个 Gradle 项目

Posted

技术标签:

【中文标题】使用 AWS CodePipeline 在 Jenkins 中构建多个 Gradle 项目【英文标题】:Building multiple Gradle projects in Jenkins with AWS CodePipeline 【发布时间】:2018-03-18 18:26:28 【问题描述】:

我有一个 Gradle 项目,它由一个主项目和另外两个包含使用 includeFlat 指令的项目组成。这 3 个项目中的每一个在 GitHub 上都有自己的存储库。为了构建它,我将所有 3 个项目检入到一个通用的***文件夹中,然后将cd 检入主项目并运行gradle build。而且效果很好!

现在我需要将生成的应用程序部署到 AWS EB (Elastic Beanstalk),当我在本地生成工件然后手动部署它时,它也很有效。我想自动化该过程,因此我尝试使用 CodePipelines + Jenkins 进行设置,如 this document 中所述,针对 Gradle 进行了调整。

问题是,如果我在管道中指定 3 个源,我最终会将我的项目提取到彼此之上,从而在 Jenkins 工作区中造成混乱。我需要以某种方式将每个项目配置为输出到 Jenkins 工作区中自己的目录,我只是看不到这样做的方法(至少在 UI 中)

然后,当然,即使我实现了我想要的,我也需要以某种方式将cd 进入主目录以运行gradle build,但我不知道该怎么做

附: @Phil 的好建议,但不幸的是 CodePipeline does not currently support Git 子模块或子树

【问题讨论】:

你不能使用像 git 子模块这样的东西吗? git-scm.com/docs/gitsubmodules 有趣的想法,虽然我更喜欢扁平的项目结构 但是你不是已经为每个项目都有单独的回购了吗?您可以创建另一个父项目,将它们全部作为子模块包含在自己的目录中,并将其用于您的构建 所以问题是我无法控制 CodePipeline 如何调用 git clone 并且我的子模块有空文件夹。有一个--recursive 开关,但如何应用它?附:不好看forums.aws.amazon.com/thread.jspa?threadID=248267 在 AWS 论坛 forums.aws.amazon.com/thread.jspa?threadID=265274 上链接回同一问题 【参考方案1】:

当 3 个存储库中的任何一个发生更改时,我将开始共同构建。假设有 5 分钟的延迟,即使对不止一个 repo 进行了更改,也可以进行单个构建。

除了使用 eb deploy... 旧方式之外,我看不到处理部署的好方法... 请在您的 jenkins 机器上安装 aws 工具。创建成功构建时触发的部署作业。并将 bash 脚本放在那里进行部署。请提供有关您的部署的更多详细信息,这样我可以帮助编写部署脚本。

【讨论】:

Jenkins 已经在 EC2 上运行。我不清楚你要去哪里?我想我已经足够清楚地说明了我的问题:3 个 GitHub 项目,1 个主项目,2 个子项目(includeFlat)。我认为您的提议与我在对主帖的评论中所描述的差不多:触发所涉及的项目,忽略初始代码并从 gradle 脚本(在您的情况下为 bash)执行 scm。不幸的是,在这一点上,这对我来说不值得麻烦 在您的 jenkins 上安装 aws 工具,使用 eb 实用程序。创建将部署您的工件的作业。或以其他方式-在jenkis上手动执行您正在执行的操作。也许使用脚本,而不是在 aws 控制台中,但这只是不同的工具。

以上是关于使用 AWS CodePipeline 在 Jenkins 中构建多个 Gradle 项目的主要内容,如果未能解决你的问题,请参考以下文章

AWS CodeBuild + CodePipeline:“找不到匹配的工件路径”

如何停止 aws codepipeline 部署阶段

AWS:帮助在 Codepipeline 中设置 CodeDeploy

AWS CodePipeline:同时运行多个管道

将参数添加到 AWS CloudFormation / CodePipeline 堆栈

在 AWS Codepipeline 中使用 pytest 时导入文件不匹配