• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            Fork me on GitHub
            隨筆 - 215  文章 - 13  trackbacks - 0
            <2025年6月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345


            專(zhuān)注即時(shí)通訊及網(wǎng)游服務(wù)端編程
            ------------------------------------
            Openresty 官方模塊
            Openresty 標(biāo)準(zhǔn)模塊(Opm)
            Openresty 三方模塊
            ------------------------------------
            本博收藏大部分文章為轉(zhuǎn)載,并在文章開(kāi)頭給出了原文出處,如有再轉(zhuǎn),敬請(qǐng)保留相關(guān)信息,這是大家對(duì)原創(chuàng)作者勞動(dòng)成果的自覺(jué)尊重!!如為您帶來(lái)不便,請(qǐng)于本博下留言,謝謝配合。

            常用鏈接

            留言簿(1)

            隨筆分類(lèi)

            隨筆檔案

            相冊(cè)

            Awesome

            Blog

            Book

            GitHub

            Link

            搜索

            •  

            積分與排名

            • 積分 - 216758
            • 排名 - 118

            最新評(píng)論

            閱讀排行榜

            http://www.jianshu.com/p/50b7dc07f1f1
            svn 安裝參考:
            http://www.ha97.com/4467.html

            svn hook 觸發(fā)的思路,參考了這里:
            http://www.open-open.com/lib/view/open1376871583553.html

            環(huán)境:CentOS 6.8 最小化安裝,svn 默認(rèn)已安裝,ansible 安裝步驟暫略。

            一、基本的SVN 服務(wù)配置


            查看可使用的 svn 命令:

            [root@vm_mac ~]# svn
            svn            svndumpfilter  svnserve       svnversion
            svnadmin       svnlook        svnsync

            1,新建一個(gè)目錄用于存儲(chǔ)SVN所有文件

            [root@vm_mac ~]# mkdir /home/svn

            2,新建一個(gè)版本倉(cāng)庫(kù)

            [root@vm_mac ~]# svnadmin create /home/svn/project

            3,初始化版本倉(cāng)庫(kù)中的目錄

            [root@vm_mac ~]# mkdir -p /root/project/{server,client,test} (建立臨時(shí)目錄)
            [root@vm_mac ~]# svn import /root/project/ file:///home/svn/project/ -m "svn dir init"
            Adding         /root/project/test
            Adding         /root/project/server
            Adding         /root/project/client
            
            Committed revision 1.
            
            [root@vm_mac ~]# rm -rf /root/project/ (刪除臨時(shí)建立的目錄)

            4,添加用戶(hù)

            要添加SVN用戶(hù)非常簡(jiǎn)單,只需在/home/svn/project/conf/passwd文件添加一個(gè)形如“username=password”的條目就可以了。為了測(cè)試,我添加了如下內(nèi)容:

            [users]
            # harry = harryssecret
            # sally = sallyssecret
            pm = pm_pw
            server_group = server_pw
            client_group = client_pw
            test_group = test_pw

            5,修改用戶(hù)訪問(wèn)策略

            /home/svn/project/conf/authz記錄用戶(hù)的訪問(wèn)策略,以下是參考:

            [groups]
            project_p = pm
            project_s = server1,server2,server3
            project_c = client1,client2,client3
            project_t = test1,test1,test1
            
            [project:/]
            @project_p = rw
            * =
            
            [project:/server]
            @project_p = rw
            @project_s = rw
            * =
            
            [project:/client]
            @project_p = rw
            @project_c = rw
            * =
            
            [project:/doc]
            @project_p = rw
            @project_s = r
            @project_c = r
            @project_t = r
            * =

            說(shuō)明:以上信息表示,只有project_p用戶(hù)組有根目錄的讀寫(xiě)權(quán)。r表示對(duì)該目錄有讀權(quán)限,w表示對(duì)該目錄有寫(xiě)權(quán)限,rw表示對(duì)該目錄有讀寫(xiě)權(quán)限。

            最后一行的*=表示,除了上面設(shè)置了權(quán)限的用戶(hù)組之外,其他任何人都被禁止訪問(wèn)本目錄。這個(gè)很重要,一定要加上!

            6,修改svnserve.conf文件,讓用戶(hù)和策略配置升效.

            svnserve.conf內(nèi)容如下:

            [general]
            anon-access = none
            auth-access = write
            password-db = /home/svn/project/conf/passwd
            authz-db = /home/svn/project/conf/authz

            7,啟動(dòng)服務(wù)器

            # svnserve -d -r /home/svn

            注意:如果修改了svn配置,需要重啟svn服務(wù),步驟如下:

            # ps -aux|grep svnserve
            # kill -9 ID號(hào)
            # svnserve -d -r /home/svn

            8,測(cè)試服務(wù)器

            # svn co svn://192.168.60.10/project
            Authentication realm: <svn://192.168.60.10:3690> 92731041-2dae-4c23-97fd-9e1ed7f0d18d
            Password for 'root':
            Authentication realm: <svn://192.168.60.10:3690> 92731041-2dae-4c23-97fd-9e1ed7f0d18d
            Username: server_group
            Password for 'server_group':
            svn: Authorization failed ( server_group沒(méi)用根目錄的訪問(wèn)權(quán) )
            
            # svn co svn://192.168.60.10/project
            Authentication realm: <svn://192.168.60.10:3690> 92731041-2dae-4c23-97fd-9e1ed7f0d18d
            Password for ‘root’:
            Authentication realm: <svn://192.168.60.10:3690> 92731041-2dae-4c23-97fd-9e1ed7f0d18d
            Username: pm
            Password for ‘pm’:
            A    project/test
            A    project/server
            A    project/client
            Checked out revision 1.  ( 測(cè)試提取成功 )
            
            # cd project/server
            # vim main.c
            # svn add main.c
            # svn commit main.c -m “測(cè)試一下我的C程序,看什么看,不行啊??”
            Adding         main.c
            Transmitting file data .
            Committed revision 2.  ( 測(cè)試提交成功 )

            二,結(jié)合 ansible 做代碼自動(dòng)部署


            實(shí)驗(yàn)環(huán)境:

            • svn服務(wù)器:192.168.0.120 (vm_mac.guli.com)
            • 目標(biāo)服務(wù)器:192.168.0.171 (lamp1.guli.com)

            測(cè)試目標(biāo):使用 svn 提交代碼,如果提交時(shí)添加注釋中含有 "auto_deploy" 字符串,則自動(dòng)部署到目標(biāo)服務(wù)器中。

            編輯 post-commit 腳本:

            [root@vm_mac hooks]# vi /home/svn/project/hooks/post-commit
            
            
            #!bin/bash
            REPOS="$1"
            REV="$2"
            
            export LC_CTYPE=en_US.UTF-8
            
            if (svnlook log -r $REV /home/svn/project | grep "auto_deploy"); then
                echo "`date` $REV auto deploy command received" >> /tmp/test_svnautocommit.txt
                ansible lamp -a "svn checkout "svn://192.168.0.120/project" /var/www/html/web1 --force --username="pm" --password="pm_pw" --non-interactive"
            fi

            腳本說(shuō)明:

            如果提交時(shí)添加注釋中含有 "auto_deploy",則記錄一條簡(jiǎn)單的日志,并且執(zhí)行一條 ansible 命令,意思是在 lamp 組的所有主機(jī)上(這里只定義了一個(gè) lamp1.guli.com),執(zhí)行 svn checkout 操作,將目標(biāo) repo 檢出到本地 /var/www/html/web1。第一次執(zhí)行時(shí),如果目錄不存在,會(huì)自動(dòng)創(chuàng)建目錄;否則進(jìn)行檢出。

            ansible 的用戶(hù)組配置:

            [root@vm_mac hooks]# vi /etc/ansible/hosts
            [lamp]
            lamp1.guli.com

            ansible 主機(jī)和 lamp1 建立 ssh 信任步驟等暫略,注意那是必要的。

            測(cè)試:

            1.lamp1 主機(jī)上,現(xiàn)在還沒(méi)有創(chuàng)建 web1 目錄:

            [root@lamp1 html]# pwd
            /var/www/html
            [root@lamp1 html]# ll
            total 4
            -rw-r--r-- 1 root root 24 Jul 16 14:54 index.html
            [root@lamp1 html]# hostname
            lamp1

            2.在 svn 服務(wù)器上,現(xiàn)在 /root/project/test 目錄下有如下文件,

             [root@vm_mac test]# pwd
             /root/project/test
             [root@vm_mac test]# ll
             total 0
             -rw-r--r-- 1 root root 0 Aug  5 11:00 ccc
             -rw-r--r-- 1 root root 0 Aug  5 11:06 ddd
             -rw-r--r-- 1 root root 0 Aug  5 11:37 eee
             -rw-r--r-- 1 root root 0 Aug  5 12:31 fff

            3.我們添加一個(gè) ggg 文件,并且提交

            [root@vm_mac test]# touch ggg
            [root@vm_mac test]# svn add ggg
            A         ggg
            [root@vm_mac test]# svn commit -m "auto_deploy"
            Adding         test/ggg
            Transmitting file data .
            Committed revision 47.

            現(xiàn)在版本是 47

            4.查看 lamp1 上是否同步過(guò)去了:

            [root@lamp1 html]# ll
            total 8
            -rw-r--r-- 1 root root   24 Jul 16 14:54 index.html
            drwxr-xr-x 6 root root 4096 Aug  5 13:29 web1
            [root@lamp1 html]# ll web1/test/
            total 0
            -rw-r--r-- 1 root root 0 Aug  5 13:29 ccc
            -rw-r--r-- 1 root root 0 Aug  5 13:29 ddd
            -rw-r--r-- 1 root root 0 Aug  5 13:29 eee
            -rw-r--r-- 1 root root 0 Aug  5 13:29 fff
            -rw-r--r-- 1 root root 0 Aug  5 13:29 ggg

            我們看到,在 /var/www/html 目錄下多了一個(gè) web1 目錄,并且 test 子目錄的內(nèi)容是同步的

            5.現(xiàn)在到 lamp1 上刪除一個(gè)文件 ccc ,并提交:

            [root@vm_mac test]# svn del ccc
            D         ccc
            [root@vm_mac test]# svn commit -m "auto_deploy"
            Deleting       test/ccc
            
            Committed revision 48.
            
            [root@vm_mac test]# ll
            total 0
            -rw-r--r-- 1 root root 0 Aug  5 11:06 ddd
            -rw-r--r-- 1 root root 0 Aug  5 11:37 eee
            -rw-r--r-- 1 root root 0 Aug  5 12:31 fff
            -rw-r--r-- 1 root root 0 Aug  5 13:28 ggg

            現(xiàn)在版本號(hào)到了 48

            6.再查看 lamp1 上是否同步過(guò)去了:

            [root@lamp1 html]# ll web1/test/
            total 0
            -rw-r--r-- 1 root root 0 Aug  5 13:29 ddd
            -rw-r--r-- 1 root root 0 Aug  5 13:29 eee
            -rw-r--r-- 1 root root 0 Aug  5 13:29 fff
            -rw-r--r-- 1 root root 0 Aug  5 13:29 ggg

            可以看到 ccc 文件成功被刪除了。

            好了,到了這里已經(jīng)基本實(shí)現(xiàn)了。這是使用 svn 檢出實(shí)現(xiàn)的方式。

            后續(xù)需要完善的幾個(gè)方面:


            1.實(shí)驗(yàn)里的檢出可能沒(méi)有加密,后面考慮使用 svn+ssh 協(xié)議,類(lèi)似這樣,更為安全,這個(gè)等有時(shí)間再完善一下:

            # Checkout subversion repository to specified folder.
            - subversion: repo=svn+ssh://192.168.0.120/project dest=/var/www/html/web1
            
            ansible lamp -m subversion -a "repo=svn+ssh://192.168.0.120/project dest=/var/www/html/web1 username=pm password=pm_pw revision=$REV"

            2.檢出時(shí),加上 -r $REV 應(yīng)該更好,因?yàn)槟J(rèn)是檢出 HEAD 版本,對(duì)于這一點(diǎn)待查

            3.我們根據(jù)注釋里的 auto_deploy 觸發(fā)自動(dòng)部署線上環(huán)境,也可以使用其他字符串,如 auto_test_deploy 觸發(fā)自動(dòng)部署測(cè)試環(huán)境。進(jìn)一步設(shè)想,是開(kāi)發(fā)一個(gè) web 界面,手動(dòng)選擇自動(dòng)部署測(cè)試環(huán)境,或者部署線上環(huán)境,這樣比較直觀好看一些。

            4.checkout 是每次都拷貝覆蓋,還是只更新需要更新的?

            我們實(shí)驗(yàn)一下 svn update:

            ansible lamp -a "svn update "svn://192.168.0.120/project" /var/www/html/web1 --force --username="pm" --password="pm_pw" --non-interactive"

            增加 hhh 文件,并提交,注釋為空,不要觸發(fā)自動(dòng)部署:

            [root@vm_mac test]# touch hhh
            [root@vm_mac test]# svn add hhh
            A         hhh
            [root@vm_mac test]# svn commit -m ""
            Adding         test/hhh
            Transmitting file data .
            Committed revision 49.
            [root@vm_mac test]# ansible lamp -a "svn update "svn://192.168.0.120/project" /var/www/html/web1 --force --username="pm" --password="pm_pw" --non-interactive"
            lamp1.guli.com | SUCCESS | rc=0 >>
            Skipped 'svn://192.168.0.120/project'
            A    /var/www/html/web1/test/hhh
            Updated to revision 49.
            Summary of conflicts:
              Skipped paths: 1

            查看 lamp1 上是否同步過(guò)去了:

            [root@lamp1 html]# ll web1/test/
            total 0
            -rw-r--r-- 1 root root 0 Aug  5 13:29 ddd
            -rw-r--r-- 1 root root 0 Aug  5 13:29 eee
            -rw-r--r-- 1 root root 0 Aug  5 13:29 fff
            -rw-r--r-- 1 root root 0 Aug  5 13:29 ggg
            -rw-r--r-- 1 root root 0 Aug  5 13:38 hhh

            可以看到成功添加了 hhh

            試一試刪除 ddd 文件,并且提交:

            [root@vm_mac test]# ll
            total 0
            -rw-r--r-- 1 root root 0 Aug  5 11:06 ddd
            -rw-r--r-- 1 root root 0 Aug  5 11:37 eee
            -rw-r--r-- 1 root root 0 Aug  5 12:31 fff
            -rw-r--r-- 1 root root 0 Aug  5 13:28 ggg
            -rw-r--r-- 1 root root 0 Aug  5 13:38 hhh
            [root@vm_mac test]# svn del ddd
            D         ddd
            [root@vm_mac test]# svn commit -m ""
            Deleting       test/ddd
            
            Committed revision 50.
            [root@vm_mac test]# ansible lamp -a "svn update "svn://192.168.0.120/project" /var/www/html/web1 --force --username="pm" --password="pm_pw" --non-interactive"
            lamp1.guli.com | SUCCESS | rc=0 >>
            Skipped 'svn://192.168.0.120/project'
            D    /var/www/html/web1/test/ddd
            Updated to revision 50.
            Summary of conflicts:
              Skipped paths: 1

            查看 lamp1 上是否同步過(guò)去了:

            [root@lamp1 html]# ll web1/test/
            total 0
            -rw-r--r-- 1 root root 0 Aug  5 13:29 eee
            -rw-r--r-- 1 root root 0 Aug  5 13:29 fff
            -rw-r--r-- 1 root root 0 Aug  5 13:29 ggg
            -rw-r--r-- 1 root root 0 Aug  5 13:38 hhh

            已經(jīng)刪除了 ddd 文件,證明是同步了

            注,svn 非交互式:--non-interactive,第一次 checkout 不再問(wèn)你是否需要保存密碼。

            看來(lái)也是可行的。

            到這里為止,已經(jīng)可以用一個(gè)實(shí)際的項(xiàng)目做部署測(cè)試,后面有時(shí)間再來(lái)補(bǔ)上這一部分。但是我想看了這整個(gè)的步驟,自己做實(shí)驗(yàn)驗(yàn)證一下也比較簡(jiǎn)單了。

            posted on 2017-03-01 17:46 思月行云 閱讀(548) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): 服務(wù)器\Ops
            欧美丰满熟妇BBB久久久| 国产精品伦理久久久久久| 欧美伊人久久大香线蕉综合69 | 欧美精品国产综合久久| 国产成人精品综合久久久久| 97久久超碰国产精品2021| 国产精品熟女福利久久AV| 青青草原综合久久大伊人| 97久久香蕉国产线看观看| 色播久久人人爽人人爽人人片aV| 香蕉久久夜色精品升级完成| 99久久精品无码一区二区毛片| 亚洲欧美成人久久综合中文网| 久久棈精品久久久久久噜噜| 午夜精品久久久久久| 精品国产福利久久久| 无码国内精品久久人妻| 亚洲日韩欧美一区久久久久我| 四虎国产精品免费久久5151 | 亚洲精品美女久久777777| 久久99精品九九九久久婷婷| 九九精品99久久久香蕉| 国产免费久久精品99re丫y| 精品国产乱码久久久久久浪潮| 国内精品久久久久影院优| 亚洲精品乱码久久久久久久久久久久 | 久久99国产精品久久99果冻传媒| 蜜桃麻豆WWW久久囤产精品| 欧美久久综合九色综合| 国産精品久久久久久久| 国内精品久久久久久久亚洲| 四虎国产永久免费久久| www久久久天天com| 9久久9久久精品| 99久久777色| 久久久久四虎国产精品| 久久综合久久久| 国内精品久久久久久不卡影院| 国产精品亚洲美女久久久| 99热热久久这里只有精品68| 亚洲一区中文字幕久久|