天天看點

如何使用 Ansible 自動化平台配置多個環境

作者:科技狠活與軟體技術

關注留言點贊,帶你了解最流行的軟體開發知識與最新科技行業趨勢。

如何使用 Ansible 自動化平台配置多個環境

Ansible 是一個強大的配置管理工具,可用于配置基礎設施。

️ 配置是指配置和設定遠端系統或基礎設施的過程。

Ansible 使用以 YAML 格式編寫的 Playbook 來定義基礎架構的所需狀态。

Ansible 提供了許多内置子產品來執行配置任務,例如安裝包、配置網絡設定、管理使用者群組等等。

詞彙表

AAP:Ansible 自動化平台

介紹

假設您有一個應用程式,需要将其部署在三個或更多具有特定配置的環境中。

想象一下手動部署所有應用程式包含的配置是簡單且易于管理的,但是在一個小型組織中至少有十個應用程式,這在每個伺服器中配置是乏味但易于管理的。

現在想想在二十個應用程式中,這簡直是難以想象的快速管理和正确應用配置。

在我的最後一次,我使用 AAP 與 Ansible 一起工作了很多,并解決了部署和更新應用程式的許多問題。

其他時候我們不會犯錯誤,隻是伺服器沒有适當的基礎設施設定。

我們需要什麼來解決所有這些問題?

我們将使用一個名為 renderize 的函數。

我想相信你有這一步。

我們需要使用良好的開發實踐并全面了解所有系統。包括代碼、資料庫、伺服器、設定...

使用 app 建立一個 repo。我調用應用程式進行編碼。

假設這被稱為“repo-app”。

使用每個環境的配置值建立一個 repo。

假設這被稱為“repo-config”。

使用 ansible 代碼配置建立一個 repo。

假設這被稱為“repo-ansible”。

我們需要在 repo-app 中做什麼?

在存在每個環境特定配置的檔案中,如 develop、qa 和 master 的資料庫;或配置 Auth0 的值。

檔案可以是任何格式,即:json、yaml、xml 等。

我們将在以下位置寫入檔案:

# appsetings.json

{

"API": {

"Endpoint": "**Endpoint-develop**"

},

"reCaptcha": {

"SiteKey": "**SiteKey-develop**",

"SecretKey": "**SecretKey-develop**",

"Score": **Score-develop**,

},

"Logging": {

"LogLevel": {

"Default": "Information",

"Microsoft.AspNetCore": "Warning"

}

},

"AllowedHosts": "*"

}

Insted set values set { { NAME_VARIABLE } },需要連接配接的關鍵方塊:

# appsetings.json

{

"API": {

"Endpoint": "{ { Client.Endpoint } }"

},

"reCaptcha": {

"SiteKey": "{ { Client.SiteKey } }",

"SecretKey": "{ { Client.SecretKey } }",

"Score": { { Client.Score } },

},

"Logging": {

"LogLevel": {

"Default": "Information",

"Microsoft.AspNetCore": "Warning"

}

},

"AllowedHosts": "*"

}

我們需要在 repo-config 中做什麼?

警告:這個 repo 很特别,是以請保持專注。我們不會在分支之間進行合并或更新。我們與每個分支機構獨立合作。

在我的例子中,我使用 yaml 格式的檔案來設定配置值。

在這裡我們設定值,這個值将出現在應用程式所在的伺服器中,而我們使用 { { NAME_VARIABLE } } 配置的值:

---

# appsetings.yaml

Client:

Endpoint: Endpoint-develop

SiteKey: SiteKey-develop

SecretKey: SecretKey-develop

Score: Score-develop

在 qa:

Insted set values set { { NAME_VARIABLE } } 中:

---

# appsetings.yaml

Client:

Endpoint: Endpoint-qa

SiteKey: SiteKey-qa

SecretKey: SecretKey-qa

Score: Score-qa

在大師:

---

# appsetings.yaml

Client:

Endpoint: Endpoint-master

SiteKey: SiteKey-master

SecretKey: SecretKey-master

Score: Score-master

您可以在此處放置一些使用保險庫加密的秘密,稍後将使用 AAP 憑據進行渲染。

以及其他具有要渲染檔案的來源和目的地的檔案:

---

# templates.yaml

templates:

- origin: { { local_path } }/appsettings.json

dest: { { dest_path } }/appsettings.json

并為檔案添加許多源和目标以在您的伺服器中設定值。

我們需要在 repo-ansible 中做什麼?

通常我們會有一個隻有一個分支的回購協定。

我們需要用來渲染應用程式的任務是:

注意:假設我們使用組變量。

---

# renderize.yaml

- name: Download app

git:

repo: "https://{ { repos.app.url } }"

dest: "{ { repos.app.dir } }"

version: "{ { repos.app.branch } }"

force: no

delegate_to: localhost

run_once: true

- name: Download config

git:

repo: "https://{ { repos.config.url } }"

dest: "{ { repos.config.dir } }"

version: "{ { repos.config.branch } }"

force: no

delegate_to: localhost

run_once: true

# TO WINDOWS

- name: Renderize templates in windows

win_template:

src: "{ { repos.app.dir } }/{ { item.origin } }"

dest: "{ { item.dest } }"

loop: "{ { templates } }"

# TO LINUX

- name: Renderize templates in linux

template:

src: "{ { repos.app.dir } }/{ { item.origin } }"

dest: "{ { item.dest } }"

loop: "{ { templates } }"

繼續閱讀