Jenkins介绍
前言
目前的软件开发与创新速度,软件开发的效率和质量比以往任何时候都更加重要。对于我们这些在游戏行业打拼的人来说,找到那些能让我们的工作生活变得更简单的工具就像找到宝贝一样。这就是笔者想谈谈Jenkins的原因。Jenkins不仅是个工具,更像是我们的一个随时听命的管家——可以自动化我们的许多繁琐任务,从代码构建到部署,一切都能帮我们解决。
特别是在中国的手游开发领域,Jenkins应用实际上还是比较广泛的,深究的话因为游戏太过于复杂,git自带的流水线并不能满足我们的需求。但是笔者注意到,虽然很多人都听说过它,却不一定知道如何开始使用它,尤其是在安装和配置上可能会遇到的一些挑战。
所以,笔者决定开始写一整套Jenkins相关的文章。无论你是刚入门的新手,还是想要深入了解Jenkins如何能在你的项目中发挥更大作用的资深开发者,笔者都希望这些文章都能给你带来帮助。作为这套系列的第一篇文章,笔者会从Jenkins为什么对我们这些在手游行业的开发者如此重要讲起,介绍一些基本功能,后续文章会介绍如何在不同的平台上安装使用。当然,笔者更偏重分享一些实际的使用案例,在项目中使用Jenkins的能力,比如自动化,流水线,以及如何围绕Jenkins做工具开发等,希望能激发你的灵感。
Jenkins在国内手游业界内的重要性
自从笔者加入网易游戏开始,Jenkins可以说一直是笔者职业生涯的重要伴侣,甚至笔者家里的定时脚本也使用的Jenkins进行管理。作为QA/测试开发(以下简称QA)的一员,在网易游戏项目组,Jenkins的角色不仅仅是一个自动化工具,它是整个自动化流水线的核心。策划团队仅需通过Excel进行数据填写,后续全部由Jenkins执行,整个项目组便都会收到更新(即patch操作),这种方式极大地简化了游戏内内容更新的流程,使得项目组的日常开发工作变得更加高效。
Jenkins的通用性也意味着它主要由QA团队负责管理。QA不仅需要精通Jenkins的操作,还要围绕它开发一系列辅助工具,以支持项目组的需求。因此,对于任何希望加入网易或其他网易系游戏项目组的测开向QA来说,深入理解和掌握Jenkins是进入门槛的一部分。
Jenkins的作用介绍
Jenkins,这个在软件开发界里闪耀其光芒的工具,对于我们游戏开发者来说,更像是一位默默无闻的英雄。它不仅仅是一个自动化服务器,更是推动我们项目向前发展的强大引擎。想象一下,一个能自动完成繁琐任务、确保软件质量、并加速开发流程的神器,这就是Jenkins。以下是Jenkins的主要功能,也是笔者在游戏项目组QA中经常使用Jenkins的能力:
自动化构建与部署:
Jenkins让我们能够自动化几乎所有类型的构建和部署任务。这意味着每当有新的修改提交时,Jenkins可以定时或使用脚本触发自动启动构建过程,确保功能能够自动化的快速迭代。而对于游戏更新,Jenkins也能自动部署到测试环境,让项目组各个职能尽快获取到新内容。
持续集成/持续交付(CI/CD):
Jenkins是实现CI/CD的理想工具。通过自动化测试和构建,在自动化能力的同时,其CI能力优秀的拓展性和稳定性减少了集成问题,加快了软件的交付速度。在手游开发中,这意味着我们可以更快地迭代新功能和修复,保持游戏的竞争力。
插件生态系统:
Jenkins的一个巨大优势是其庞大的插件生态系统。不管你的需求有多特别,几乎总有一个插件能满足你。这为游戏开发提供了极大的灵活性,无论是跨平台构建、性能测试,还是与其他工具的集成,Jenkins都能轻松应对。
Jenkins API接口功能
除了Jenkins自身的自动化构建、部署和持续集成/交付(CI/CD)能力之外,它的API接口为自动化和功能拓展提供了无限可能。这些API接口允许开发者和自动化工具查询构建状态、触发新的构建、甚至管理Jenkins的配置。这意味着我们可以将Jenkins无缝集成到我们的工作流程中,实现更高级的自动化策略。如自动化任务管理,触发构建和测试,集成第三方工具等,在笔者所在的游戏项目组中,Jenkins经常作为工具的控制执行者或者通过API成为工具的被调用者两种角色,所以熟练掌握Jenkins API调用是QA的必备能力,后面也会有专门的文章介绍如何使用API和踩坑点
监控与报告:
Jenkins提供了强大的监控和报告功能,让项目团队能够实时监控构建状态和测试结果。这对于及时发现和解决问题至关重要,保证了项目的顺利进行。
通过以上这些功能,Jenkins不仅提高了开发和部署的效率,还提升了软件的质量和稳定性。对于笔者这些在手游行业中的开发者而言,Jenkins就像是一支魔法棒,帮助我们将创意转化为现实,同时确保我们能够在这个快速发展的行业中保持领先。
游戏项目组中的使用案例
笔者因为只在网易系待过几个项目组,但是网易系项目组在使用Jenkins方面大同小异,也可以管中窥豹,这里举几个比较常用的例子:
自动化构建与部署
Jenkins的核心功能之一是支持多平台自动化构建与部署。考虑到游戏项目通常涉及多个开发分支,并需要为PC、Android、iOS、mac等平台分别构建和发布游戏包,Jenkins的灵活性和强大的自动化管理功能成为我们选择它的主要原因。通过配置不同的构建任务,每个任务针对特定的平台和需求,我们能够确保游戏的持续集成和快速部署。
工具相关
Jenkins不仅仅是构建和部署的利器。它的API支持和多语言兼容性,尤其是对Python的支持,使得QA团队能够快速开发出一系列自动化工具。这些工具不仅能监控构建状态,及时发现并通知维护团队解决问题,还能通过定时触发或API触发的方式,自动执行诸如仓库检查、美术资源检查等任务,间接或直接的提升了项目进度和易用性。
以下是一个简单的代码示例,展示了如何利用Jenkins API下载构建日志:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import requests
def download_jenkins_log(url, file_name):
try:
response = requests.get(url, auth=('admin', "admin"), stream=True)
response.raise_for_status()
with open(file_name, 'wb') as file:
for chunk in response.iter_content(chunk_size=8192):
if chunk: # 过滤掉keep-alive新块
file.write(chunk)
print(f"日志已成功下载到 {file_name}")
except requests.exceptions.HTTPError as errh:
print(f"Http 错误: {errh}")
download_jenkins_log(url, "test")
展开