工程自動化構建部署
前言
? 隨著需求越來越多,以及相關代碼分支權限的流程規范化,團隊內部的專案上線部署復雜度提升,基于現有的環境和市場上主流的軟體,打造了一套基于gitlab+docker+harbor+kubernetes的自動化構建部署流程(CI/CD),目前團隊內部流程基本走通,整理了一份相關檔案分享出來,寫的糙的地方,輕噴,
概念
GitLab CI/CD
? GitLab 是一個用于倉庫管理系統的開源專案,使用Git作為代碼管理工具,并在此基礎上搭建起來的Web服務,與之對應的有GitHub和Gitee,公司內部使用一般使用GitLab作為代碼管理工具,
? GitLab CI/CD 是一個內置在GitLab中的工具,用于通過持續方法進行軟體開發:
- Continuous Integration (CI) 持續集成
- Continuous Delivery (CD) 持續交付
- Continuous Deployment (CD) 持續部署
? 持續集成的作業原理是將小的代碼塊推送到Git倉庫中托管的應用程式代碼庫中,并且每次推送時,都要運行一系列腳本來構建、測驗和驗證代碼更改,然后再將其合并到主分支中,
? 持續交付和部署相當于更進一步的CI,可以在每次推送到倉庫默認分支的同時將應用程式部署到生產環境,這些方法使得可以在開發周期的早期發現bugs和errors,從而確保部署到生產環境的所有代碼都符合為應用程式建立的代碼標準,
? GitLab CI/CD 由一個名為 .gitlab-ci.yml 的檔案進行配置,改檔案位于倉庫的根目錄下,檔案中指定的腳本由GitLab Runner執行,
Docker
? Docker 是一個開源的應用容器引擎,基于Go語言開發并遵從 Apache2.0 協議開源,Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然后發布到任何流行的 Linux 機器上,也可以實作虛擬化,容器是完全使用沙箱機制,相互之間不會有任何介面,更重要的是容器性能開銷極低,
Harbor
? 雖然Docker官方提供了公共的鏡像倉庫,但是從安全和效率等方面考慮,部署公司私有環境內的Registry是非常有必須要的,
? Harbor是由VMware公司開源的企業級的Docker Registry管理專案,相比docker官方擁有更豐富的權限管理和完善的架構設計,適用于大規模docker集群部署提供倉庫服務
? 它主要提供Docker Registry管理界面UI,可基于角色訪問控制,鏡像復制,AD/LDAP集成,日志審核等功能,重點是完全支持中文,
Kubernetes
? kubernetes(簡稱k8s)是用于自動部署、擴容和管理編排容器化應用程式的開源系統,該系統由Google設計并捐贈給Linux基金會來使用,
? 它旨在提供“跨主機集群的自動部署、擴展以及運行應用程式容器的平臺”, 它支持一系列容器工具,包括docker、containerd等,
搭建GitLab-Runner
服務器要求
- 最少一臺runner服務器,建議最低配置為2C4G以上
- gitlab服務
配置CI/CD的Runners
- 點擊專案,左側的Settings---->CI/CD---->Runners---->Expand,如下圖所示
-
登錄runner服務器,安裝gitlab-runner
curl -L --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64" chmod +x /usr/local/bin/gitlab-runner ##添加用戶,此處可以不添加,如果用root權限的話,建議直接指定root用戶,防止后續持續性集成的時候出現權限問題 useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash ## 切換到root用戶 --user=root gitlab-runner install --user=root --working-directory=/home/gitlab-runner #gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner gitlab-runner start ## 也可以后續調整組態檔 vim /etc/systemd/system/gitlab-runner.service -
組態檔 : /etc/systemd/system/gitlab-runner.service
[Unit] Description=GitLab Runner ConditionFileIsExecutable=/usr/local/bin/gitlab-runner After=syslog.target network.target [Service] StartLimitInterval=5 StartLimitBurst=10 ExecStart=/usr/local/bin/gitlab-runner "run" "--working-directory" "/home/gitlab-runner" "--config" "/etc/gitlab-runner/config.toml" "--service" "gitlab-runner" "--user" "root" Restart=always RestartSec=120 EnvironmentFile=-/etc/sysconfig/gitlab-runner [Install] WantedBy=multi-user.target -
重啟服務
systemctl daemon-reload systemctl restart gitlab-runner.service
注冊到gitlab上
? 說明:
gitlab-ci-multi-runner register:執行注冊命令
Please enter the gitlab-ci coordinator URL:輸入 ci 地址
Please enter the gitlab-ci token for this runner:輸入 ci token
Please enter the gitlab-ci description for this runner:輸入 runner 名稱
Please enter the gitlab-ci tags for this runner:設定 tag
Whether to run untagged builds:這里選擇 true ,代碼上傳后會能夠直接執行
Whether to lock Runner to current project:直接回車,不用輸入任何口令
Please enter the executor:選擇 runner 型別,這里我們選擇的是 shell
-
執行注冊:(后面在GitLab的UI中更改)
gitlab-runner register ##輸入gitlab的地址,以下資訊在上圖中有體現,圖中4的位置 Enter the GitLab instance URL (for example, https://gitlab.com/): https://gitlaball.nicetuan.net/ ##輸入token Enter the registration token: ********* ##輸入runner的描述,一般可以設定為runner的hostname Enter a description for the runner: do-runner-004 ## 輸入與Runner關聯的標簽 Enter tags for the runner (comma-separated): master ##輸入Runner執行程式,一般選擇shell,根據真實情況選擇 Enter an executor: docker+machine, parallels, shell, ssh, virtualbox, kubernetes, custom, docker, docker-ssh, docker-ssh+machine: shell ##執行完畢 Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! -
重繪剛剛的CI/CD頁面,發現已經添加runner機器成功
配置gitlab-ci.yml檔案
? 注意:此處demo是演示的go版本,可以根據具體的專案環境進行調整腳本操作,大體操作是不變的
專案添加.gitlab-ci.yml
? 此處默認為該檔案名,如有調整,可以從GitLab專案中的Settings---->CI/CD---->General pipelines中修改
before_script:
- go env -w GOPROXY=https://goproxy.cn,direct
- go env -w GO111MODULE=on
stages:
- build
- test
- lint
- docker-deploy
build:
stage: build
allow_failure: false
script:
- go mod tidy
- make
only:
- tags
- branches
retry: 1
test:
stage: test
script:
- go test -test.v ./... -nacosDir=$PWD/conf -logDir=$PWD/
only:
- tags
- branches
retry: 1
lint:
stage: lint
allow_failure: false
script:
- golangci-lint --version
- golangci-lint run -v
only:
- tags
- branches
retry: 1
docker-deploy:
stage: docker-deploy
script:
- make
- docker build --rm -t bigdata-harbor.nicetuan.net/risk/riskclient:$CI_COMMIT_REF_NAME .
- docker push bigdata-harbor.nicetuan.net/risk/riskclient:$CI_COMMIT_REF_NAME
only:
- tags
說明:
觸發build、test、lint 流程: 當branchs和tags變更的時候,注意allow_failure: false ,設定是否允許該job失敗,
觸發docker-deploy 流程:當專案打tag版本的時候,觸發docker編譯和推送到公司私有倉庫上,此處需要特別注意:
1:代碼的tag版本需要嚴格按照發版操作,vx.y.z,因為下面的docker 鏡像就是根據這個版本來創建,同時生產環境升級也是根據此情況來執行,
2:runner服務器如果已經登錄過私服,則可以不執行docker login 192.168.1.1 -u admin -p 123456,否則會推送到倉庫失敗
3:如果上面執行gitlab-runner 的用戶不是root,則此處有可能會出現權限問題,因為docker是用root啟動的,
提交代碼到gitlab
? 觀察專案此時會有pipline的日志流程,可以點進去看每一個job的執行日志
查看docker 私服
調整k8s版本
由于程式升級的時間需要根據具體的情況進行發布,故此處操作為手動調整鏡像版本進行升級
-
登錄k8s系統
地址:http://192.168.0.1:30080/sso/auth/default?req=hrg7iwz6aioxwnp5ol7frvew3
賬號:admin
密碼:****
-
選擇命名空間 riskclient
-
進行版本升級
?


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/292605.html
標籤:其他
上一篇:jenkins pipeline的parameters引數介紹
下一篇:SSH遠程管理
