golang 使用 rpm 包交付部署

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

    線上交付代碼需要打成rpm 包,然後呢,我給營運的時候,營運說了句,你有空教我下,怎麼打rpm包,當時我就驚呆了,表情是這樣的,。

    其實 golang 能build 成二進位檔案,所以,其實打rpm包和c 基本是一致的,使用rpmbuild 模組即可。下面以一個具體。重點就是編寫spec 檔案。

Name:           hellorpm           #名字為源碼tar.gz 包的名字 Version:        1.0.0             #版本號碼,一定要與tar.gz包的一致哦 Release:        1%{?dist}         #釋出號,也就是第幾次製作rpm Summary:       helloword   #軟體包簡介,最好不要超過50字元 License:        GPL                   #許可,GPL還是BSD等  URL:            #可以寫一個網址 Packager:       abel Source0:        %{name}-%{version}.tar.gz   #定義用到的source,也就是你的源碼BuildRoot:      %_topdir/BUILDROOT         #這個是軟體make install 的測試安裝目錄.BuildRequires:  gcc,make                           #製作過程中用到的軟體包 Requires:       python-apscheduler >= 2.1.2-1.el7,python-daemon >= 1.6-1.el7  #軟體運行依賴的軟體包,也可以指定最低版本如 bash >= 1.1.1 %description                #描述,隨便寫                 %prep                          #打包開始                    %setup -q                      #這個作用靜默模式解壓並cd                               %build              #編譯製作階段,主要目的就是編譯,如果不用編譯就為空白 ./configure \                                      %{?_smp_mflags}          #make後面的意思是:如果就多處理器的話make時並行編譯 %install                        #安裝階段                        rm -rf %{buildroot}             #先刪除原來的安裝的,如果你不是第一次安裝的話  cp -rp %_topdir/BUILD/%{name}-%{version}/*  $RPM_BUILD_ROOT #將需要需要打包的檔案從BUILD 檔案夾中拷貝到BUILDROOT檔案夾下。#下面的幾步pre、post、preun、postun 沒必要可以不寫 %pre        #rpm安裝前制行的指令碼 %post       #安裝後執行的指令碼 %preun      #卸載前執行的指令碼 %postun     #卸載後執行的指令碼 %clean #清理段,刪除buildroot rm -rf %{buildroot} %files  #rpm要包含的檔案 %defattr (-,root,root,-)   #設定預設許可權,如果下面沒有指定許可權,則繼承預設 /etc/hello/word/helloword.c           #將你需要打包的檔案或目錄寫下來###  7.chagelog section  改變日誌段 %changelog 

    我們要寫的重點是什麼呢?在% build 階段build,在%install 階段移動檔案到目標檔案夾,在 %pre 階段做些清掃工作,在post 階段添加安裝後啟動和添加開機啟動。然後,完了。下面是我具體一個項目的執行個體:

#軟體包簡要介紹Summary: build refresh_agent#軟體包的名字Name: refresh_agent#軟體包的主要版本號Version: 0.0.1#軟體包的次版本號碼Release: 1#原始碼包,預設將在上面提到的SOURCES目錄中尋找Source0: %{name}-%{version}.tar.gz#授權協議License: GPL#軟體分類Group: Development/Tools#軟體包的內容介紹%descriptionrefresh_agent服務#表示預操作欄位,後面的命令將在源碼代碼BUILD前執行%prep#BUILD欄位,將通過直接調用源碼目錄中自動構建工具完成源碼編譯操作%buildcd /devops/app/go/src/refresh_agentgo build -o refresh_agent cmd/agent_bin.go#file#安裝欄位%install# 二進位執行檔案mkdir -p ${RPM_BUILD_ROOT}/usr/local/bin/cp -f /devops/app/go/src/refresh_agent/refresh_agent  ${RPM_BUILD_ROOT}/usr/local/bin/refresh_agent# 日誌目錄mkdir -p ${RPM_BUILD_ROOT}/bbd/logs/refresh_agent# 設定檔mkdir -p ${RPM_BUILD_ROOT}/etc/refresh_agentcp -f /devops/app/go/src/refresh_agent/etc/online.config.ini ${RPM_BUILD_ROOT}/etc/refresh_agent/config.ini#logrotatemkdir -p ${RPM_BUILD_ROOT}/etc/logrotate.dcp -f /devops/app/go/src/refresh_agent/etc/refresh_agent_logrotate.conf ${RPM_BUILD_ROOT}/etc/refresh_agent/refresh_agent_logrotate.conf#日誌搜集mkdir -p ${RPM_BUILD_ROOT}/etc/rsyslog.dcp -f /devops/app/go/src/refresh_agent/scripts/refresh_agent.conf ${RPM_BUILD_ROOT}/etc/rsyslog.d/refresh_agent.conf# 控制指令碼mkdir -p ${RPM_BUILD_ROOT}/etc/init.dcp -f /devops/app/go/src/refresh_agent/scripts/refresh_agent.sh  ${RPM_BUILD_ROOT}/etc/init.d/refresh_agent%post# 添加開機自啟動# 更改許可權chmod 775 /etc/init.d/refresh_agent# 加入自啟動chkconfig --add refresh_agentecho -e "has added refresh_agent to chkconfig \n"# 安裝啟動/etc/init.d/refresh_agent startecho -e "start log rewrite to /var/log/messsge \n"#調用源碼中安裝執行指令碼#檔案說明欄位,聲明多餘或者缺少都將可能出錯%files%defattr(-,root,root)/usr/local/bin/refresh_agent/etc/init.d/refresh_agent/etc/rsyslog.d/refresh_agent.conf/etc/refresh_agent/refresh_agent_logrotate.conf%dir/etc/refresh_agent/bbd/logs/refresh_agent

    因為golang 能打成二進位檔案,所以製作rpm 很簡單,相比起來,python 雖然也可以用ominibus等方式實現,但是就複雜多了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.