在群暉docker上構建私有雲IDE和devops構建鏈


本文關鍵字:雲IDE。docker as cloud ide,在群暉上安裝docker gitlab,gitlab ci for docker

在以前的文章中我們說到docker是一種,集雲虛擬化,裝機,開發機,user modeos,langvm,app runtime為一體的東西。(或者不嚴格地說,僅僅可以當所有這些東西來用)。而這,其實就是我們一直想集成達到的DISKBIOS方案。

在《docker as engitor及雲構建devops選型》一文中我們還說到,docker可用於組建私有devops,模擬engitor的效果,在那文的文尾我們提到雲IDE,git是這個雲IDE收集工程源碼文件的雲化過程(git同時是實現為客戶端也是服務端一體的,所以它是雲IDE客戶端負責收集工程文件,在服務端它返回給下一級CI過程),那么集成了CI的git服務器實現品(如gitlab version8+版本以上自帶CI模塊),就是雲IDE中定義如何自動化構建這個工程的過程。

可見在雲開發中,docker生態是一個非常流行和強大的東西,雲IDE的先進理念實際就是devops(實際上,像gitlab這樣的實現品已有cloud ide這樣的插件)。

下面我們就來討論如何用docker的gitlab ci模擬雲IDE中的自動化構建鏈效果。我們的環境是群暉docker上。用外置postgresql實例的方法,我們最終要實現的結果,就是實現gitlab以docker為executor的CI鏈,可以實現面向docker為開發機的構建,發布的自動化過程。VS 托管在遠處的devops服務器,有一個私有devops的好處是,我們可以在本地即時快捷地觀看和控制程序構建的過程。

群暉docker上搭建gitlab

跟《docker上安裝ellie》一樣,這同樣是個復雜的過程,gitlab是ruby的,gitlab cl是nodejs的,跟ellie docker一樣是涉及到多語言環境的。我們復用ellie中的postgresql9.5鏡像。

我用的是2019.2.2號左右dockerhub上sameersbn/gitlab的GitLab Community Edition 11.7.0(在他的鏡像中,7.4.3之前版本,鏡像里包含所有組件,7.4.3版本鏡像里只包含核心組件:nginx、sshd、ruby on rails、sidekiq),不要下載官方的gitlab/gitlab-ce,那個鏡像里內內置了postgresql數據庫。啟動時占用內存過大。而且不正交。由於這個鏡像很大,外網線路下載起來很費事,容易中斷,我們可以利用上ss的方法,在windows上開一個允許局域網連接。然后在群暉控制面板->你當前使用的網絡界面中配置一個代理服務器。之后下載就會快多了,下載完全后,同時下載redis:latest,這樣postgresql9.5,redis,gitlab鏡像都有了。先啟動postgresql和redis的實例。

再開啟一個sameersbn/gitlab的實例,link到postgresql9.5:別名postgresql,redis:別名redisio,80容器端口映到8001,因為主機群暉占用了80。增加幾個環境變量,

GITLAB_SECRETS_DB_KEY_BASE=隨便寫
GITLAB_SECRETS_SECRET_KEY_BASE=隨便寫
GITLAB_SECRETS_OTP_KEY_BASE=隨便寫

啟動,gitlab會自動連接postgresql,發現容器退出,查看日志后發現,FATAL: role "root" does not exist,數據庫中沒有root用戶,這是因為gitlab實例對postgresql實例的數據庫有root檢查,及其它一些硬性配置上的要求。下面這些做:在群暉的web版進postgresql1實例的終端機界面(點新增會自動打開一個bash終端)新建一個root用戶並賦於權限。

su - postgres
psql
create user root with password 'password';
ALTER ROLE root WITH SUPERUSER;
此時再嘗試啟動應該沒有上述錯誤了。但又退出,且提示psql: FATAL: database "gitlabhq_production" does not exist
CREATE USER gitlab WITH PASSWORD 'password';
CREATE DATABASE gitlabhq_production OWNER gitlab;
GRANT ALL PRIVILEGES ON DATABASE gitlabhq_production TO gitlab;
\q

最終啟動成功,發現內存維持在1G多比gitlab/gitlab-ce少很多,打開群暉ip:8001,會提示讓你修改root的密碼,這個root是gitlab用戶的不是postgresql的。用root和這個密碼登錄,進群暉ip:8001/admin/。

現在可以在上面建立repo,clone的界面上顯示的是localhost,你需要額外加二個啟動環境參數來定制這里顯示為localhost的部分,另外如果你想導出各種volumes,參照ellie關於權限的處理方法就行。

最后,然后進admin/runners查一個token,備用。

在群暉docker上安裝gitlab ci for docker

這里的坑有點多。

首先不要下載sameersbn/gitlab-ci-multi-runner:latest(gitlab/gitlab-runner也是multi的),這個版本太老,啟動后link到一個別名為gitlab的第一步安裝的gitlab實例,sameersbn的runner是可以定義環境變量注冊的

RUNNER_TOKEN:上面的token
CI_SERVER_URL:http://link到的gitlab別名:80到主機的轉發端口/ci
RUNNER_DESCRIPTION:隨便填
RUNNER_EXECUTOR:這個暫時先填shell

雖然方便,然而我嘗試了下這種方法在上述sameersbn/gitlab-ci-multi-runner版本中根本無法使用,一直提示404,PANIC: Failed to register this runner. 404,PANIC: Failed to register this runner. Perhaps you are having network problems

我們下載同gitlab版本的gitlab/gitlab-runner:v11.7.0,啟動后link到第一步安裝的gitlab別名gitlab,然后進終端機用命令行方式注冊runner到CI:

像上一個方法一樣新建一個bash,會進入/home/gitlab_runner中,打入gitlab-runner register會提示輸入六個選項的參數。依次是:

url:這個填http://gitlab/ci
registration-token:這個填第一步獲取備用到的那個token
executor這里填docker
docker-image這里我可以按需求填alpine:3,這個有什么講究呢?這什么選這個呢?預置的有什么用呢?其實這是構建Docker image時填寫的image名稱,根據項目代碼語言不同,指定不同的鏡像。
description隨便填
tag-list這里填v1170

所以你看出來了,以后devops的觸發主要是由其中對應到這里的tags來觸發,docker ci build的原理其實就是以某docker image為虛擬機,在里面一層一層構建fs,然后疊加成最終鏡像,這里的docker-img即為那個虛擬機。

所以docker image加tag的組合可以根據很多不同目的來定義多個。多用。

以上我們注冊的runner是全局的。也有per工程私有的runner,上述tag為v1170的docker runner就是工程全局共享的

至於各種參數具體有什么用,等以后講吧。那個觸發文件流程定義.gitlab-ci.yml更是復雜,反正runner是建立起來了,在項目的/settings/ci_cd,CI/CD Pipelines -> Runners activated for this project,會看到已激活的runners


還有,我們可以搞個for elmlang,下回吧,這樣在我們的私人服務器上就可以即時持續集成了(以達到不斷向其喂給碎片化項目內容,持續集成為大應用的目的,這也許就是微服務的由來)


(此處不設回復,掃碼到微信參與留言,或直接點擊到原文)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM