利用rpm打包上线部署golang代码的方法教程

 更新时间:2018年01月09日 10:23:57   作者:xiaorui  
RPM是RPM Package Manager(RPM软件包管理器)的缩写,这篇文章主要给大家介绍了关于利用rpm打包上线部署golang代码的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

前言:

经过一段时间的测试验证,决定使用RPM来做Golang服务的部署方式. 我们组关于代码的部署方式主要有这么几种,Python直接使用virtualenv + py code的方式来上线,Lua 是直接打包,Golang 是先编译生成二进制之后,联合配置文件直接打包。 但由于我们开发的Golang的代码很多是基础组件,需要很多节点都去安装部署。那么这时候自己编译打包跟RPM的方式其实很是想象的,那还不如复用公司内部成熟的基于rpm的上线系统。

下面话不多说了,来一起看看详细的介绍吧。

rpm打包的使用方法:

# 安装RPM依赖
yum install rpmdevtools
#生成RPM目录
cd ~
rpmdev-setuptree

下面是rpm的基本组织结构.

├── BUILD
├── BUILDROOT
├── RPMS
├── SOURCES
├── SPECS
└── SRPMS

其实最干脆的rpm打包方式就是 直接编辑SPECS的配置文件,在%install的逻辑里把go代码编译成二进制,然后cp进去,这就完事了。由于时间关系我就不详细描述rpm的高级用法了,有兴趣的朋友可以自己看SPECS相关的配置。

#软件包简要介绍
Summary: build transcoding
#软件包的名字
Name: transcoding
#软件包的主版本号
Version: 0.0.1
#软件包的次版本号
Release: 5
#源代码包,默认将在上面提到的SOURCES目录中寻找
Source0: %{name}-%{version}.tar.gz
#授权协议
License: GPL
#软件分类
Group: Development/Tools
#软件包的内容介绍
%description
视频转码集群
#表示预操作字段,后面的命令将在源码代码BUILD前执行
%prep
#BUILD字段,将通过直接调用源码目录中自动构建工具完成源码编译操作
%build
#file
#安装字段
%install
# 二进制执行文件
mkdir -p ${RPM_BUILD_ROOT}/usr/bin/
cp -f /devops/app/go/src/transcoding/engine_bin ${RPM_BUILD_ROOT}/usr/bin/transcoding_engine_bin
cp -f /devops/app/go/src/transcoding/rest_bin ${RPM_BUILD_ROOT}/usr/bin/transcoding_rest_bin
# 配置文件
mkdir -p ${RPM_BUILD_ROOT}/etc/transcoding
cp -f /devops/app/go/src/transcoding/etc/online.config.ini ${RPM_BUILD_ROOT}/etc/transcoding/config.ini
# 控制脚本
mkdir -p ${RPM_BUILD_ROOT}/etc/init.d/
cp -f /devops/app/go/src/transcoding/bin/init.sh ${RPM_BUILD_ROOT}/etc/init.d/transcoding.sh
#调用源码中安装执行脚本
#文件说明字段,声明多余或者缺少都将可能出错
%files
%defattr(-,root,root)
/usr/bin/transcoding_engine_bin
/usr/bin/transcoding_rest_bin
/etc/init.d/transcoding.sh
%dir
/etc/transcoding

当编辑完SPECS文件后,然后开始运行 rpmbuild 生成rpm包.

rpmbuild -bb transcoding.spec

编译完之后,我们在来看看rpm结构, 对的,多了一个rpm包…

├── BUILD
├── BUILDROOT
├── RPMS
│ └── x86_64
│ └── transcoding-0.0.1-5.x86_64.rpm
├── SOURCES
├── SPECS
│ └── transcoding.spec
└── SRPMS

剩下要做的就是把我们生成的rpm包,上传到我们私有的yum repo源里面。剩下的流程你就可以走你的标准的上线流程了。

这里需要注意两件事情:

1. rpm specs 版本号的更新,如果不更新会造成yum update无效….

2. 如果配置文件含有db的账号密码,请不要添加到rpm中,就算是私有yum repo,也不安全…

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • 浅谈go语言中别名类型的使用

    浅谈go语言中别名类型的使用

    类型别名是 Go 1.9 版本添加的新功能,主要用于解决代码升级、迁移中存在的类型兼容性问题,本文主要介绍了go语言中别名类型的使用,感兴趣的可以了解一下
    2024-01-01
  • go语言工程结构

    go语言工程结构

    这篇文章主要简单介绍了go语言工程结构,对于我们学习go语言很有帮助,需要的朋友可以参考下
    2015-01-01
  • Golang基于epoll实现最简单网络通信框架

    Golang基于epoll实现最简单网络通信框架

    这篇文章主要为大家详细介绍了Golang如何基于epoll实现最简单网络通信框架,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习学习
    2023-06-06
  • golang 结构体初始化时赋值格式介绍

    golang 结构体初始化时赋值格式介绍

    这篇文章主要介绍了golang 结构体初始化时赋值格式介绍,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • GO中Json解析的几种方式

    GO中Json解析的几种方式

    本文主要介绍了GO中Json解析的几种方式,详细的介绍了几种方法, 文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-01-01
  • Go Println和Printf的区别详解

    Go Println和Printf的区别详解

    这篇文章主要介绍了Go Println和Printf的区别详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Golang 标准库 tips之waitgroup详解

    Golang 标准库 tips之waitgroup详解

    本篇文章给大家介绍Golang 标准库 tips之waitgroup的相关知识,包括使用 channel 实现 WaitGroup 的功能介绍,感兴趣的朋友跟随小编一起看看吧
    2021-07-07
  • Golang 串口通信的实现示例

    Golang 串口通信的实现示例

    串口通信是一种常见的硬件通信方式,用于在计算机和外部设备之间传输数据,本文主要介绍了Golang 串口通信的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Golang map实践及实现原理解析

    Golang map实践及实现原理解析

    这篇文章主要介绍了Golang map实践以及实现原理,Go 语言中,通过哈希查找表实现 map,用链表法解决哈希冲突,本文结合实例代码给大家介绍的非常详细,需要的朋友参考下吧
    2022-06-06
  • Go基础教程系列之数据类型详细说明

    Go基础教程系列之数据类型详细说明

    这篇文章主要介绍了Go基础教程系列之数据类型详细说明,需要的朋友可以参考下
    2022-04-04

最新评论