热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

某小型公司持续集成工具jenkins实践文末送书

点击上方[全栈开发者社区]→右上角[]→[设为星标⭐]作者:邵磊juejin.impost599fd5d151882524397f9fd3前言本文可能是网上最全

点击上方[全栈开发者社区]右上角[...][设为星标⭐]

作者:邵磊

juejin.im/post/599fd5d151882524397f9fd3

前言

本文可能是网上最全的一篇全端jenkins部署解决方案介绍的文章,一直以来,领导都想解决代码提交和打包问题,尤其是小公司,打包流程混乱,造成线上版本和代码库git或svn中代码不一致问题。加入jenkins阵营,解决众多发包难题,显得刻不容缓。

研究过程

刚开始,我一直在docker下安装jenkins,按时长租用阿里的主机,用阿里容器服务做实验,反复创建docker容器,建立多个jenkins节点。结果发现,在容器中配置各种变量比较复杂,各种开发环境不易快速部署,当然啦,是刚开始的对jenkins研究过少造成的。

后来我采用了windows主机,配java、maven、Android环境,踩了一路坑,终于搞定了。但是我知道ios开发和编译必须使用mac系统,本来想增加一个jenkins节点来实现ios的编译。

当配置好之后,我突然改变了主意,与其两台电脑开着,不如索性把整个jenkins部署到mac系统下(毕竟我们公司暂时没有c#工程)。于是,所有的操作,所有的环境我又折腾了一遍。

下面我逐一讲解最终mac下实现全端jenkins持续集成,当然不包含c#,一路踩坑下来,我觉得这都不是事,流程都差不多。

效果图

安装jenkins

我个人比较喜欢新事物,所以建议使用较高版本,我使用的2.61,目前最新版是2.75。

mac下使用brew安装,终端执行

brew install jenkins

等安装完成后,终端运行jenkins即可启动。

jenkins

安装 xcode

这个比较简单,直接从appstore下载最新版即可。安装后,将公司项目拉入xcode,先保证项目在本机编译,这里我登录了app开发者帐号,以便下载各种证书及发布。

安装 Android studio

这个到这里下载www.android-studio.org/

同理将本地项目拉入,运行。这一步主要是怕开发环境引起的坑,先把项目跑起来,后面坑会少点。

进入设置,复制出sdk文件路径,后面需要使用。我这里是/Users/Shaolei/Library/Android/sdk

安装git

因为我们公司用的是git,如果贵公司使用svn,则同理,只需保git或者svn命令可以敲出来即可。

我这里的版本比较老,尽量使用新的,我懒得换了。

mac:~ shaolei$ git version
git version 2.11.0

安装source tree

这是一个非常好用的git可视化工具,改天会具体介绍它的强大功能。

这款软件不是必须的,只是为了方便项目拉取,所以,你可以跳过此步骤。

配置jenkins环境

这里才是至关重要的一项,本文的核心

配置插件

1.Android Emulator Plugin

Starts an Android emulator with given properties before a build, then shuts it down after.

2.build timeout plugin

This plugin allows builds to be automatically terminated after the specified amount of time has elapsed.

3.Email Extension Plugin

This plugin is a replacement for Jenkins's email publisher

4.Gradle Plugin

This plugin allows Jenkins to invoke Gradle build scripts directly.

5.Keychains and Provisioning Profiles Management

This plugin integrates management of keychain and provisioning files for iOS and OSX projects.

6.Maven Integration plugin

This plug-in provides, for better and for worse, a deep integration of Jenkins and Maven: Automatic triggers between projects depending on SNAPSHOTs, automated configuration of various Jenkins publishers (Junit, …).

7.Pipeline

A suite of plugins that lets you orchestrate automation, simple or complex. See Pipeline as Code with Jenkins for more details.

8.Pipeline: GitHub Groovy Libraries

Allows Pipeline Grrovy libraries to be loaded on the fly from GitHub.

9.SSH Slaves plugin

Allows to launch agents over SSH, using a Java implementation of the SSH protocol.

10.Subversion Plug-in

11.Timestamper

Adds timestamps to the Console Output

12.Workspace Cleanup Plugin

This plugin deletes the project workspace after a build is finished.

13.Xcode integration

This plugin provides builders to build xcode projects, invoke agvtool and package .ipa files

其中Android Emulator Plugin、Gradle Plugin是安卓必须插件;其中Keychains and Provisioning Profiles Management、Pipeline、Xcode integration是ios编译必须插件;

其中Maven Integration plugin、SSH Slaves plugin是maven项目必须插件,其他的Email Extension Plugin这个是为了编译失败的时候通知具体提交代码开发人员邮件

配置系统设置

Local Maven Repository为maven仓库地址;如果本机没有安装maven,可能需要增加maven仓库;

下面需要加入安卓环境变量,即上文中提到的那个sdk地址;

这里配置github地址,邮件用户名密码,注意发件人的邮箱必须上面jenkins注册是管理员邮箱是一个,否则一直失败,这里是个坑。

增加计划

Android 项目job

创建安卓job

配置项目的git库地址

下面配置触发器,每隔1分钟检查一次git库,也可以使用subscribe订阅,这里暂不做讲解。

设置编译后,将文件拷贝到一个文件目录。这里使用smb协议连接到了一个内网文件服务器上,方便测试部门测试。

至于具体为何执行2次拷贝,是因为项目同时编译测试环境地址和真实环境地址,只有连接的服务器地址不通,其他代码都相同,具体实现可看另外一篇博文:

https://juejin.im/post/59302a0fa22b9d0058b785bc

ios项目job

和安卓相同的源代码管理及触发器不做介绍,请参照安卓,下文同理。

这里需要配置ios项目的tagert,可以通过xcode打开查看,勾选Pack application and build .ipa?,使jenkins生成ipa包

配置证书地址和密码,这里指的是Keychain

Keychain path默认地址为/Users/shaolei/Library/Keychains/login.keychain,其中shaolei为mac登录的用户名,密码就是登录密码。失败时邮件发送至影响代码的配置请参照安卓,下文同理。

同时编译两个ipa包请查看:

https://juejin.im/post/59648bb05188250cf956e3ef

java项目job

因为公司人员少,项目版本如果让开发去控制,比较繁琐,每个开发得不停的增加版本号,这里我使用jenkins去控制版本号,这样也方便查询和回滚代码。

当然啦,实现war的升级和回滚可看另外一篇文章:

https://juejin.im/post/59633a126fb9a06ba024ffdd

cd ${WORKSPACE}
mvn clean
cd ${WORKSPACE}/******/src/main/resources/
echo ${BUILD_NUMBER} >ver.xml

当然了,这里用到了几个关键词变量,是jenkins特有的,更多变量参照下文:

CHANGE_AUTHOR
For a multibranch project corresponding to some kind of change request, this will be set to the username of the author of the proposed change, if supported; else unset.
CHANGE_AUTHOR_DISPLAY_NAME
For a multibranch project corresponding to some kind of change request, this will be set to the human name of the author, if supported; else unset.
CHANGE_AUTHOR_EMAIL
For a multibranch project corresponding to some kind of change request, this will be set to the email address of the author, if supported; else unset.
CHANGE_TARGET
For a multibranch project corresponding to some kind of change request, this will be set to the target or base branch to which the change could be merged, if supported; else unset.
BUILD_NUMBER
The current build number, such as "153"
BUILD_ID
The current build ID, identical to BUILD_NUMBER for builds created in 1.597+, but a YYYY-MM-DD_hh-mm-ss timestamp for older builds
…………………………………………等等

h5项目job

这里我就用了zip打包,部署时使用zip解压到指定目录即可。

cd ${WORKSPACE}
echo ${BUILD_NUMBER} >ver.txt
zip -r h5.zip ./ -x .git\* -x README.md -x .project -x .gitignore
cp ${WORKSPACE}/h5.zip /Volumes/***/H5/h5-${BUILD_NUMBER}.zip

总结

本文全面讲解了jenkins各项目持续继承方案。

推荐:《TensorFlow+PyTorch深度学习从算法到实战

编辑推荐:

从深度学习框架到开发理念的跃迁。本书基于TensorFlow+PyTorch 两大主流框架,用5-4-6速成法(5步+4种元素+6种基本网络结构)搭建了一套完整的深度学习知识体系,是程序员必备的“深度学习开发指南”。

如何购买:点击小程序直接购买或或阅读原文了解更多。。。

觉得本文对你有帮助?请分享给更多人

关注「全栈开发者社区」加星标,提升全栈技能

本公众号会不定期给大家发福利,包括送书、学习资源等,敬请期待吧!

如果感觉推送内容不错,不妨右下角点个在看转发朋友圈或收藏,感谢支持。

好文章,我在看❤️



推荐阅读
  • Java EE 平台集成了多种服务、API 和协议,旨在支持基于 Web 的多层应用程序开发。本文将详细介绍 Java EE 中的 13 种关键技术规范,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 在开发板的启动选项中看到如下两行:7:LoadBootLoadercodethenwritetoFlashviaSerial.9:LoadBootLoadercodethenwri ... [详细]
  • 在Eclipse中提升开发效率,推荐使用Google V8插件以增强Node.js的调试体验。安装方法有两种:一是通过Eclipse Marketplace搜索并安装;二是通过“Help”菜单中的“Install New Software”,在名称栏输入“googleV8”。此插件能够显著改善调试过程中的性能和响应速度,提高开发者的生产力。 ... [详细]
  • 为了在Hadoop 2.7.2中实现对Snappy压缩和解压功能的原生支持,本文详细介绍了如何重新编译Hadoop源代码,并优化其Native编译过程。通过这一优化,可以显著提升数据处理的效率和性能。此外,还探讨了编译过程中可能遇到的问题及其解决方案,为用户提供了一套完整的操作指南。 ... [详细]
  • AppFog 是一个基于 CloudFoundry 的多语言 PaaS(平台即服务)提供商,允许用户在其平台上轻松构建和部署 Web 应用程序。本文将通过详细的图文步骤,指导读者如何在 AppFog 免费云平台上成功部署 WordPress,帮助用户快速搭建个人博客或网站。 ... [详细]
  • 分布式开源任务调度框架 TBSchedule 深度解析与应用实践
    本文深入解析了分布式开源任务调度框架 TBSchedule 的核心原理与应用场景,并通过实际案例详细介绍了其部署与使用方法。首先,从源码下载开始,详细阐述了 TBSchedule 的安装步骤和配置要点。接着,探讨了该框架在大规模分布式环境中的性能优化策略,以及如何通过灵活的任务调度机制提升系统效率。最后,结合具体实例,展示了 TBSchedule 在实际项目中的应用效果,为开发者提供了宝贵的实践经验。 ... [详细]
  • 调试利器SSH隧道
    在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需要通过线上域名才能正常访问。但我们一般都会在本地开发,因为这能快速的看到 ... [详细]
  • 实践指南:使用Express、Create React App与MongoDB搭建React开发环境
    本文详细介绍了如何利用Express、Create React App和MongoDB构建一个高效的React应用开发环境,旨在为开发者提供一套完整的解决方案,包括环境搭建、数据模拟及前后端交互。 ... [详细]
  • 使用Echarts for Weixin 小程序实现中国地图及区域点击事件
    本文介绍了如何使用Echarts for Weixin在微信小程序中构建中国地图,并实现区域点击事件。包括效果展示、条件准备和逻辑实现的具体步骤。 ... [详细]
  • RTThread线程间通信
    线程中通信在裸机编程中,经常会使用全局变量进行功能间的通信,如某些功能可能由于一些操作而改变全局变量的值,另一个功能对此全局变量进行读取& ... [详细]
  • 作为一名新手开发者,我正在尝试使用 ASP.NET 和 Vue.js 构建一个单页面应用,涉及多个复杂组件(如按钮、图表等)。希望有经验的开发者能够提供指导。 ... [详细]
  • vue引入echarts地图的四种方式
    一、vue中引入echart1、安装echarts:npminstallecharts--save2、在main.js文件中引入echarts实例:  Vue.prototype.$echartsecharts3、在需要用到echart图形的vue文件中引入:   importechartsfrom"echarts";4、如果用到map(地图),还 ... [详细]
  • 面试题总结_2019年全网最热门的123个Java并发面试题总结
    面试题总结_2019年全网最热门的123个Java并发面试题总结 ... [详细]
  • 本文深入探讨了 Git 与 SVN 的高效使用技巧,旨在帮助开发者轻松应对版本控制中的各种挑战。通过详细解析两种工具的核心功能与最佳实践,读者将能够更好地掌握版本管理的精髓,提高开发效率。 ... [详细]
  • 最近,我在CentOS 5服务器上成功部署了GForge 5.7 Community Edition。与Advanced Server版本相比,虽然功能略有简化,但仍然能够满足大多数开源项目管理的需求。为了确保数据安全,我开发了一套全自动备份脚本,该脚本能够定期备份GForge的数据和配置文件,并将其存储在远程服务器上,以防止数据丢失。此外,该脚本还具备错误检测和日志记录功能,便于故障排查和维护。 ... [详细]
author-avatar
小群群zheng
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有