簡體   English   中英

腳本和p的版本控制

[英]version control for scripts and puppet

我正在嘗試使用版本控制來設置我們的環境。 我們的shell腳本散布在不同的服務器上。 我不知道從哪里開始組織版本控制。 但是,我們還將puppet用於配置管理,該配置也應具有版本控制。 我有以下兩個問題,我不確定它們是否至少可行:

  1. 有沒有一種方法可以對腳本進行版本控制,將它們放置在當前位置,因為大多數腳本是特定於服務器的。
  2. 是否有用於將版本控制用於人偶模塊和shell腳本或將腳本放入人偶和僅版本控制人偶的通用解決方案?

提前致謝。

tl; dr:

  1. 有沒有一種方法可以對腳本進行版本控制,使它們現在處於任何位置,因為大多數腳本是特定於服務器的?
  2. 是否有用於將版本控制用於人偶模塊和shell腳本或將腳本放入人偶和僅版本控制人偶的通用解決方案?

這是可能的,但是如果您編寫Puppet代碼來滿足您的要求,則不需要這樣做。

通常,當您開始使用諸如Puppet之類的配置管理工具時, 就是在這樣做,以擺脫對腳本的管理 Puppet是一種無需編寫任何腳本即可運行命令,提取要運行到Puppet的實際步驟並讓其處理的方法。

使用Puppet運行現有腳本通常是一種臨時情況,您最終希望重構為使用Puppet exec,然后再使用更多冪等的Puppet模塊和清單,直到最終所有本機Puppet代碼滿足所有要求,因此更改完全由puppet管理。

有關為何執行此操作的更多信息,請參見以下問題: https : //serverfault.com/questions/504070/why-use-chef-puppet-over-shell-scripts

因此,例如,假設您在網絡服務器上,首先從腳本安裝軟件包開始:

Note: Steps simplified for examples, code might not actually work

腳本示例:

#/bin/bash
if $HOSTNAME='webserver.example'
  yum install nginx
fi

這位於/var/tmp/install_nginx.sh

首先,您可以使用Puppet運行它:

exec {'/var/tmp/install_nginx.sh':}

但是,我們如何首先獲得該腳本? 您可以使用版本控制將其放置在那里,但是如何設置它呢?

即使您可以正常工作,這也有點奇怪:如果網絡服務器的名稱更改了,該如何在多個服務器上使用呢?

然后,您可以使用Puppet本身創建腳本:

$webserver_host = 'webserver.example'

$nginx_install_script = "if $HOSTNAME=${webserver.example}
     yum install nginx
   fi"

exec {'Install Nginx':
   command => $nginx_install_script
}

因此,如果您需要更改Web服務器名稱,則只需更改變量即可。

但這仍然不是冪等的。 Puppet具有本機類型,無需進行很多工作( 在此處記錄 ,您也可以編寫自己的代碼)

因此,您可以更改該代碼以使其變得更好:

$webserver_host = 'webserver.example'

if $::fqdn == webserver_host {
  package {'nginx':
     ensure => 'present',
  }
}

這是更冪等的,它與平台無關。

此重構從此處繼續。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM