持续化集成-Jenkins如何在Linux机器上部署
在互联网企业中,多数项目可能都是按照“两周一迭代”的节奏去开发的,甚至不少项目都是日发布。
发布项目看上去很简单,但项目一多、各种线上线下环境的配置还是很琐屑的,对于这类重复性工作是否可以自动化呢?
这里就是我们要了解的Jenkins了。
Jenkins是什么?
Jenkins是当下被广泛使用的持续构建的可视化Web工具,它是用Java语言开发的,通过Jenkins可以将各类项目的编译、打包、分发、部署都变成自动化或半自动化操作。
当下主流的编程语言它都能很好的支持,而且和Git、SVN、GitHub等无缝集成,十分方便。
持续集成的流程Linux上安装Jenkins的步聚Jenkins的安装方式很多种,推荐用yum方式来安装,以CentOS为例,步聚如下:1、确保服务器上安装了JDK2、下载安装Jenkins的镜像源# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo # rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key3、yum方式安装Jenkins # yum clean all # yum makecache # yum install jenkins 4、启用Jenkins # systemctl enable jenkins # systemctl start jenkins 通过
安装 jenkins 有常用的三种方式。
使用 pgk 安装包安装在 官网 下载 pgk 安装包,使用安装器安装,按照流程安装即可。
此安装方式会在 Mac 系统里创建一个名为 jenkins 用户,jenkins 服务就部署在这个用户下。
具体步骤如下
使用 war 安装直接去官网下载 war 文件,并 cd 到 jenkins.war 所在目录,执行:java -jar jenkins.war --httpPort=8080war 包自带 jetty 服务器,
此种方式安装,会在当前用户的根路径下创建 .jenkins 隐藏文件,并产生多余的配置文件,需手动管理,且不方便卸载。
此种方式也不推荐。
使用 Homebrew 安装Homebrew 作为 macOS 下的包管理器使用起来异常的简单快捷方便。
安装 Homebrew 之前, 首先安装 Command Line Tools for Xcode,命令如下:xcode-select --installHomebrew 依赖 Command Line Tools for Xcode,Xcode 命令行工具包含在 Xcode 中,如果 mac 设备已经安装 Xcode,请忽略此步。
安装完上面的编译依赖之后,通过下面的代码完成 Homebrew 的安装:ruby -e \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)\"完成 Homebrew 安装。
可通过
并会创建 ‘jenkins’ 命令。
同时,卸载 jenkins 的方式为:brew uninstall jenkins启动 jenkins 服务的方式为:brew services start jenkins使用此种方式启用 jenkins 服务支持后台运行,可以关闭终端工具。
也可以使用 jenkins 命令来启用 jenkins 服务。
但此种方式不支持后台运行,关闭命令行工具,服务自动关闭。
另,常用命令还有:重启 jenkins 服务的方式为:brew services restart jenkins停止 jenkins 服务的方式为:brew services stop jenkins通过此种方式安装,不会在系统中产生垃圾文件和多余的配置文件,所有的文件都是用 Homebrew 来管理,并且方便卸载。
此种方式强烈推荐。
如安
不同的安装方式,卸载方式也会不同。
具体可参看这个教程。
另,也有如下方式操作 Jenkins 服务http://localhost:8080/exit //停止服务http://localhost:8080/restart //重启服务http://localhost:8080/reload // 重新载入服务配置 jenkins创建用户完成 jenkins 安装以后,在浏览器种打开 localhost ,会进入配置 jenkins 页面。
按照提示,找到/Users/Shared/Jenkins/Home/ 这个目录下,打开 initialAdminPassword 文件,复制出密码并填入,点击继续,进入安装插件页面。
建议选择 Install suggested plugins。
等待插件安装完成后,jenkins 会重启,等待重启完成后,会进入创建用户页面。
填写用户信息后,保存即可。
请务必记住用户名和密码信息,否则重置用户信息非常麻烦。
安装插件登录 http://localhost:8080 ,选择“系统管理”——“管理插件”,在“可选插件”中选中“GitLab Plugin”、“Gitlab Hook Plugin”、“Xcode integration\"等常用插件,然后安装。
安装完成插件后,就可以新建项目了!其他常用插件有:Email Extension Plugin 该插件用于替换 Jenkins 自带的邮件发送,更加的强大。
Git Plugin 该插件允许使用GIT作为一个构建SCM(源代码控制管理系统)。
Post build task 该插件允许用户依据构建日志的输出执行一个shell/批处理任务。
Ruby Plugin 该插件允许用户在构建脚本中使用 Ruby。
Python Plugin 添加执行 Python 脚本作为Hudson的构建步骤。
Gradle Plugin 该插件允许Hudson调用Gradle构建脚本作为主体构建的步骤。
FTP-Publisher Plugin 该插件能上传项目构件和整个目录到一个FTP服务器。
Extended Choice Parameter plugin 该插件可以扩展参数化构建过程Extended Choice Parameter Plug-In 该插件可以扩展参数化构建过程Dynamic Extended Choice Parameter Plug-In 该插件可以扩展参数化构建过程git parameter Plug-in 该插件可以扩展参数化构建过程fir-plugin 该插件是 http://fir.im 分发平台提供的 jenkins 插件,用于上传安装包到 http://fir.im 平台。
此插件安装方式与上面的插件安装方式不同,具体安装方式见文末。
新建项目点击新建,在新建项目页面输入项目名称,选择“构建一个自由风格的软件项目”,然后进入配置页面在源码管理中 选择 Git ,填写仓库地址如出现红色警告,说明 Jenkins 访问不了 Git 仓库,一般是因为没有权限导致。
点击 Credentials 项的 Add ,在打开的 Jenkins Credentails Provider:Jenkins 页面,在 Username 和 Password 输入 Git 仓库的用户名和密码,完成添加。
不必担心用户信息外泄,Jenkins 服务和所有配置都保存在本地。
还可以通过配置 Git SSH 的方式赋予 Jenkins 访问 Git 仓库的权限,按此方法较为麻烦,具体步骤略。
在 Branches to build 中设置 Branch Specifier 要构建的分支,默认为 master。
在构建触发器中设置构建自动化的触发器。
其中 Build periodically,为定时 build,在日程表里设置 build 时间,如设置 00 20 * * * 表示每天 20 点执行定时 build。
Poll SCM (poll source code management) 轮询源码管理,表示在指定的时间点去轮询 Git 仓库,看是否有新的 commit,如有,则触发构建。
如设置 0/5 * * * * 表示每5分钟轮询一次。
完成此步骤后,剩余的工作,皆可通过 Execute shell 脚本来执行。
不同类型项目执行脚本不同。
脚本构建以构建 iOS 的 SellerPlatform 迷橙商家端项目上传 http://fir.im 分发平台为例完成创建。
第一步 归档archive.sh`#! bin/bashexport LCALL=zhCN.GB2312; export LANG=zh_CN.GB2312gitMessage=git log --pretty=format:\"%s\";stringTag=$; #%%[ 表示从右边开始,删除最后(最左边)一个 [ 号及右边的字符debug=\"【Debug\"; preRelase=\"【PreRelase\"; relase=\"【Relase\";if [[ $stringTag != $debug && $stringTag != $preRelase && $stringTag != $relase ]] then exit 1 else echo \"触发非参数化构建 暗号:$stringTag】\" fiecho \">>>>>>>>>>>>>>>>>>>开始构建项目,当前选择构建类型:\" + $BUILDTYPE echo \">>>>>>>>>>>>>>>>>>>当前 workspace \" +$WORKSPACEif [ $BUILDTYPE == \"Release\"]; then xcodebuild archive -workspace $WORKSPACE/SellerPlatform/SellerPlatform.xcworkspace -archivePath $WORKSPACE/build/SellerPlatform.xcarchive -sdk iphoneos -scheme SellerPlatform -configuration Releaseelse xcodebuild archive -workspace $WORKSPACE/SellerPlatform/SellerPlatform.xcworkspace -archivePath $WORKSPACE/build/SellerPlatform.xcarchive -sdk iphoneos -scheme SellerPlatform -configuration Debugfiecho \">>>>>>>>>>>>>>>>>>>构建完成\"
把控制权延伸到 git commit 操作里。
其中 【Debug】 代表打 debug 版本包,【PreRelase】代表打 preRelase 版本包,【Relase】代表打 relase 版本包。
首先,通过执行 git log --pretty=format:\"%s\" 命令,格式化输出 git commit log, 通过 %%】* 操作,是要拿到最后标记号【Debug】或【PreRelase】或【Relase】,如果拿到对应的标记号,则完成对应方式的构建。
另,Jenkins 会为每个工程项目创建一个本地目录空间,并提供了 $WORKSPACE 环境变量来直接访问。
第二步 签名signature.shecho \"开始签名\"xcodebuild -exportArchive -archivePath $WORKSPACE/build/SellerPlatform.xcarchive -exportPath $WORKSPACE/build -exportOptionsPlist $WORKSPACE/build/ExportOptions.plist -allowProvisioningUpdatesecho \"ipa文件已生成\"echo \"开始上传fir\"
第三步 上传首先,打开终端,安装 fir-clifir 的命令行工具,用于通过命令行上传安装包。
需要先装好 ruby 再执行gem install fir-cli上传打 fir 命令fir publish $ -T fir_token -c \"$\"upload.shecho \">>>>>>>>>>>>>>>>>>>开始上传到 fir\" if [$BUILDTYPE == \"Debug\" ]; thenfir publish $WORKSPACE/build/SellerPlatform.ipa -T efa7a5559110764a5037c52d4599635f --password rose888 -c $CHANGELOGelif [ $BUILDTYPE == \"PreRelease\" ]; thenfir publish $WORKSPACE/build/SellerPlatform.ipa -T 4f43ef4e28992358b511a76eb1c27d48 --password rose888 -c $CHANGELOGelsefir publish $WORKSPACE/build/SellerPlatform.ipa -T 3a9a1a361fe52b8b0d5eb59c7d0bd808 --password rose888 -c $CHANGELOGfiecho \">>>>>>>>>>>>>>>>>>>上传成功啦\"至此,就完成了持续集成的流程。
完成后建构,还可以通过 Email Extension Plugin 插件,邮件通知到相关人员。
还可以定制邮件内容。
在邮件内容里,还可以放置二维码,方便下载安装。
更进一步,参数化构建参数化构建,顾名思义,就是可以指定构建参数,完成高度可定制化构建。
首先,需要安装 git parameter Plug-in 插件,然后项目配置页面,在 General 中,选中‘参数化构建过程’,然后选择 git parameter。
如
即可完成自定义分支构建。
同样,可以设置构建的版本类型。
在构建的时候,进行选择。
在此不再赘述。
fir-plugin 安装与使用在上面的例子里,使用的是 http://fir.im 提供的命令行工具完成后建构的上传,也可以通过 fir-plugin 插件来完成上传。
安装首先去下载插件 。
然后,进入\"系统管理\"->\"管理插件\"->\"高级\"->\"上传插件\"选择已下载好的 fir-plugin.hpi 插件,点击上传。
安装完成后重启服务。
使用在 构建后操作 选择\"Upload to http://fir.im\",并添加 api token 并校验立即构建项目,成功之后,在工程里的 Console Output 中有如下日志说明成功了。
其他配置内网访问首先,拿到 jenkins 服务器所在设备上的内网 IP,执行如下命令可获得ifconfig en0进入\"系统管理\"->\"系统设置\" 找到 Jenkins Location 在 Jenkins URL 中设置地址,并加上端口号,格式如:172.0.0.1:8080/,然后保存。
重启服务,内网其他设备输入地址即可访问。
当其他设备不能访问时,一般原因有:jenkins 服务器没启动,设备处于休眠模式,设备内网 IP 被重新分配。
参考:
!我这里有centos6.3上安装Jenkins的文档。
如果需要可以私信我。