【问题标题】:How to configure Jenkins to automatically build from git branches and deploy each build to it's own server like dev, test and prod如何配置 Jenkins 以自动从 git 分支构建并将每个构建部署到它自己的服务器,如 dev、test 和 prod
【发布时间】:2018-01-17 15:46:43
【问题描述】:

我是 Jenkins 的新手,我想配置一个可以持续构建和部署到三个不同环境的作业。 我的 git repo(开发、测试、产品)中有三个分支。每当某些更改推送到其中一个分支时,我希望 jenkins 为该特定分支开始构建并将其部署到它自己的服务器上。 我知道我可以为每个分支设置一个单独的作业,但是由于所有分支的构建任务都是相同的,我想为所有分支使用一个构建作业并根据分支触发每个部署作业。

【问题讨论】:

  • 我对部署到自己的服务器感到困惑??
  • @ChandraSekhar 我想说的是我有用于开发构建的开发部署环境和用于测试构建的测试等等。在我的詹金斯设置中,我为每个环境都有一个部署工作。那么如何根据构建的分支调用它们中的每一个呢?

标签: git jenkins


【解决方案1】:

您想要做的事情包含三个组成部分:

  • 定义要从中提取的 git 存储库和分支。
  • 确定您希望多久检查一次或被告知远程存储库上的更改。
  • 您要构建的内容。

要定义 git 存储库和分支,您需要使用 git plugin。如果没有通过http://your.jenkins/pluginManager 的插件管理器页面安装,您可能已经安装了它。

在上图中,我定义了 git 存储库,并指定了我要跟踪的分支。

其次,您需要决定多久检查一次远程存储库上的更改。这是在构建触发器中管理的。

您可以轮询遥控器,但这非常低效。

相反,我建议您寻找一个从您的 git 服务器接受 webhook 的插件。你可能想看的主要是

这些插件将允许您在 git 服务器/服务上配置 webhook,并在进行更改时向您的 Jenkins 主机发送消息。

最后,您需要决定要构建什么(以及在哪里)

您可以通过多种方式做到这一点 - 一种方式是使用 ${GIT_BRANCH} 环境变量传递给脚本,然后该脚本将决定部署什么以及在哪里部署。

以 Shell 构建任务为例

# run a script passing in the Git Branch that triggered this build
make build-the-things ${GIT_BRANCH}

您不需要使用 Makefile,您可以将其传递给脚本。

python build-the-things.py ${GIT_BRANCH}

您在脚本中执行的操作将决定您的构建和部署步骤。

【讨论】:

  • 在上面的 Build 部分中,我设置了“Invoke top-level-Maven targets”部分,用于将代码打包到一个 war 文件中。之后我应该添加脚本吗?你能解释一下脚本在做什么吗?
  • 上述 Jenkins 作业是作为 Freestyle 项目创建的。我不熟悉 Maven 项目,但原则应该是相同的。您可以在构建时阅读它,而不是将${GIT_BRANCH} 传递到您的脚本中。 stackoverflow.com/questions/10463077/… 可以帮助您从 pom.xml 中提取环境变量
【解决方案2】:

我已经通过类似的示例完成了此操作,您可以尝试检查它是否有效。 然后您可以添加 POLL SCM 选项并包括检查您的存储库的时间,它适用于我,对特定分支所做的更改正在构建而留下另一个

【讨论】:

  • Sekhar 感谢您的快速回复。我已经进行了这样的配置,但是在构建完成后,您如何配置部署作业?假设主构建刚刚完成,它如何知道构建来自主分支?以另一种方式,您如何设置构建后操作来开始您的部署构建?
  • 您需要为每个不同的分支构建使用不同的部署过程。对不起,我对此有点困惑,也对此发表了评论。
  • 这些是我为构建过程所做的事情。
  • 首先,我设置源代码管理,然后设置池 SCM 计划,然后在构建部分添加调用 yop 级 Maven 目标来构建和打包我的项目。在那之后,我真的不知道如何触发我的部署作业。之后有什么方法可以调用我的部署作业吗?
  • 您可以在 maven 构建后使用构建后操作调用部署作业
【解决方案3】:

我最近也在学习这个。当检测到更改时,您必须使用“git hooks”来运行脚本。这是一个教程:https://gist.github.com/Nilpo/8ed5e44be00d6cf21f22 有了这个,我在推送到远程的任何时候都成功地更新了我的远程项目。

https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks 中的服务器端钩子部分对于确定调用哪些钩子以及何时调用也很有帮助。

【讨论】:

    猜你喜欢
    • 2019-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多