请选择 进入手机版 | 继续访问电脑版

IT运维管理,ITIL,ITSS,ITSM,ISO20000-ITIL先锋论坛

 找回密码
 微信、QQ、手机号一键注册

扫描二维码登录本站

QQ登录

只需一步,快速开始

艾拓先锋
搜索
查看: 910|回复: 0

某公司持续集成工具jenkins实践介绍

[复制链接]
来自- 广东广州

参加活动:0

组织活动:12

发表于 2017-8-28 16:55:56 | 显示全部楼层 |阅读模式 来自- 广东广州
前言

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

研究过程

刚开始,我一直在docker下安装jenkins,按时长租用阿里的主机,用阿里容器服务做实验,反复创建docker容器,建立多个jenkins节点。结果发现,在容器中配置各种变量比较复杂,各种开发环境不易快速部署,当然啦,是刚开始的对jenkins研究过少造成的。后来我采用了windows主机,配java、maven、Android环境,踩了一路坑,终于搞定了。但是我知道ios开发和编译必须使用mac系统,本来想增加一个jenkins节点来实现ios的编译。当配置好之后,我突然改变了主意,与其两台电脑开着,不如索性把整个jenkins部署到mac系统下(毕竟我们公司暂时没有c#工程)。于是,所有的操作,所有的环境我又折腾了一遍。下面我逐一讲解最终mac下实现全端jenkins持续集成,当然不包含c#,一路踩坑下来,我觉得这都不是事,流程都差不多。

效果图

0?wx_fmt=jpeg.jpg jenkins首页 0?wx_fmt=jpeg.jpg 构建历史

安装jenkins

我个人比较喜欢新事物,所以建议使用较高版本,我使用的2.61,目前最新版是2.75。mac下使用brew安装,终端执行

brew install jenkins
# s% k' R& D( U: \' x

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

jenkins
; e# C. S  ]( O2 p$ q0 G$ ]安装 xcode

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

安装 Android studio

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

0?wx_fmt=jpeg.jpg 同理将本地项目拉入,运行。这一步主要是怕开发环境引起的坑,先把项目跑起来,后面坑会少点。 0?wx_fmt=jpeg.jpg 设置进入设置,复制出sdk文件路径,后面需要使用。我这里是/Users/Shaolei/Library/Android/sdk 0?wx_fmt=jpeg.jpg sdk路径

安装git

因为我们公司用的是git,如果贵公司使用svn,则同理,只需保git或者svn命令可以敲出来即可。我这里的版本比较老,尽量使用新的,我懒得换了。

mac:~ shaolei$ git version5 f% g1 ?3 H0 j9 q
git version 2.11.09 @- z+ D, V! z9 T/ X  k
安装source tree

这是一个非常好用的git可视化工具,改天会具体介绍它的强大功能。这款软件不是必须的,只是为了方便项目拉取,所以,你可以跳过此步骤。

配置jenkins环境

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

配置插件

0?wx_fmt=jpeg.jpg 下载插件1. Android Emulator Plugin

Starts an Android emulator with given properties before a build, then shuts it down after./ a1 ?  O. S5 C, p  x$ w+ P% p7 ^
  • build timeout plugin
    " N6 J& a4 I3 Z" g9 \0 q% K
This plugin allows builds to be automatically terminated after the specified amount of time has elapsed.
' X" |0 E0 \( A: g6 H2 F
  • Email Extension Plugin

    4 N: G+ G" o4 [8 Z* j
This plugin is a replacement for Jenkins's email publisher   
$ j% b6 a/ x1 m1 z0 c5 E, d
  • Gradle Plugin

    + T/ R0 S- c+ B: v9 {
This plugin allows Jenkins to invoke Gradle build scripts directly.
8 p( V$ x9 P% \6 z7 y: L3 \
  • Keychains and Provisioning Profiles Management

    3 P/ F) P5 |% X) r9 J" C9 I7 [
This plugin integrates management of keychain and provisioning files for iOS and OSX projects.
. p$ `9 Q* W$ `$ ]% j: I, C
  • Maven Integration plugin

    6 `) P$ z! h, }  r4 ?6 B: G
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, ...).    # |, Y2 o9 f. q3 p: r9 }" w3 l+ f6 g
  • Pipeline

    & Y# Q, h% D% a
A suite of plugins that lets you orchestrate automation, simple or complex. See Pipeline as Code with Jenkins for more details.    " S6 A) E5 }0 a3 ]
  • Pipeline: GitHub Groovy Libraries
    " [1 j" ^2 n% q/ f+ Z, F0 G
Allows Pipeline Grrovy libraries to be loaded on the fly from GitHub.
0 J  W" J7 C0 t! g
  • SSH Slaves plugin
    $ i& [! Z0 n# ?) |- Z
Allows to launch agents over SSH, using a Java implementation of the SSH protocol.( I* W& N; A& }1 L0 p( f3 ~7 g( u
  • Subversion Plug-in
  • Timestamper

    9 {; ~7 ^& J: T  `6 I
Adds timestamps to the Console Output
/ U0 R, O+ F* P
  • Workspace Cleanup Plugin
    & Z- D# R# C& l, Z/ _0 A8 K
This plugin deletes the project workspace after a build is finished.; q3 C2 H# z; P2 d
  • Xcode integration

    0 u- Y! c1 L, w7 B2 }
This plugin provides builders to build xcode projects, invoke agvtool and package .ipa files( z6 R1 l: W' ^- G: X. m

其中Android Emulator Plugin、Gradle Plugin是安卓必须插件;其中Keychains and Provisioning Profiles Management、Pipeline、Xcode integration是ios编译必须插件;其中Maven Integration plugin、SSH Slaves plugin是maven项目必须插件,其他的Email Extension Plugin这个是为了编译失败的时候通知具体提交代码开发人员邮件

配置系统设置

0?wx_fmt=jpeg.jpg 系统设置 0?wx_fmt=jpeg.jpg Local Maven Repository为maven仓库地址;如果本机没有安装maven,可能需要增加maven仓库;下面需要加入安卓环境变量,即上文中提到的那个sdk地址; 0?wx_fmt=jpeg.jpg 0?wx_fmt=jpeg.jpg 这里配置github地址,邮件用户名密码,注意发件人的邮箱必须上面jenkins注册是管理员邮箱是一个,否则一直失败,这里是个坑。

增加计划Android 项目job

创建安卓job

0?wx_fmt=jpeg.jpg 创建安卓项目配置项目的git库地址 0?wx_fmt=jpeg.jpg 配置项目的git库地址下面配置触发器,每隔1分钟检查一次git库,也可以使用subscribe订阅,这里暂不做讲解。 0?wx_fmt=jpeg.jpg 配置触发器设置编译后,将文件拷贝到一个文件目录。这里使用smb协议连接到了一个内网文件服务器上,方便测试部门测试。 0?wx_fmt=jpeg.jpg 配置编译及邮件通知至于具体为何执行2次拷贝,是因为项目同时编译测试环境地址和真实环境地址,只有连接的服务器地址不通,其他代码都相同,具体实现可看另外一篇博文juejin.im/post/59302a…

ios项目job

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

0?wx_fmt=jpeg.jpg 这里需要配置ios项目的tagert,可以通过xcode打开查看,勾选Pack application and build .ipa?,使jenkins生成ipa包 0?wx_fmt=jpeg.jpg 配置证书地址和密码,这里指的是 KeychainKeychain path默认地址为/Users/shaolei/Library/Keychains/login.keychain,其中shaolei为mac登录的用户名,密码就是登录密码。失败时邮件发送至影响代码的配置请参照安卓,下文同理。同时编译两个ipa包请查看juejin.im/post/59648b…

java项目job

0?wx_fmt=jpeg.jpg 因为公司人员少,项目版本如果让开发去控制,比较繁琐,每个开发得不停的增加版本号,这里我使用jenkins去控制版本号,这样也方便查询和回滚代码。当然啦,实现war的升级和回滚可看另外一篇文章juejin.im/post/59633a…

cd ${WORKSPACE}
$ {+ a# n+ X2 Hmvn clean$ T5 T6 D) \. b, \2 [) E+ P' e
cd ${WORKSPACE}/******/src/main/resources/5 f8 g" w* ?; O8 S
echo ${BUILD_NUMBER} >ver.xml
6 @2 D: E8 _: `5 b2 x5 `

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

CHANGE_AUTHOR
5 H5 S# I/ @6 f/ Z7 N+ QFor 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." n/ m; `6 Z0 S# p1 J2 n
CHANGE_AUTHOR_DISPLAY_NAME3 r% I! q9 |5 E7 ~: [0 F
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.
; A3 M" ?, W. s' u8 U$ X  M5 M( bCHANGE_AUTHOR_EMAIL
) f3 o( |' }2 E, L/ E$ k+ S* nFor 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.
  X- t( ?6 K/ g. ~0 X8 O9 ?+ HCHANGE_TARGET
+ }2 b8 M  f3 S, N6 b! g( bFor 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.
3 _, r% I: x1 C1 XBUILD_NUMBER, m/ P& c; f2 R: M9 I4 F5 C' {
The current build number, such as "153"8 ?" F1 Z% ?0 [4 i5 z
BUILD_ID, x8 F  k% \- o8 K) ~
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& W( {6 j2 {/ d' H. B
…………………………………………等等: \, _2 K+ |0 P% b0 g  m/ I
h5项目job

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

cd ${WORKSPACE}$ Q. G/ m0 W1 @' L3 V( q
echo ${BUILD_NUMBER} >ver.txt
0 E$ ~6 Q$ V) w( K/ t, _" n! Uzip -r h5.zip ./ -x .git\* -x README.md -x .project -x .gitignore8 B  B" ^* a" z) Z) P9 o
cp ${WORKSPACE}/h5.zip /Volumes/***/H5/h5-${BUILD_NUMBER}.zip: C& N. z3 @" a' k( |( r1 c9 ]: ?. |

0?wx_fmt=jpeg.jpg

总结

本文全面讲解了jenkins各项目持续继承方案,因为涉及环境过多,坑还是比较多的,希望自行填坑。( ^* T+ O% O4 c& K' |5 s0 H2 f
原创:邵磊


2 y+ i- C; |. W0 l4 F, M/ H4 i

本版积分规则

选择云运维时代的王牌讲师-长河老师,助你轻松入门ITIL Foundation培训课程

QQ|小黑屋|手机版|Archiver|艾拓先锋网 ( 粤ICP备11099876号-1|网站地图

Baidu

GMT+8, 2019-3-25 20:58 , Processed in 0.206024 second(s), 29 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表