国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

docker與git實(shí)現(xiàn)push-to-deploy

ad6623 / 2709人閱讀

摘要:背景最近在研究基于的持續(xù)交付過程,可以構(gòu)建宿主機(jī)無關(guān)的軟件運(yùn)行環(huán)境,通過的機(jī)制在發(fā)生特定的事件時觸發(fā)目錄下特定的腳本,可以完成在代碼到遠(yuǎn)端的倉庫的同時,構(gòu)建運(yùn)行容器,達(dá)到的目的。項(xiàng)目介紹到此,下面開始利用的事件機(jī)制實(shí)現(xiàn)。

背景

最近在研究基于docker的持續(xù)交付過程,docker可以構(gòu)建宿主機(jī)無關(guān)的軟件運(yùn)行環(huán)境,通過git hooks的機(jī)制(在git repo發(fā)生特定的事件時觸發(fā)$GIT-DIR/hooks目錄下特定的腳本),可以完成在push代碼到遠(yuǎn)端的倉庫的同時,構(gòu)建、運(yùn)行docker容器,達(dá)到push-to-deploy的目的。

實(shí)踐 1. 環(huán)境:

一臺本地開發(fā)的機(jī)器

一個第三方代碼托管平臺,如github、coding

一臺屬于自己的linux服務(wù)器(用于部署)

一份用于交付的代碼,這里我用我最近在寫的項(xiàng)目dockercd的后端代碼,項(xiàng)目結(jié)構(gòu)如下:,項(xiàng)目用python flask編寫,下面介紹幾個主要的文件。

2. 項(xiàng)目
Dockerfile:用于構(gòu)建整個項(xiàng)目的docker容器,代碼如下:
FROM ubuntu
MAINTAINER jockerxu 
RUN sed -i "s/archive.ubuntu.com/mirrors.163.com/g" /etc/apt/sources.list
RUN apt-get update

RUN apt-get install -y apt-utils 
    && { 
        echo debconf debconf/frontend select Noninteractive; 
        echo mysql-server mysql-server/data-dir 
            select ""; 
        echo mysql-server mysql-server/root_password 
            password "123456"; 
        echo mysql-server mysql-server/root_password_again 
            password "123456"; 
        echo mysql-server mysql-server/remove-test-db 
            select true; 
    } | debconf-set-selections 
    && apt-get install -y python-pip mysql-server

RUN mkdir -pv /app
ADD . /app
WORKDIR /app
RUN pip install -r requirements.txt
expose 5000
CMD ./docker-entrypoint.sh

備注:一般情況下,docker容器一般是一個容器一個進(jìn)程的原則,這里為了方便把項(xiàng)目代碼和mysql放在同一容器中。

docker-entrypoint.sh:docker 入口腳本
_FIRST_TIME=$1
# 第一次啟動容器,需要初始化數(shù)據(jù)庫
if [[ $_FIRST_TIME == "true" ]]; then
    rm -rf /var/lib/mysql/*
    mysqld --initialize-insecure
    service mysql start
    mysqladmin -u root password "123456"
fi

service mysql start

python app.py

該文件主要在docker容器啟動后,在容器內(nèi)部啟動一些服務(wù)(這里是mysql)和項(xiàng)目的主進(jìn)程app.py。

run-project.sh:項(xiàng)目啟動腳本
set -x
PROJECT_NAME=dockercd_backend
CONTAINER_NAME="$PROJECT_NAME"
IMG_NAME=img_"$PROJECT_NAME"
DATADIR=__data__"$PROJECT_NAME"
docker rm -f "$CONTAINER_NAME" 1>&2 2>/dev/null
docker build -t "$IMG_NAME" .
mkdir -pv "$DATADIR"
_FIRST_TIME="false"
if [[ $(ls -A "$DATADIR") == "" ]]; then
    _FIRST_TIME="true"
fi
docker run -t -d --name "$CONTAINER_NAME" -p 5000:5000 
    -v $(pwd)/"$DATADIR":/var/lib/mysql "$IMG_NAME" 
    /bin/sh -c "./docker-entrypoint.sh $_FIRST_TIME"
set +x

這個腳本是項(xiàng)目的環(huán)境構(gòu)建以及部署腳本,主要功能是根據(jù)Dockerfile build 出docker imags,然后從鏡像啟動容器并掛載數(shù)據(jù)目錄$DATADIR。

項(xiàng)目介紹到此,下面開始利用git hooks的事件機(jī)制實(shí)現(xiàn)push-to-deploy。

3. git hooks

(1)登陸自己的Linux服務(wù)器,初始化一個git bare目錄,初始化后以前其他項(xiàng)目中的.git文件夾的內(nèi)容。

mkdir -pv repo.git && cd repo.git && git init --bare 

(2)在另一個文件夾中創(chuàng)建用于部署的目錄deploy(用于git pull存放代碼的目錄),并通過git clone 關(guān)聯(lián)第一步的repo.git

mkdir -pv deploy && cd deploy && git init
git clone ssh://username@server_ip:ssh_port/path_to/repo.git

(3)回到repo.git文件夾,編輯hooks/post-receive(默認(rèn)不存在這個文件),這個文件就是一個shell腳本,當(dāng)有代碼git push到這個倉庫的時候觸發(fā),內(nèi)容如下

unset GIT_DIR
DeployPath=/path_to/deploy
 
set -x
cd $DeployPath
git add . -A && git stash
git pull origin master
echo "pull code done"
./run-project.sh
echo "deploy done"
set +x  

主要功能就是進(jìn)入部署的目錄,拉取代碼,通過./run-project.sh啟動項(xiàng)目。

(4)來到自己的本地開發(fā)機(jī),通過git clone 獲取自己在github或者coding上項(xiàng)目的代碼,這里我的項(xiàng)目是上面提到的dockercd_backend,向項(xiàng)目添加一個遠(yuǎn)程倉庫(這里是我們自己服務(wù)器的repo.git),然后提交代碼到my_server的repo.git,觸發(fā)hooks/post-receive腳本,deploy目錄開始拉取代碼進(jìn)行部署。

git clone from_github_or_coding
git remote add my_server ssh://username@server_ip:ssh_port/path_to/repo.git
git push my_server master

至此,push-to-deploy完成。

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

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/26936.html

相關(guān)文章

  • 帶著問題學(xué) Kubernetes 基本單元 Pod

    摘要:后面會涉及以配置文件進(jìn)行部署。的調(diào)度完成,被分配到指定上。這是的一種最終狀態(tài)。圖相較而言,除了提供的基本功能,還支持聲明式的更新和回滾。共享數(shù)據(jù)存儲的問題主要分為數(shù)據(jù)臨時存儲與持久性存儲。 帶著問題學(xué) Kubernetes 基本單元 Pod 摘要:本文屬于原創(chuàng),歡迎轉(zhuǎn)載,轉(zhuǎn)載請保留出處:https://github.com/jasonGeng88/blog 文章一:帶著問題學(xué) Kube...

    pcChao 評論0 收藏0
  • 帶著問題學(xué) Kubernetes 基本單元 Pod

    摘要:后面會涉及以配置文件進(jìn)行部署。的調(diào)度完成,被分配到指定上。這是的一種最終狀態(tài)。圖相較而言,除了提供的基本功能,還支持聲明式的更新和回滾。共享數(shù)據(jù)存儲的問題主要分為數(shù)據(jù)臨時存儲與持久性存儲。 帶著問題學(xué) Kubernetes 基本單元 Pod 摘要:本文屬于原創(chuàng),歡迎轉(zhuǎn)載,轉(zhuǎn)載請保留出處:https://github.com/jasonGeng88/blog 文章一:帶著問題學(xué) Kube...

    frontoldman 評論0 收藏0
  • Docker + Jenkins + webhooks 自動部署基礎(chǔ)實(shí)踐

    摘要:自動部署基礎(chǔ)實(shí)踐熟悉的基本操作實(shí)現(xiàn)本地后自動構(gòu)建部署服務(wù)此實(shí)踐用于優(yōu)化自己在實(shí)際工作中的工作流在本地開發(fā)到服務(wù)器登錄云服務(wù)器或者簡化流程后本地開發(fā)云服務(wù)器自動構(gòu)建部署本實(shí)踐將結(jié)合技術(shù)來實(shí)現(xiàn)云服務(wù)器對各種環(huán)境的切換與部署。 Docker + Jenkins + webhooks 自動部署基礎(chǔ)實(shí)踐 熟悉 jenkins 的基本操作 ?? 實(shí)現(xiàn)本地 git push 后 jenkins 自...

    Charlie_Jade 評論0 收藏0
  • AI開發(fā)書籍分享

    摘要:編程書籍的整理和收集最近一直在學(xué)習(xí)深度學(xué)習(xí)和機(jī)器學(xué)習(xí)的東西,發(fā)現(xiàn)深入地去學(xué)習(xí)就需要不斷的去提高自己算法和高數(shù)的能力然后也找了很多的書和文章,隨著不斷的學(xué)習(xí),也整理了下自己的學(xué)習(xí)筆記準(zhǔn)備分享出來給大家后續(xù)的文章和總結(jié)會繼續(xù)分享,先分享一部分的 編程書籍的整理和收集 最近一直在學(xué)習(xí)deep learning深度學(xué)習(xí)和機(jī)器學(xué)習(xí)的東西,發(fā)現(xiàn)深入地去學(xué)習(xí)就需要不斷的去提高自己算法和高數(shù)的能力然后...

    huayeluoliuhen 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<