# 安装jenkins

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

brew install jenkins

jenkins

# 安装git

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. 1. build timeout plugin This plugin allows builds to be automatically terminated after the specified amount of time has elapsed. 1. Email Extension Plugin This plugin is a replacement for Jenkins’s email publisher 1. Gradle Plugin This plugin allows Jenkins to invoke Gradle build scripts directly. 1. Keychains and Provisioning Profiles Management This plugin integrates management of keychain and provisioning files for iOS and OSX projects. 1. 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, …). 1. Pipeline A suite of plugins that lets you orchestrate automation, simple or complex. See Pipeline as Code with Jenkins for more details. 1. Pipeline: GitHub Groovy Libraries Allows Pipeline Grrovy libraries to be loaded on the fly from GitHub. 1. SSH Slaves plugin Allows to launch agents over SSH, using a Java implementation of the SSH protocol. 1. Subversion Plug-in 1. Timestamper Adds timestamps to the Console Output 2. Workspace Cleanup Plugin This plugin deletes the project workspace after a build is finished. 3. 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


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

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

# 总结

https://juejin.im/user/57cd55218ac247006459c40c
Github：
https://github.com/qq273681448