亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

聯(lián)調(diào)環(huán)境快速部署——基于docker-compose的CI/CD實(shí)踐

klinson / 1653人閱讀

摘要:三部署架構(gòu)說(shuō)明這個(gè)方案僅適用于小公司敏捷項(xiàng)目團(tuán)隊(duì)聯(lián)調(diào)測(cè)試環(huán)境的部署,同時(shí)也可以作為學(xué)習(xí)入門的,并不適用于有一定規(guī)模的生產(chǎn)環(huán)境。另外,建議把測(cè)試域名泛解析到部署這臺(tái)服務(wù)的機(jī)器。模塊配置部署腳本業(yè)務(wù)模塊的配置基本是通過(guò)部署腳本來(lái)操作的。

項(xiàng)目地址: https://github.com/xiongwilee...
基本特性:

快捷部署多人nginx+php的開(kāi)發(fā)測(cè)試環(huán)境,也可以擴(kuò)展構(gòu)建其他語(yǔ)言;

基于Docker和docker-compose,不依賴K8S等高級(jí)編排工具,成本低廉、部署簡(jiǎn)單;

Docker內(nèi)置集成jenkins,一鍵添加開(kāi)發(fā)測(cè)試角色,無(wú)需額外配置;

支持微服務(wù)架構(gòu),適用于小公司or敏捷項(xiàng)目團(tuán)隊(duì),也可以作為Docker學(xué)習(xí)入門的case

一、背景

在角色分工明確的團(tuán)隊(duì)里,什么樣的條件才算是最優(yōu)雅的聯(lián)調(diào)和測(cè)試環(huán)境?在大廠里肯定都有很多高級(jí)的解決方案,比如這些:

docker搭建大規(guī)模測(cè)試環(huán)境的實(shí)踐 / 測(cè)試開(kāi)發(fā)之路--k8s 下的大規(guī)模持續(xù)集成與環(huán)境治理

DevOps落地實(shí)踐:BAT系列:CICD:iPipe vs CCI

阿里 DevOps 轉(zhuǎn)型實(shí)踐

大型團(tuán)隊(duì)的合作框架下,必須依賴更復(fù)雜的DevOps架構(gòu)(參考:DevOps詳解)。但對(duì)于成員不多、負(fù)責(zé)的Web項(xiàng)目工程量也不大的團(tuán)隊(duì),面臨的問(wèn)題肯定也更單純:

前后端角色工程解耦,開(kāi)發(fā)環(huán)境分離;

工程師只關(guān)注業(yè)務(wù)邏輯本身,持續(xù)集成;

環(huán)境和角色一鍵創(chuàng)建、一鍵更新、一鍵銷毀,環(huán)境之間不受影響;

即便是只有這些需求,在以往的“開(kāi)發(fā)機(jī)”的聯(lián)調(diào)環(huán)境里,一旦需要添加開(kāi)發(fā)或者測(cè)試人員,或者需要更新nginx的配置,再或者需要更新PHP、Nodejs的版本……對(duì)于測(cè)試環(huán)境的維護(hù)來(lái)說(shuō)都是很痛苦的。

二、快速開(kāi)始

注意: 當(dāng)前部署方案僅依賴:Docker,Docker-compose,git

1、下載代碼
$ git clone https://github.com/xiongwilee/docker-compose-boilerplate.git
2、添加測(cè)試角色demo
$ cd docker-compose
$ sh build.sh -u demo -m admin:master

此時(shí),在app/會(huì)創(chuàng)建demo目錄,在nginx/conf.d會(huì)創(chuàng)建demo.conf文件。

3、啟動(dòng)服務(wù)
$ docker-compose up -d

此時(shí),再執(zhí)行docker-compose ps會(huì)發(fā)現(xiàn)創(chuàng)建了三個(gè)鏡像。然后,配置hosts使sample.demo.testdomain.com指向當(dāng)前機(jī)器,然后訪問(wèn)http://sample.demo.testdomain... 返回phpinfo()信息,說(shuō)明創(chuàng)建成功。

三、部署架構(gòu)說(shuō)明
TIPS: 這個(gè)方案僅適用于小公司or敏捷項(xiàng)目團(tuán)隊(duì)聯(lián)調(diào)測(cè)試環(huán)境的部署,同時(shí)也可以作為Docker學(xué)習(xí)入門的case,并不適用于有一定規(guī)模的生產(chǎn)環(huán)境。

在“開(kāi)發(fā)機(jī)”上僅僅安裝docker、docker-compose、git之后就能跑起來(lái)Nginx、PHP的應(yīng)用,當(dāng)然得益于docker容器化的思想。其實(shí)這個(gè)的實(shí)現(xiàn)也僅僅利用了容器化的這個(gè)特性,最終docker-compose打包的整個(gè)服務(wù)會(huì)長(zhǎng)駐內(nèi)存,無(wú)需太多的管理成本。

最終的實(shí)現(xiàn)還具備兩個(gè)特點(diǎn):

基于這個(gè)實(shí)現(xiàn)的boilerplate你可以輕易的遷移到其他項(xiàng)目,以及其他語(yǔ)言;

每個(gè)sample管理每個(gè)應(yīng)用的倉(cāng)儲(chǔ)地址、環(huán)境變量配置、更新代碼后的鉤子等操作;

其實(shí)現(xiàn)原理為:通過(guò)腳本文件,管理docker-compose隱射到宿主機(jī)的配置、源碼,同時(shí)將docker-compose暴露出來(lái)以實(shí)現(xiàn)服務(wù)的管理。架構(gòu)圖如下:

1、docker-compose配置文件:docker-compose.yml

先看docker-compose的配置文件docker-compose.yml(篇幅原因,刪掉了一部分配置):

version: "3"
services:
    # 所有的PHP環(huán)境構(gòu)建在app容器里
    php:
        build: ./php
        expose:
            - "9000"
    # nginx容器
    nginx:
        build: ./nginx
        # 端口映射
        ports:
            - "80:80"
        # 依賴關(guān)系聲明,先跑php所有服務(wù)
        depends_on:
            - "php"
    # jenkins容器
    jenkins:
        image: jenkins:latest
        ports:
            - "8080:8080"
            - "50000:50000"

這其實(shí)就是一個(gè)普通的PHP開(kāi)發(fā)環(huán)境示例:可以看到就php、nginxjenkins三個(gè)基本容器,除了jenkins,其他的容器均使用Dockerfile(build配置)來(lái)構(gòu)建。

2、構(gòu)建腳本:build.sh

由于在docker中實(shí)現(xiàn)了nginx配置文件及php源碼文件的映射到宿主機(jī),需要通過(guò)管理宿主機(jī)上文件就可以管理代碼的發(fā)布和部署了,build.sh就是用來(lái)做這件事情的。

當(dāng)然了,如果需要在部署代碼完成之后,做重啟、編譯等操作,通過(guò)sample目錄下的鉤子就可以實(shí)現(xiàn)了。

具體實(shí)現(xiàn)可以參考build.sh源碼。

四、詳細(xì)配置 1、開(kāi)發(fā)測(cè)試環(huán)境域名配置

nginx/conf.d/sample修改測(cè)試環(huán)境域名,示例中使用的testdomain.com改成自己的測(cè)試環(huán)境域名即可。

另外,建議把測(cè)試域名泛解析到部署這臺(tái)服務(wù)的機(jī)器。

2、docker-compose.yml配置說(shuō)明

docker-compose的配置文件基本不需要修改,只需要關(guān)注:nginx是80端口映射到80端口,jenkins是8080端口,而php-fpm的9000端口不對(duì)外開(kāi)放即可。

當(dāng)然了,如果php環(huán)境需要安裝依賴,就需要修改./php/Dockerfile。此外,如果需要添加其他的語(yǔ)言環(huán)境,就需要添加一個(gè)容器的聲明。

3、模塊配置 1)部署腳本build.sh

業(yè)務(wù)模塊的配置基本是通過(guò)部署腳本build.sh來(lái)操作的。執(zhí)行./build.sh提示如下:

Example:
  ./build.sh -u xiongwilee -m php:online,service:online
Usage:
  -u 必填,角色名                       示例:default
  -m 選填,要更新代碼的業(yè)務(wù)模塊         示例:php:online,service:online
  -e 選填,更新業(yè)務(wù)模塊對(duì)應(yīng)的環(huán)境變量   示例:php:true,service:false
  -d 選填,刪除角色                     示例:default
2)PHP模塊

新增角色實(shí)時(shí)上是根據(jù)php/sample目錄創(chuàng)建了一個(gè)角色名對(duì)應(yīng)的文件夾。在sample里只有四個(gè)文件:

a. 倉(cāng)儲(chǔ)配置

.gitaddress:聲明當(dāng)前模塊的遠(yuǎn)程倉(cāng)儲(chǔ)地址

b. 鉤子

on_add.sh:創(chuàng)建角色時(shí)下載PHP模塊代碼完成之后的回調(diào)鉤子,用已更新環(huán)境變量等文件,執(zhí)行./build.sh -u {name}會(huì)被調(diào)用

on_upd.sh:某個(gè)模塊更新完成之后的回調(diào)鉤子,用以編譯、重啟服務(wù)等操作,執(zhí)行./build.sh -u {name} -m web:master會(huì)被調(diào)用

on_env.sh:更新環(huán)境變量的鉤子,執(zhí)行./build.sh -u {name} -m web:master -e web:true都會(huì)被調(diào)用。

c. 示例目錄app/sample/sample

在sample目錄下還有個(gè)sample目錄,這個(gè)是一個(gè)php模塊示例;新增角色之后訪問(wèn)sample.{name}.testdomain.com就可以來(lái)測(cè)試是否成功新增。

3)Nginx配置
a. nginx/conf.d目錄

和php/sample目錄一樣,在nginx/conf.d下也有個(gè)sample文件,這個(gè)也是在新增角色時(shí)使用的示例配置文件。注意,新增角色會(huì)把sample中的${name}替換成當(dāng)前角色名。

b. nginx/log目錄

nginx/log目錄及nginx所有日志文件的宿主機(jī)映射目錄。

4)Jenkins配置方案

jenkins默認(rèn)開(kāi)啟8080端口,你可以直接通過(guò)http://jenkins.testdomain.com:8080訪問(wèn)jenkins服務(wù)。具體初始化過(guò)程這里不詳述。

a. 安裝插件獲取當(dāng)前用戶名

在通過(guò)Jenkins執(zhí)行build.sh腳本時(shí),上文提到的角色名怎么獲取呢?其實(shí)就是jenkins的用戶名,你可以通過(guò)創(chuàng)建多個(gè)jenkins的用戶來(lái)創(chuàng)建測(cè)試環(huán)境角色。

參考jenkins插件-Build User Vars Plugin簡(jiǎn)單說(shuō)明安裝jenkins插件。

安裝完成之后就可以通過(guò)BUILD_USER環(huán)境變量獲取當(dāng)前jenkins的用戶名了(當(dāng)然了,新建jenkins用戶的用戶名最好是拼音或英文)。

b. Docker鏡像中的Jenkins與宿主機(jī)通信

由于jenkins存在Docker鏡像中,每次jenkins操作需要執(zhí)行build.sh都需要使鏡像中的jenkins與宿主機(jī)通信。這里使用的方法是,在jenkins的鏡像添加到宿主機(jī)的信任關(guān)系。

然后就可以通過(guò)ssh apple@{jenkins內(nèi)網(wǎng)IP} "sh build.sh"來(lái)直接執(zhí)行宿主機(jī)里的腳本了(這里肯定還有更優(yōu)雅的方法)。

c. 添加job

添加一個(gè)任務(wù)后只需要配置兩項(xiàng):

general:“參數(shù)化構(gòu)建過(guò)程”:

選擇 "String Parameter",添加"web"、"web-fe"、"service"字段

選擇"Boolean Parameter",添加"web_env"、“service_env”字段。

構(gòu)建:"Execute Shell":

echo "正在將 web-fe:${web_fe},web:${web},service:${service}  部署到 ${BUILD_USER_ID} 環(huán)境"

ssh apple@{jenkins內(nèi)網(wǎng)IP} "sh ~/docker-compose/build.sh -u ${BUILD_USER_ID} -m web-fe:${web_fe},web:${web},service:${service} -e web:${web_env},service:${service_env}";

這樣,通過(guò)這個(gè)任務(wù)就可以直接在jenkins中執(zhí)行宿主機(jī)中的build.sh腳本,從而實(shí)現(xiàn)新增角色、更新代碼的操作了。

最后,如果需要在PHP的服務(wù)基礎(chǔ)上集成其他語(yǔ)言的服務(wù),比如Nodejs,涉及到的改動(dòng)有:

添加Nodejs鏡像:docker-compose.yml

添加部署任務(wù):build.sh

創(chuàng)建及刪除角色流程

部署流程

nginx配置文件示例:nginx/conf.d/sample

五、貢獻(xiàn)

歡迎提供其他更專業(yè)的思路,歡迎提issue、fork;也可以郵件聯(lián)系:xiongwilee[at]foxmail.com。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/40065.html

相關(guān)文章

  • 聯(lián)調(diào)環(huán)境快速部署——基于docker-composeCI/CD實(shí)踐

    摘要:三部署架構(gòu)說(shuō)明這個(gè)方案僅適用于小公司敏捷項(xiàng)目團(tuán)隊(duì)聯(lián)調(diào)測(cè)試環(huán)境的部署,同時(shí)也可以作為學(xué)習(xí)入門的,并不適用于有一定規(guī)模的生產(chǎn)環(huán)境。另外,建議把測(cè)試域名泛解析到部署這臺(tái)服務(wù)的機(jī)器。模塊配置部署腳本業(yè)務(wù)模塊的配置基本是通過(guò)部署腳本來(lái)操作的。 項(xiàng)目地址: https://github.com/xiongwilee...基本特性: 快捷部署多人nginx+php的開(kāi)發(fā)測(cè)試環(huán)境,也可以擴(kuò)展構(gòu)建其...

    xiaokai 評(píng)論0 收藏0
  • 基于droneCI/CD,對(duì)接kubernetes,見(jiàn)證靈活與自由,CI/CD對(duì)接kubernet

    摘要:所以我們選一個(gè)倉(cāng)庫(kù)倉(cāng)庫(kù)比較多,我這里選用,都行,根據(jù)需求自行選擇訪問(wèn)端口,然后就沒(méi)有然后了功能沒(méi)有那么強(qiáng)大,不過(guò)占用資源少,速度快,我們穩(wěn)定運(yùn)行了幾年了。 kubernetes集群三步安裝 CI 概述 用一個(gè)可描述的配置定義整個(gè)工作流 程序員是很懶的動(dòng)物,所以想各種辦法解決重復(fù)勞動(dòng)的問(wèn)題,如果你的工作流中還在重復(fù)一些事,那么可能就得想想如何優(yōu)化了 持續(xù)集成就是可以幫助我們解決重復(fù)的代碼...

    iOS122 評(píng)論0 收藏0
  • 超長(zhǎng)干貨:基于DockerDevOps CI/CD實(shí)踐——來(lái)自iHealth分享

    摘要:在貓屎氤氳的霧氣里角仰望天花板,手機(jī)微信提醒這次構(gòu)建成功或失敗,并附帶污言穢語(yǔ)。這時(shí)他可以開(kāi)始往工位走,坐下時(shí),微信又會(huì)提醒本次部署到成功或失敗。與企業(yè)微信的集成在決定使用之前,需要知道的是,是一個(gè)高度依賴社區(qū)的項(xiàng)目。 前言 相信我,一切事情的發(fā)生都是趕鴨子上架,沒(méi)有例外。人類所有偉大的變革都是迫不得已,可又是那么順其自然。比如容器(docker)技術(shù)的誕生,比如箭在弦上的創(chuàng)業(yè),比如野...

    Dongjie_Liu 評(píng)論0 收藏0
  • 網(wǎng)易容器云平臺(tái)微服務(wù)化實(shí)踐(一)

    摘要:本文是網(wǎng)易容器云平臺(tái)的微服務(wù)化實(shí)踐系列文章的第一篇。網(wǎng)易容器云平臺(tái)的前身是網(wǎng)易應(yīng)用自動(dòng)部署平臺(tái),它能夠利用云提供的基礎(chǔ)設(shè)施,實(shí)現(xiàn)包括構(gòu)建和部署一體化在內(nèi)的整個(gè)應(yīng)用生命周期管理。目前網(wǎng)易云容器服務(wù)團(tuán)隊(duì)以的方式管理著微服務(wù),每周構(gòu)建部署次數(shù)。 此文已由作者馮常健授權(quán)網(wǎng)易云社區(qū)發(fā)布。 歡迎訪問(wèn)網(wǎng)易云社區(qū),了解更多網(wǎng)易技術(shù)產(chǎn)品運(yùn)營(yíng)經(jīng)驗(yàn)。 摘要:網(wǎng)易云容器平臺(tái)期望能給實(shí)施了微服務(wù)架構(gòu)的團(tuán)隊(duì)提供完...

    zhjx922 評(píng)論0 收藏0
  • 如何用 Docker 實(shí)現(xiàn) PHP 命令行程序 CI/CD

    摘要:數(shù)人云今天帶來(lái)的文章將分享如何用實(shí)現(xiàn)命令行程序的過(guò)程中整體思路以及需要注意哪些問(wèn)題。月日,超越傳統(tǒng)運(yùn)維之道的話題將在北京延續(xù),四位業(yè)界大牛技術(shù)齊聚,結(jié)合傳統(tǒng)運(yùn)維現(xiàn)狀及實(shí)踐案例,講述的超越之道。 數(shù)人云今天帶來(lái)的文章將分享如何用Docker實(shí)現(xiàn)PHP命令行程序的CI/CD過(guò)程中整體思路以及需要注意哪些問(wèn)題。 6月10日,《DevOps&SRE超越傳統(tǒng)運(yùn)維之道》的話題將在北京延續(xù),四位業(yè)界...

    Pink 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<