Jenkins:
1. 从CI/CD思想说起:
CI(Continuous integration,中文意思是持续集成)是一种软件开发实践。持续集成强调开发人员提交
了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能
否正确地集成在一起。
CD(Continuous Delivery, 中文意思持续交付)是在持续集成的基础上,将集成后的代码部署到更贴
近真实运行环境(类生产环境)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的
准生产环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境。
简单来说,CI/CD摆脱了之前修改代码提交分支后,手动打包并部署验证这样的传统方法的桎梏,
现在只需要将修改后的代码提交至git上后,Jenkins会自动给我们打包好(需设置)。后续部署验证根
据不同的项目组所在的方式不同。
2.工程rpm打包方式
RPM([Redhat Package Manager)是用于Redhat、CentOS、Fedora等Linux 分发版
(distribution)的常见的软件包管理器。rpm工具可以用来制作源码安装包和二进制安装包。
常见的,我们通过yum -y install rpm-build rpmdevtools命令来安装rpm工具,rpmdev-setuptree命
令生成文件目录树,rpmdev-newspec package-name.spec手动编写.spec描述文件,rpm打包就是
rpm-build -bb XXX.spec生成二进制rpm
包。所以接下来我们学习一下spec文件。
3..spec文件
我们的spec文档的名字要和安装程序的名称相同
rpmdev-newspec package-name.spec
spec文档说明:
表头包含安装包的基本信息,表头项说明如下(* 标识必须包含此项)
Name *:软件包的名称
Version *:软件版本号
Release *:同一版本软件的发布版本号
Summary *:软件的简短介绍
License *:软件的授权模式
Summary(zh_CN):中文版本的简短介绍
Requires(pre | post | preun | postun):/bin/sh
各个过程需要使用哪种shell脚本
内容包含以下项目
%description
软件的完整介绍,与Summary字段不通,完成内容介绍可以写多行。
%prep(没有使用)
解压源码的过程。
%build (没有使用)
编译源码的过程。
%install
安装脚本。将需要安装的文件拷贝到%{buildroot}目录。%{buildroot}目录相当于安装系统的根目
录。
%files
需要打包的文件列表,注意这里的文件路径是以${buildroot}制定的安装后的根目录。可以使用
通配符,如/etc/keepalived/*。注意:使用通配符时,如果安装目录有文件与安装包中冲突,安
装失败。
%changelog(没有使用)
软件的变化记录。
scriptlets 安装卸载时执行脚本(没有使用)
在软体包安装之前 (%pre) 或之后 (%post) 执行
在软体包卸载之前 (%preun) 或之后 (%postun) 执行
在事务开始 (%pretrans) 或结束 (%posttrans) 时执行
例子:
自定义宏
%define bindir /data1/weibo/motan-go
1.信息定义阶段
软件名字,要与spec的文件名一致 openresty
Name: motan-go
软件主版本号
Version: 1.0
发行编号,每打包一次值递增,主版本号发布新版后需重置该值
Release: 4%{?dist}
一行简短的软件简介,结尾不要加标点
Summary: Motan is Weibo RPC
Group: Weibo Motan G.
软件许可
License: Apache License 2.0
软件项目主页
URL: http://git.intra.weibo.com/openapi_rd/motan-go/
放置在SOUIRCES目录的软件源码包名,可以指定多个:source1、source2等
Source0: %{name}.%{version}.tar.gz
补丁名,也可以写多个 patch1、patch2等
patch0: 0.patch
在 install 阶段的测试安装目录,方便写files
buildroot: %_topdir/BUILDROOT
BuildRequires: go
安装软件包时所需的依赖包列表,可以指定版本如 bash >= 1.1.1
Requires: readline-devel,pcre-devel,openssl-devel
程序的详细多行描述,每行必须小于等于 80 个字符,空行表示开始新段
%description
Motan java.go.php
2.准备阶段
%prep
静默模式解压并进入解压后的目录,也常用:%autosetup -n %{name}
%setup -q -n motan-go
需要打补丁,在这里写打补丁的命令
%patch0 -p1
- 编译阶段
%build
编译参数
./configure
使用多核处理器并行编译
make %{?_smp_mflags}
cd main/
go build magent.go
4.安装阶段
%install
删除之前的残留文件
rm -rf %{buildroot}
mkdir -p %{buildroot}/%{bindir}/bin
install -m755 main/magent %{buildroot}/%{bindir}/bin/
install -d -m755 %{buildroot}/%{bindir}/bin/
cp -pvr motan.yaml %{buildroot}/%{bindir}/
rpm安装前制行的脚本
%pre
1 == 1 ];then
/usr/sbin/useradd -r %{nginx_user} 2> /dev/null
fi
rpm安装后制行的脚本
%post
卸载前执行的脚本
%preun
卸载后执行的脚本
%postun
5.清理阶段
%clean
删除buildroot目录
rm -rf %{buildroot}
6.文件设置阶段
%files
设定默认权限,如果下面没有指定权限,则继承默认
%defattr (-,root,root,0755)
要打包的文件和目录,在执行完rpmbuild -bi后,参考%{rootbuild}下生成的文件和目录
%{bindir}/bin/magent
/data1/weibo/motan-go
变更日志 格式固定,生成请用命令: rpmdev-bumpspec --comment=COMMENT --userstring=NAME+EMAIL_STRING SPECFILES
%changelog
- Thu Dec 31 2015 will will@52os.net - 1.9.7.1-4
- openresty init
%define __debug_install_post %{_rpmconfigdir}/find-debuginfo.sh %{?_find_debuginfo_opts} "%{_builddir}/%{?buildsubdir}" %{nil}
4.rpmdev-setuptree目录文件说明
BUILD:源码解压后存放的目录
RPMS:制作完成后的RPM存放目录
SOURCES:存放源文件,配置文件,补丁文件等放置的目录
SPECS:存放SPEC文件,制作RPM包的目录
SRPMS:src格式的RPM包目录
BUILDROOT:虚拟安装目录,在整个install的过程中临时安装到此目录,把这个目录当做根来
使用。所有在这个目录下的文件才是真正的目录文件,最后SPEC文件中有清理阶段,这个目录
下的内容将被删除。
5.使用Jenkins打包
参考:https://www.jianshu.com/p/5f671aca2b5a