作者:邵磊链接:https://urlify.cn/qIB7fq

# 前言

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

# 研究过程

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

但是我知道ios开发和编译必须使用mac系统,本来想增加一个jenkins节点来实现ios的编译。当配置好之后,我突然改变了主意,与其两台电脑开着,不如索性把整个jenkins部署到mac系统下(毕竟我们公司暂时没有c#工程)。于是,所有的操作,所有的环境我又折腾了一遍。下面我逐一讲解最终mac下实现全端jenkins持续集成,当然不包含c#,一路踩坑下来,我觉得这都不是事,流程都差不多。

# 效果图

jenkins首页

构建历史

# 安装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

sdk路径

# 安装git

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

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

mac:~ shaolei$ git versiongit 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库地址

配置项目的git库地址

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

配置触发器

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

配置编译及邮件通知

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

ios项目job

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


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


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

Keychain path默认地址为/Users/shaolei/Library/Keychains/login.keychain,其中shaolei为mac登录的用户名,密码就是登录密码。

失败时邮件发送至影响代码的配置请参照安卓,下文同理。

同时编译两个ipa包请查看juejin.im/post/59648b…

java项目job


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

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

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

CHANGE_AUTHORFor 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_NAMEFor 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_EMAILFor 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_TARGETFor 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_NUMBERThe current build number, such as "153"BUILD_IDThe 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.txtzip -r h5.zip ./ -x .git\* -x README.md -x .project -x .gitignorecp ${WORKSPACE}/h5.zip /Volumes/***/H5/h5-${BUILD_NUMBER}.zip

# 总结

本文全面讲解了jenkins各项目持续继承方案,因为涉及环境过多,坑还是比较多的,希望自行填坑。

热文推荐

很不幸,当当网员工确诊了

2020年2月全国程序员工资统计

阿里面试官:给我说说Netty是如何在Dubbo中应用的?

点我,查看更多精彩文章。

android studio 设置自动编译_某小型公司持续集成工具jenkins实践(JAVA WEB、Android、IOS、html)...相关推荐

  1. Jenkins 流水线 获取git 分支列表_某小型公司持续集成工具 jenkins 实践

    作者:邵磊http://juejin.im/post/599fd5d151882524397f9fd3 前言 本文可能是网上最全的一篇全端jenkins部署解决方案介绍的文章,一直以来,领导都想解决代 ...

  2. 某小型公司持续集成工具 jenkins 实践

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:邵磊 juejin.im/post/599fd5d15188 ...

  3. android studio 设置自动编译_Appium Mac系统 自动测试环境搭建

    一.python 环境准备 Mac 自带 Python 环境,一般为 2.7 版本. 1.查看当前系统默认的Python路径 which python ==> /usr/bin/python 2 ...

  4. python 持续集成工具_持续集成工具: Jenkins学习

    持续集成工具: Jenkins学习 -- 部分内容收集自网络,如有侵权,请联系作者删除 一. 概念 在过去的开发整体流程中,是所有人写好代码之后统一进行合并(svn,git),然后进行测试,确保准发布 ...

  5. jenkins 忘记密码_持续集成工具Jenkins 在CentOS系统下安装

    一.Jenkins简介 Jenkins是一个开源的持续集成工具,用于持续.自动的构建.测试.发布项目.Jenkins使用Java开发,可与版本管理工具集成使用. Jenkins支持UI操作来部署流水线 ...

  6. centos7.9使用jenkins部署springcloud微服务_配合SVN_脚本_实现自动部署后端以及前端程序_亲测成功---持续集成部署Jenkins工作笔记0023

    以前有个jekins教程,还比较详细,但是,那个是基于git和svn,并且需要配置jekins支持git,svn的插件. 配置以后就可以实现只要提交代码,就会自动触发部署,但那个时候安装jenkins ...

  7. jenkins maven没有使用全局设置文件地址_持续集成工具Jenkins看这篇就够啦!

    本文基于当前最新的 LTS 版本 2.164.1 ,理论上适应于Jenkins 2.x所有版本. 一.下载 前往Jenkins官网[1] ,按需下载.如用于生产,建议下载Long-term Suppo ...

  8. Jenkins 流水线 获取git 分支列表_持续集成工具Jenkins看这篇就够啦!

    本文以基于当前最新的 LTS 版本 2.164.1 ,理论上适应于Jenkins 2.x所有版本. 一.下载 前往Jenkins官网 ,按需下载.如用于生产,建议下载Long-term Support ...

  9. 提高Android Studio运行、编译速度方案

    前言: 如果你之前用eclipse开发过Android app的话,转到android studio的第一反应也许就是:"编译速度有点慢",表现的最明显的一点就是,每次androi ...

最新文章

  1. 硬盘突然变慢的原因,系统突然变慢的原因
  2. [转] MySQL和MongoDB设计实例对比
  3. 吉林大学计算机科学与技术学院推免,2017吉林大学计算机科学与技术大学生推免夏令营...
  4. Linux中的计划任务—Crontab调度重复执行的任务
  5. linux 搭建mysql主从复制 ----第一篇
  6. JavaWeb 入门篇 (5) Cookie 和 Session 详解
  7. 排序算法-02直接插入(python实现)
  8. android adb 静默安装,Android_如何静默安装
  9. Windows更新右下角出现 天气温度等提示,如何取消
  10. 洛谷 1057——台阶问题(递推与递归二分)
  11. python初学者经验总结_Python 初学者的经验总结
  12. linux下NIS服务的配置
  13. script标签的for属性和event属性
  14. 【云游戏】携手云流送,让普通终端也可畅享高端游戏画质
  15. Bluetooth core 5.0 ---------- BR/EDR 安全简单配对(BR/EDR secure simple pairing)
  16. 实名认证API“智慧数据”打造企业服务新入口
  17. 9_____变态跳台阶
  18. yii2 如何用命名空间方式使用第三方类库
  19. 地图数据的存储探索(GIS)
  20. 2021年R2移动式压力容器充装报名考试及R2移动式压力容器充装考试资料

热门文章

  1. python绘图函数
  2. This version of MySQL doesn't yet support 'LIMIT IN/ALL/ANY/SOME subquery'
  3. opencv获取摄像头帧率分辨率
  4. 多媒体制作技术心得体会_多媒体课件制作学习心得体会
  5. mongodb 备份压缩_MongoDB 如何实现备份压缩
  6. java项目端口号异常_Pyspark:异常:Java网关进程在向驱动程序发送其端口号之前退出...
  7. 重新精读《Java 编程思想》系列之public,protected,private与无修饰符权限的区别...
  8. python3 获取当前路径_如何使用python3获取当前路径及os.path.dirname的使用
  9. python中字符串中文乱码_[python] 中文乱码问题
  10. 使用Shell(bash) 来检查 git 本地某个分支是否存在