成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

docker+jenkins+golang持續(xù)集成實(shí)踐[轉(zhuǎn)載自我的博客]

inapt / 1141人閱讀

摘要:博客地址起因因?yàn)樯a(chǎn)需要最近又重新折騰了一下和。主要目的是想自動(dòng)編譯,打包,部署一些的。將宿主機(jī)的掛載為容器的目錄。這樣做的目的是,如果容器被不小心刪除也不至于的數(shù)據(jù)丟失。其中的安裝路徑在中。

博客地址:yeqown.github.com


起因

因?yàn)樯a(chǎn)需要最近又重新折騰了一下Jenkins和docker。主要目的是想自動(dòng)編譯,打包,部署一些Golang的HttpServer。于是決定使用Jenkins來做這個(gè)持續(xù)集成的載體,選擇Jenkins出于兩點(diǎn)原因:

1. 以前就使用過,上手會(huì)更快
2. 社區(qū)比較成熟,插件和文檔豐富


安裝Docker和Pull Jenkins鏡像

這一步,作為前置條件且不是本文主要要描述的步驟,因此略去。網(wǎng)上也有很多參考資料~


Jenkins & docker-compose配置

為了方便我才用了docker-compose這個(gè)工具,docker-compose 基礎(chǔ)可以參見我的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: 將宿主機(jī)的/home/worker/jenkins/jenkins_home掛載為容器的/var/jenkins_home目錄。這樣做的目的是,如果容器被不小心刪除也不至于Jenkins的數(shù)據(jù)丟失。

到這里,我們只需要執(zhí)行docker-compose up -d便可以將Jenkins容器跑起來了,再配置一下Nginx,便可以直接訪問到Jenkins頁面了,并進(jìn)行初始化。

我的目錄結(jié)構(gòu)如下:

?  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 # 運(yùn)行

Publish Over SSH配置

Publish Over SSH配置,由于我們是通過docker運(yùn)行的Jenkins,因此要特別配置一下SSH,方便Jenkins部署項(xiàng)目。這里先列出步驟:

安裝Publish Over SSH

容器內(nèi)ssh-keygen

配置Publish Over SSH

配置Git倉庫部署公鑰 #這一步相當(dāng)于拉取代碼的Credentials


Golang Build-env

因?yàn)槟J(rèn)的Jenkins鏡像是不帶有Go的編譯工具的,所以我們很有必要安裝一個(gè)Go插件Go-Plugin-Jenkins
具體步驟如下:

安裝JenkinsGo插件

在全局工具配置中,安裝Go

在對(duì)應(yīng)任務(wù)配置-> 構(gòu)建環(huán)境項(xiàng),選擇Go版本

這一步的詳細(xì)步驟可以在參考文獻(xiàn)第一條中查詢Setup Go Build Environment

Note: 官方文檔中說全局配置Go是在系統(tǒng)設(shè)置中進(jìn)行的,但是我用的Jenkins ver. 2.107.2,這一項(xiàng)配置是在全局工具配置中。

如何打包部署

編寫一個(gè)makefile來打包項(xiàng)目,通過scp來分發(fā)部署服務(wù),這也是配置Publish Over SSH的目的。

由于Jenkins鏡像不帶有make相關(guān)工具(甚至Vim也沒有),所以需要安裝Make及其相關(guān)工具。與此同時(shí),如果項(xiàng)目使用了相關(guān)的依賴管理工具,因此還有必要去配置相關(guān)的GO環(huán)境變量。其中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)

總結(jié)

進(jìn)過上述的一系列操作之后,只剩下一個(gè)比較尷尬的問題了:如果Go代碼倉庫中vendor不帶有依賴項(xiàng)目,那么獲取依賴的動(dòng)作就要自己手動(dòng)來操作了~。或許可以在makefile中新增一個(gè)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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/27290.html

相關(guān)文章

  • PHP新手開發(fā)者路線建議

    摘要:年開發(fā)者應(yīng)該熟練使用,并且知道版本更新內(nèi)容。對(duì)開發(fā)和運(yùn)維人員來說,最希望的就是一次性創(chuàng)建或配置,可以在任意地方正常運(yùn)行。是標(biāo)準(zhǔn)規(guī)范,是開發(fā)的實(shí)踐標(biāo)準(zhǔn)。對(duì)開發(fā)者來說語言推薦和,全棧的選擇非常多,推薦熱門的 前言 在前天(2018-08-02)已經(jīng)發(fā)布了PHP 7.3.0.beta1 Released 如果你還沒有使用 PHP7 ,那真的很遺憾。2018年P(guān)HP開發(fā)者應(yīng)該熟練使用 PHP7...

    klinson 評(píng)論0 收藏0
  • Spring Cloud【使用jenkins持續(xù)部署】Gogs+jenkins+Docker Swa

    摘要:而所謂的持續(xù),就是說每完成一個(gè)完整的部分,就向下個(gè)環(huán)節(jié)交付,發(fā)現(xiàn)問題可以馬上調(diào)整。那么每完成一部分就測試,這是持續(xù)部署。這是一個(gè)免費(fèi)的源代碼,可以處理任何類型的構(gòu)建或持續(xù)集成。容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口。 導(dǎo)讀: 很久沒有更新文章了 最近公司在使用Spring Cloud構(gòu)建的項(xiàng)目中經(jīng)常會(huì)持續(xù)發(fā)布變更頻繁,一天中會(huì)出現(xiàn)發(fā)布多次的情況 在這種情況下對(duì)測試環(huán)境做了改造 ...

    王笑朝 評(píng)論0 收藏0
  • 智能運(yùn)維 | 如何做好持續(xù)集成——Jenkins on Mesos 實(shí)踐

    摘要:而持續(xù)集成的意義就在于減少風(fēng)險(xiǎn),和重復(fù)的過程,最終提高工作效率。第二級(jí)調(diào)度由被稱作的組件組成。能和不同類型的通信,每種由相應(yīng)的應(yīng)用集群管理。這是的任務(wù)啟動(dòng)過程。數(shù)人云運(yùn)維平臺(tái)持續(xù)集成實(shí)踐這是數(shù)人云運(yùn)維平臺(tái)的持續(xù)集成實(shí)踐。 今天小數(shù)給大家?guī)淼挠质鞘愕母韶洠寒?dāng)運(yùn)維遇到云計(jì)算,當(dāng)Docker遇到Mesos和Jenkins,會(huì)擦出怎樣的火花呢?且看來自數(shù)人云運(yùn)維工程師金燁的演講實(shí)錄分享——...

    lsxiao 評(píng)論0 收藏0
  • 基于 jenkinsdocker 個(gè)推持續(xù)集成平臺(tái)

    摘要:基于的特性,以及持續(xù)集成的需求,個(gè)推采用為持續(xù)集成搭建了一整套測試系統(tǒng)。個(gè)推持續(xù)集成流程以一個(gè)假設(shè)名為模塊為例,以開發(fā)人員的視角闡述了持續(xù)集成的邏輯。 軟件開發(fā)過程中,開發(fā)成員經(jīng)常需要把自己工作集成到項(xiàng)目中,通常每個(gè)成員每天至少集成一次。如果項(xiàng)目較小,對(duì)外部的依賴較小,那么軟件集成可能不會(huì)是什么問題。但是目前很多軟件項(xiàng)目特別是互聯(lián)網(wǎng)項(xiàng)目面臨著需求不明確,系統(tǒng)架構(gòu)復(fù)雜,任務(wù)分配混亂等一系...

    binaryTree 評(píng)論0 收藏0
  • CI Weekly #19 | 關(guān)于軟件開發(fā)模型思考,以及最新 CI/CD 實(shí)踐分享

    摘要:以上是的所有技術(shù)分享,如有問題,請(qǐng)聯(lián)系我們圍繞軟件工程效率提升進(jìn)行一系列技術(shù)內(nèi)容分享,包括國內(nèi)外持續(xù)集成持續(xù)交付,持續(xù)部署自動(dòng)化測試等實(shí)踐教程工具與資源,以及一些工程師文化相關(guān)的程序員。 五月一來,夏天便悄然而至。flow.ci 也帶來了幾個(gè)新的變化,幫你進(jìn)一步優(yōu)化開發(fā)工作流。一起來看看這幾個(gè)重點(diǎn)功能: 支持 iOS 項(xiàng)目 Xcode8.3 構(gòu)建 iOSer 們重點(diǎn)來了,flow....

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

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

0條評(píng)論

閱讀需要支付1元查看
<