摘要:博客地址起因因為生產需要最近又重新折騰了一下和。主要目的是想自動編譯,打包,部署一些的。將宿主機的掛載為容器的目錄。這樣做的目的是,如果容器被不小心刪除也不至于的數據丟失。其中的安裝路徑在中。
博客地址:yeqown.github.com
因為生產需要最近又重新折騰了一下Jenkins和docker。主要目的是想自動編譯,打包,部署一些Golang的HttpServer。于是決定使用Jenkins來做這個持續集成的載體,選擇Jenkins出于兩點原因:
1. 以前就使用過,上手會更快
2. 社區比較成熟,插件和文檔豐富
這一步,作為前置條件且不是本文主要要描述的步驟,因此略去。網上也有很多參考資料~
為了方便我才用了docker-compose這個工具,docker-compose 基礎可以參見我的docker-compose上手。這里直接上配置:
version: "2" services: jenkins: container_name: jenkins-lts ports: - 9001:8080 - 50000:50000 image: jenkins/jenkins:lts volumes: - /home/worker/jenkins/jenkins_home:/var/jenkins_home
配置也是官方的示例配置。
Note: 將宿主機的/home/worker/jenkins/jenkins_home掛載為容器的/var/jenkins_home目錄。這樣做的目的是,如果容器被不小心刪除也不至于Jenkins的數據丟失。
到這里,我們只需要執行docker-compose up -d便可以將Jenkins容器跑起來了,再配置一下Nginx,便可以直接訪問到Jenkins頁面了,并進行初始化。
我的目錄結構如下:
? jenkins ll total 8.0K -rw-rw-r-- 1 worker worker 220 May 2 17:19 docker-compose.yml drwxrwxr-x 19 worker worker 4.0K May 3 15:53 jenkins_home ? jenkins pwd /home/worker/jenkins ? jenkins docker-compose up -d # 運行
Publish Over SSH配置,由于我們是通過docker運行的Jenkins,因此要特別配置一下SSH,方便Jenkins部署項目。這里先列出步驟:
安裝Publish Over SSH
容器內ssh-keygen
配置Publish Over SSH
配置Git倉庫部署公鑰 #這一步相當于拉取代碼的Credentials
因為默認的Jenkins鏡像是不帶有Go的編譯工具的,所以我們很有必要安裝一個Go插件Go-Plugin-Jenkins
具體步驟如下:
安裝JenkinsGo插件
在全局工具配置中,安裝Go
在對應任務配置-> 構建環境項,選擇Go版本
這一步的詳細步驟可以在參考文獻第一條中查詢Setup Go Build Environment
Note: 官方文檔中說全局配置Go是在系統設置中進行的,但是我用的Jenkins ver. 2.107.2,這一項配置是在全局工具配置中。
編寫一個makefile來打包項目,通過scp來分發部署服務,這也是配置Publish Over SSH的目的。
由于Jenkins鏡像不帶有make相關工具(甚至Vim也沒有),所以需要安裝Make及其相關工具。與此同時,如果項目使用了相關的依賴管理工具,因此還有必要去配置相關的GO環境變量。其中Go的安裝路徑在:
/var/jenkins_home/tools/org.jenkinsci.plugins.golang.GolangInstallation/$GOVERSION中。
這里貼上我的Makefile
# To test, build, deploy offline-tasks # -: ignore this commnad error # @: no display current commnad to std output # Commnads declare GOCMD=go GOTEST=$(GOCMD) test GOBUILD=$(GOCMD) build # Params define MAIN_PATH=../main PACKAGE_PATH=../package PACKAGE_BIN_PATH=../package/bin BIN=offline-tasks FILENAME=offline-tasks.tar.gz # Deploy Params DEV_HOST=zy-dev DEV_TAR_PATH=/home/worker/project/offline-tasks PROD_HOST=zy-pro2 PROD_TAR_PATH=/home/worker/project/offline-tasks default: build pack test: # testing - $(GOTEST) ../... -v build: # building mkdir $(PACKAGE_PATH) mkdir $(PACKAGE_BIN_PATH) cd $(MAIN_PATH) && $(GOBUILD) -o $(BIN) mv "$(MAIN_PATH)/$(BIN)" $(PACKAGE_BIN_PATH) cp -r "../configs" $(PACKAGE_PATH) cp "../sh/start.sh" $(PACKAGE_BIN_PATH) pack: # packing cd $(PACKAGE_PATH) && tar -zcvf ../$(FILENAME) ./* mv ../$(FILENAME) $(PACKAGE_PATH) ################################################## # # # deploy: from zy-dev to execute # # deploy-dev: from dev-CI to execute # # deploy-prod: from prod-CI to execute # # # ################################################## deploy: clean build pack # deploy dev from dev cp $(PACKAGE_PATH)/$(FILENAME) $(DEV_TAR_PATH) cd $(DEV_TAR_PATH) && tar zxvf $(FILENAME) && supervisorctl -c configs/dev.supervisord.conf restart offline-tasks deploy-dev: clean build pack # deploy-dev from CI scp $(PACKAGE_PATH)/$(FILENAME) $(DEV_HOST):$(DEV_TAR_PATH) ssh $(DEV_HOST) "cd $(DEV_TAR_PATH) && tar zxvf $(FILENAME) && supervisorctl -c configs/dev.supervisord.conf restart offline-tasks" deploy-prod: clean build pack # deploying prod from dev or CI scp $(PACKAGE_PATH)/$(FILENAME) $(PROD_HOST):$(PROD_TAR_PATH) ssh $(PROD_HOST) "cd $(PROD_TAR_PATH) && tar zxvf $(FILENAME) && supervisorctl -c configs/prod.supervisord.conf restart offline-tasks" clean: # cleaning rm -fr $(PACKAGE_PATH) rm -fr ../$(FILENAME)
進過上述的一系列操作之后,只剩下一個比較尷尬的問題了:如果Go代碼倉庫中vendor不帶有依賴項目,那么獲取依賴的動作就要自己手動來操作了~。或許可以在makefile中新增一個deps,如下:
# default set $CURDIR="$PROJ_ROOT/sh" # preparing works... GVT_RESTORE=gvt restore PROJ_ROOT=../ deps: cd ($PROJ_ROOT) && $(GVT_RESTORE) build: deps # building mkdir $(PACKAGE_PATH) mkdir $(PACKAGE_BIN_PATH) cd $(MAIN_PATH) && $(GOBUILD) -o $(BIN) mv "$(MAIN_PATH)/$(BIN)" $(PACKAGE_BIN_PATH) cp -r "../configs" $(PACKAGE_PATH) cp "../sh/start.sh" $(PACKAGE_BIN_PATH) # other commands...
并且加deps命令,加build命令中,每次打包都檢查一下依賴。
https://zpjiang.me/2017/08/09/Setup-Jenkins-for-Go-Projects/
https://wiki.jenkins.io/display/JENKINS/Go+Plugin
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27290.html
摘要:年開發者應該熟練使用,并且知道版本更新內容。對開發和運維人員來說,最希望的就是一次性創建或配置,可以在任意地方正常運行。是標準規范,是開發的實踐標準。對開發者來說語言推薦和,全棧的選擇非常多,推薦熱門的 前言 在前天(2018-08-02)已經發布了PHP 7.3.0.beta1 Released 如果你還沒有使用 PHP7 ,那真的很遺憾。2018年PHP開發者應該熟練使用 PHP7...
摘要:而所謂的持續,就是說每完成一個完整的部分,就向下個環節交付,發現問題可以馬上調整。那么每完成一部分就測試,這是持續部署。這是一個免費的源代碼,可以處理任何類型的構建或持續集成。容器是完全使用沙箱機制,相互之間不會有任何接口。 導讀: 很久沒有更新文章了 最近公司在使用Spring Cloud構建的項目中經常會持續發布變更頻繁,一天中會出現發布多次的情況 在這種情況下對測試環境做了改造 ...
摘要:而持續集成的意義就在于減少風險,和重復的過程,最終提高工作效率。第二級調度由被稱作的組件組成。能和不同類型的通信,每種由相應的應用集群管理。這是的任務啟動過程。數人云運維平臺持續集成實踐這是數人云運維平臺的持續集成實踐。 今天小數給大家帶來的又是十足的干貨:當運維遇到云計算,當Docker遇到Mesos和Jenkins,會擦出怎樣的火花呢?且看來自數人云運維工程師金燁的演講實錄分享——...
摘要:基于的特性,以及持續集成的需求,個推采用為持續集成搭建了一整套測試系統。個推持續集成流程以一個假設名為模塊為例,以開發人員的視角闡述了持續集成的邏輯。 軟件開發過程中,開發成員經常需要把自己工作集成到項目中,通常每個成員每天至少集成一次。如果項目較小,對外部的依賴較小,那么軟件集成可能不會是什么問題。但是目前很多軟件項目特別是互聯網項目面臨著需求不明確,系統架構復雜,任務分配混亂等一系...
摘要:以上是的所有技術分享,如有問題,請聯系我們圍繞軟件工程效率提升進行一系列技術內容分享,包括國內外持續集成持續交付,持續部署自動化測試等實踐教程工具與資源,以及一些工程師文化相關的程序員。 五月一來,夏天便悄然而至。flow.ci 也帶來了幾個新的變化,幫你進一步優化開發工作流。一起來看看這幾個重點功能: 支持 iOS 項目 Xcode8.3 構建 iOSer 們重點來了,flow....
閱讀 2144·2023-04-26 00:38
閱讀 1930·2021-09-07 10:17
閱讀 887·2021-09-02 15:41
閱讀 637·2021-08-30 09:45
閱讀 541·2019-08-29 17:25
閱讀 3204·2019-08-29 15:07
閱讀 2182·2019-08-29 12:52
閱讀 3734·2019-08-26 13:35