network setup service启动后自动停止_一个简单的测试环境下的自动化部署方案
筆者是公司是一個分前后端開發(fā)的公司。而筆者是一個普通的后端開發(fā)工程師。在和前端工程師協(xié)同開發(fā)時,為了給前端工程師提供接口,往往要將寫好的代碼交付并部署到測試環(huán)境。因而這導致筆者經(jīng)常需要打包項目更新到測試環(huán)境。這種情況十分煩人,因而筆者想了這套簡單的方案來解決這個問題。
方案思路
1、采用分支管理更完善的Git進行代碼管理,以不同分支版本作為不同環(huán)境的構(gòu)建版本
舉例:
master 分支作為生產(chǎn)環(huán)境的構(gòu)建版本
test 分支作為測試環(huán)境的構(gòu)建版本
dev 分支作為日常開發(fā)(包含未過debug)的代碼存儲管理
2、使用自動化構(gòu)建工具,在不同環(huán)境下獲取不同分支的代碼進程構(gòu)建運行
筆者實例
1、使用開源的Gitea作為代碼倉庫管理
由于大部分公司都不愿意將代碼放至網(wǎng)上(即使是私有倉),因此這里使用開源的Gitea項目部署在測試環(huán)境上
2、編寫一個極為簡單的自動化構(gòu)建工具部署到測試服務器上
由于測試環(huán)境都是些低配服務器,為了節(jié)省資源,存放更多的應用到服務器中。因此筆者棄用市面上的大型自動化構(gòu)建工具,而去使用golang編寫一個極其簡單的自動化構(gòu)建工具
筆者的工具開源連接http://github.com/lroyia/goauto
模擬實操
以上方案在window及l(fā)inux下均可用,下文以CentOS服務器為例。請按照自己的服務器操作系統(tǒng)類型酌情修改
1、下載Gitea
前往Gitea官方下載Gitea,并根據(jù)官方文檔安裝。以下使用1.12.4版本為例
| 12 | wget -O gitea https://dl.gitea.io/gitea/1.12.4/gitea-1.12.4-linux-amd64 chmod +x gitea |
2、安裝數(shù)據(jù)庫以支撐Gitea
Gitea支持SQLite,MySQL,PostgreSQL和MSSQL,這里以PostgreSQL作為例。其他數(shù)據(jù)庫請自行根據(jù)官方文檔進行配置
修改postgresql.conf,將加密方式改為sha
| 1 | password_encryption = scram-sha-256 |
轉(zhuǎn)至postgres用戶,并用CLI登錄PG
| 12 | su postgres pgsql |
創(chuàng)建數(shù)據(jù)庫用戶
| 1 | CREATE ROLE gitea WITH LOGIN PASSWORD 'gitea'; |
創(chuàng)建數(shù)據(jù)庫
| 12 | CREATE DATABASE giteadb WITH OWNER gitea TEMPLATE template0 ENCODING UTF8 LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8'; \q --退出CLI |
修改pg_hba.conf,授權(quán)登錄
本地登錄:
| 1 | local giteadb gitea scram-sha-256 |
遠程登錄:
| 1 | host giteadb gitea 192.168.6.11/24 scram-sha-256 |
做完以上配置后重啟服務或重載配置
3、初始化Gitea并構(gòu)建服務
命令行執(zhí)行
| 1 | ./gitea web |
打開瀏覽器,訪問服務器3000的端口訪問Gitea頁面
隨意點擊頂部bar上的任意按鈕,即可進入初始化的install頁面。按照自己的需要配置好后,在服務器上gitea的同一目錄下就會多出一個custom目錄。用于記錄配置的app.ini文件就在該目錄下的conf目錄里。
接著構(gòu)建服務。ctrl + c取消剛剛運行的gitea進程,然后服務器運行
| 1 | sudo vim /etc/systemd/system/gitea.service |
拷貝示例代碼gitea.service按照自己的需求取消注釋及修改
示例:
| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 | [Unit] Description=Gitea (Git with a cup of tea) After=syslog.target After=network.target ### # Don't forget to add the database service requirements ### # #Requires=mysql.service #Requires=mariadb.service #Requires=postgresql-11.service #Requires=memcached.service #Requires=redis.service # ### # If using socket activation for main http/s ### # #After=gitea.main.socket #Requires=gitea.main.socket # ### # (You can also provide gitea an http fallback and/or ssh socket too) # # An example of /etc/systemd/system/gitea.main.socket ### ## ## [Unit] ## Description=Gitea Web Socket ## PartOf=gitea.service ## ## [Socket] ## Service=gitea.service ## ListenStream= ## NoDelay=true ## ## [Install] ## WantedBy=sockets.target ## ### [Service] # Modify these two values and uncomment them if you have # repos with lots of files and get an HTTP error 500 because # of that ### #LimitMEMLOCK=infinity #LimitNOFILE=65535 RestartSec=2s Type=simple User=root #Group=git WorkingDirectory=/usr/local/gitea/gitea-repositories # If using Unix socket: tells systemd to create the /run/gitea folder, which will contain the gitea.sock file # (manually creating /run/gitea doesn't work, because it would not persist across reboots) #RuntimeDirectory=gitea ExecStart=/usr/local/gitea/bin/gitea web --config /usr/local/gitea/custom/conf/app.ini Restart=on-abort [Install] WantedBy=multi-user.target |
激活gitea.service并將它作為系統(tǒng)自啟動服務:
| 12 | sudo systemctl enable gitea sudo systemctl start gitea |
啟動服務后,瀏覽器訪問Gitea的頁面,注冊賬號并登陸。
以下操作為項目示例:
點擊界面右上角的+號,創(chuàng)建一個demo倉庫
進入http://start.spring.io/創(chuàng)建一個springboot的demo項目
在demo項目中加入一個controller,使其返回一個hello
在倉庫首頁點擊按鈕,復制克隆路徑
命令行運行
| 1 | git clone http://192.168.6.11:3000/lroyia/springboot-example.git |
拉取倉庫后將demo項目中的.git去掉,并將其他文件全部拉到拉取的倉庫目錄下
命令行進入倉庫目錄,并執(zhí)行命令推送所有代碼
| 123 | git add . # 將當前目錄下所有文件(沒有被.ignore排除的文件)列入提交選項 git commit -m 'init' # 將所有文件提交到本地倉庫,提交消息問'init' git push # 將本地倉庫的更改推送到遠程倉庫 |
回到瀏覽器的gitea頁面,點擊當前分支的下拉列表,輸入新標簽名,從當前分支的節(jié)點創(chuàng)建新分支(這里創(chuàng)建test分支和dev分支)
構(gòu)建服務器上運行
| 1 | git config --global credential.helper store |
保證git在輸入一次帳號密碼后不再需要輸入帳號密碼,然后拉取倉庫并檢出test分支
| 123 | git clone http://192.168.6.11:3000/lroyia/springboot-example.git git checkout test git pull # 為了調(diào)出帳號驗證,多調(diào)用一次pull |
給服務器安裝golang環(huán)境,拉取博主的自動化程序代碼,并構(gòu)建
| 123 | git clone https://github.com/lroyia/goauto.git # clone code cd goauto # cd dir go build # build |
修改里面的conf.ini,配置demo項目的部署信息:
| 1234567891011 | [conf] sleep=10 # 輪詢檢查倉庫新增的休眠時間 [dir] boot=/usr/local/springboot-example # 項目倉庫拉取目錄 [branch] boot=test # 監(jiān)聽的分支 [script] boot=mvn package -Dmaven.test.skip=true | java -jar target/springboot-example-0.0.1-SNAPSHOT.jar # 構(gòu)建腳本“|”分開,最后一個默認為運行腳本 |
最后啟動運行./goauto啟動,linux下如果需要關(guān)系運行,可使用以下命令掛起運行
| 1 | nohup ./goauto >日志文件名.log 2>&1 & |
以上便是這個方案的全部示例搭建過程
改進方案
在這個方案中,其實我們在構(gòu)建部分再獨立一個程序出來做這一步驟。構(gòu)建后通過Docker存儲Artifacts,再通過程序調(diào)用Docker獲取對應Artifacts重新部署。這樣可以避免由編譯構(gòu)建時間引起的服務真空期。但公司大部分服務器都是Windows服務器,Docker在Windows以及虛擬機中部署的坑多,就不考慮這個改進方案了,以后有機會在看著辦。
總結(jié)
以上是生活随笔為你收集整理的network setup service启动后自动停止_一个简单的测试环境下的自动化部署方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: combobox 怎么实现对listvi
- 下一篇: python list去掉引号_最新的p