久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

基于docker+gitlabCI搭建私有集成環(huán)境

 黃金屋1 2017-06-25

看了幾天的docker,感覺好極了?,F(xiàn)在回到我一開始的目標:構(gòu)建一個團隊內(nèi)部的持續(xù)集成(下文統(tǒng)稱CI)環(huán)境,,并梳理出適合我們自己的工作流。

今天我們主要是來搭建依賴的環(huán)境:

  • virtualBox
  • ubuntu server 16
  • docker
  • gitlab version8+(該版本以上自帶CI模塊)
  • gitlab runner
  • gitlab需要的其它組件(redis,,postgresql)

之前學(xué)習(xí)docker時,,一直都是基于自己的工作機,裝的是win7 64bit,,win下和docker相關(guān)的問題可以看我之前的文章,。由于我們現(xiàn)在是要搭建一個自動化CI環(huán)境,提供web ui來供用戶使用,,所以環(huán)境搭建部分的操作完全不需要使用者參與,,就不存在之前考慮的所謂的OS水土不服問題!介于網(wǎng)上多數(shù)資料都是使用ubuntu來作為docker的宿主系統(tǒng),所以我這里就放棄了親愛的centos(其實centos也是沒問題的,,我只是低調(diào)的炫耀自己通吃而已~見諒),。

老規(guī)矩,先來共享一下相關(guān)的文獻資料:

ubuntu下安裝docker

我們這次不使用win下的dockerToolbox來安裝docker了,,而是直接在虛擬機中安裝unbuntu系統(tǒng),,然后直接在unbuntu中安裝docker:

curl -sSL https://get./ | sudo sh

目前這樣的安裝方式,依然需要注意,,后面運行g(shù)itlab容器時配置的端口映射只是將容器的端口映射到了ubuntu虛擬機系統(tǒng)上,如果想讓物理機直接訪問,,還需要在virtualBox上再進行一次端口映射,,具體步驟在這篇文章中我已經(jīng)詳細介紹過了。

鏡像選擇問題

docker環(huán)境裝好后,,就需要開始下載所需要的鏡像了:

  • sameersbn/gitlab:latest
  • sameersbn/postgresql:latest
  • sameersbn/redis:latest
  • sameersbn/gitlab-ci-multi-runner:latest

由于我們是在國內(nèi),,所以直接使用hub.來下載無異于浪費生命,還好國內(nèi)也有良心鏡像庫:

這里需要提醒的是,,盡管靈雀云上顯示的 sameersbn/gitlab 鏡像版本是”7.14.1”,,不過別擔(dān)心,只是md文件沒有更新而已,,可以切換到頁面的“版本”選項卡來確認 latest 版本,。

這樣基本上20分鐘就可以把三個鏡像全部下載到本地啦~

啟動容器

鏡像下載完畢后,根據(jù)官方文檔我們需要創(chuàng)建對應(yīng)的docker容器來啟動相關(guān)的服務(wù),,我并沒有使用官方提供的第一種方法(docker-compose),,主要是不熟悉~

我們手動來完成三個容器的啟動:

#啟動postgresql容器
docker run --name gitlab-postgresql -d     --env 'DB_NAME=gitlabhq_production'     --env 'DB_USER=gitlab' --env 'DB_PASS=password'     --env 'DB_EXTENSION=pg_trgm'     --volume /srv/docker/gitlab/postgresql:/var/lib/postgresql     index./sameersbn/postgresql

#啟動redis容器
docker run --name gitlab-redis -d     --volume /srv/docker/gitlab/redis:/var/lib/redis     index./sameersbn/redis

#最后啟動gitlab容器
docker run --name gitlab -d     --link gitlab-postgresql:postgresql --link gitlab-redis:redisio     --publish 10022:22 --publish 10080:80     --env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022'     --env 'GITLAB_SECRETS_DB_KEY_BASE=kazaffisagoodcoder'     --volume /srv/docker/gitlab/gitlab:/home/git/data     index./sameersbn/gitlab

注意,上面的命令我已經(jīng)改成使用我們本地鏡像的名字了,,還有在啟動gitlab容器時我使用了一個自定義的字符串來賦值 GITLAB_SECRETS_DB_KEY_BASE ,,由于是本地測試環(huán)境,外加我實在不知道如何通過在 --env 命令中使用shell變量來使用 pwgen -Bsv1 64 生成的隨機字符串(手動輸入簡直等于自殺?。﹡知道如何做的朋友請留言賜教,,不勝感激。

根據(jù)自己的硬件配置,,可能需要稍等那么一分鐘左右,,在做好物理機端口映射配置后,我們就可以在本地瀏覽器中訪問 http://localhost:10080/ 來使用gitlab了?。赡苡捎趃itlab首次啟動初始化問題,,你可能會看到gitlab提示的500錯誤,稍等一下再刷新即可)

現(xiàn)在你基本上就已經(jīng)擁有了本地的gitlab環(huán)境,,你可以使用本地的git客戶端來創(chuàng)建一個gitlab測試項目,,試試clone到本地,試試commit到gitlab,應(yīng)該妥妥的~

Gitlab Runner

這部分內(nèi)容文章開頭給的文檔并沒有漢化,,不過沒關(guān)系,,我們都懂英文,對吧,?

出于性能考慮官方不推薦將Runner安裝在和gitlab同一臺物理機上,,出于安全考慮也不推薦將其安裝在獨立的物理機上,靠,,也只能用docker來跑了,!

這里還有兩個概念:

  • 特定Runner
  • 共享Runner

前者適配有特殊需求的項目,同時也可以避免重要的項目runner資源被占用的問題,。

而如果多個項目的優(yōu)先級一樣,,并且有非常相似的依賴環(huán)境,那使用共享Runner是一個不錯的選擇,。

既然我們決定使用docker容器來跑runner,,那就先選個鏡像吧,官方提供的是: gitlab-ci-multi-runner ,,我是用的 靈雀云鏡像 了,,注意,這里靈雀云鏡像上的md介紹依然是錯誤的,,鏡像本身是和官方鏡像一致的,,小不完美啊 :———(~

還要說的一點是,官方提供的這個鏡像是純凈鏡像,,不包含任何其它的環(huán)境(例如java環(huán)境或node環(huán)境),,而你需要根據(jù)自己的項目實際情況來創(chuàng)建滿足的自定義鏡像。官方提供了幾個語言環(huán)境的 例子 ~

這種使用runner的思路相當(dāng)于我們拿這個運行著runner的docker容器當(dāng)作一個“物理機”,,然后在這臺“物理機”上做 .gitlab-ci.yml 指定要做的事兒,。在此基礎(chǔ)上,我們依然可以讓Runner執(zhí)行docker build模式,,這里就涉及到“docker-in-docker”的思想了,。具體細節(jié)官方提供了比較清晰的 文檔 。(其實,,如果你使用文檔中提到的“docker-in-docker”方案的話,,那實際上就是“docker-in-(docker-in-docker)”,好繞啊~)

提到Runner的executor的類型,, 文檔 里有提到不少(shell,,docker,ssh,,等等),,差別我感覺都不是太大,,主要還是shell和docker兩大類。

理論姿勢就這么多,,接下來我們跑起我的runner容器:

mkdir -p /srv/docker/gitlab-runner
docker run --name gitlab-ci-multi-runner -d --restart=always 	--volume /srv/docker/gitlab-runner:/home/gitlab_ci_multi_runner/data 	--link gitlab:gitlab --env='CI_SERVER_URL=http://gitlab/ci' 	--env='RUNNER_TOKEN=你gitlab生成的token' 	--env='RUNNER_DESCRIPTION=myrunner' --env='RUNNER_EXECUTOR=shell' 	index./sameersbn/gitlab-ci-multi-runner

這里需要提醒的是兩點:

  1. 你自己的gitlab生成的token可以在 http://localhost:10080/admin/runners 看到(我假設(shè)你和我一樣要創(chuàng)建的是一個共享Runner)
  2. CI_SERVER_URL參數(shù)不要使用你物理機瀏覽器地址欄里的值,,我們在上面的命令中已經(jīng)將之前創(chuàng)建的gitlab容器link到了runner容器,so,,我們只需要填寫設(shè)置的主機名即可,,否則無法注冊成功!

接下來刷新你的gitlab管理員后臺,,你將會看到注冊成功的Runner信息,。

還沒完,由于我們使用的是 shell 模式,,所以我們還需要進入到runner容器中來安裝docker環(huán)境:

docker exec -it gitlab-ci-multi-runner bash
curl -sSL https://get./ | sudo sh
sudo usermod -aG docker gitlab-runner
sudo -u gitlab-runner -H docker info

如果可以看到正確的docker版本信息,,那就說明一切順利。 但怎么可能那么順利?。?/strong> 事實證明我太天真了,,在docker容器中由于文件系統(tǒng)是只讀的,,所以無法安裝docker環(huán)境~至少我們現(xiàn)在的做法還不行,如下圖:

這里說一個插曲,,當(dāng)?shù)玫竭@個結(jié)論后的我失望的打算將這個悲劇的鏡像刪除,,我在gitlab admin后臺的runner頁面點擊“remove”按鈕,然后又將對應(yīng)的docker容器也刪除掉,。當(dāng)我再次使用相同的命令打算啟動一個干凈的runner容器時,,我發(fā)現(xiàn)gitlab的runner頁面不在提示成功注冊runner了!我徹底方了,!一切都和第一次執(zhí)行流程一致,,為啥這次就不認了呢?

于是我發(fā)現(xiàn)了一個秘密,,上面的創(chuàng)建runner容器的命令中有一個參數(shù):

--volume /srv/docker/gitlab-runner:/home/gitlab_ci_multi_runner/data

我在宿主機的 /srv/docker/gitlab-runner 目錄下找到了答案,,原來一直試圖想找到的 config.toml 文件在這里,也是因為這個文件的緣故所以gitlab才不在接受我的runner注冊的,!刪除并重建這個目錄即可,!

走了彎路不可怕,可怕的是接下來不知道怎么辦,?沒關(guān)系,,我們現(xiàn)在先在宿主機上 安裝gitlab-ci-multi-runner環(huán)境 ,并使用官方提供的docker-in-docker方式來增加一臺runner:

curl -L https://packages./install/repositories/runner/gitlab-ci-multi-runner/script.deb.sh | sudo bash
sudo apt-get install gitlab-ci-multi-runner
sudo gitlab-ci-multi-runner register -n   --url http://localhost:10080/ci   --token 你gitlab生成的token   --executor docker   --description "My Docker Runner"   --docker-image "index./library/docker:latest"   --docker-privileged

記住,,我們這里要填寫的gitlab-ci coordinator URL應(yīng)該是: http://localhost:10080/ci ,。

這里還有個細節(jié)是官方文檔沒有提到的,,那就是 讓注冊好的Runner運行起來 ,不過其實默認安裝好gitlab-ci-multi-runner后它就自己已經(jīng)以服務(wù)的方式注冊到系統(tǒng)里了(服務(wù)名:gitlab-runner),,每次注冊runner導(dǎo)致 config.toml 文件變更后都會自動觸發(fā)該服務(wù)的reload,。但了解一下這個細節(jié)還是對分析問題很有幫助的!

這樣我們就應(yīng)該有兩個runner了(一個是shell類型,,一個是docker類型):

//todo ubuntu -> docker-in-docker -> runner -> docker engine

.gitlab-ci.yml

這個文件應(yīng)該放在我們的項目repo的根目錄下,,用來描述當(dāng)發(fā)生目標行為后,runner要做的工作,。官方文檔有對其語法的 描述 ,。

環(huán)境基本上就搭建好了,下一篇我們就開始設(shè)計工作流了,。

 

來自: http://blog./2016/06/15/基于docker gitlabCI搭建私有持續(xù)集成環(huán)境/

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多