(一)配置linux環境實現持續集成

来源:https://www.cnblogs.com/hongwei918/archive/2019/07/14/11178124.html
-Advertisement-
Play Games

目錄 1.Centos7操作系統 2.Gnome 可視化桌面 3.遠程shell工具 4.遠程桌面工具 5.Jdk 6..Net Core 7.Git 8.Docker 容器 9.Kubernetes 自動化部署 10.Jenkins 持續集成 11.VSCode 總結 1.Centos7操作系統 ...


目錄

1.Centos7操作系統

2.Gnome 可視化桌面

3.遠程shell工具

4.遠程桌面工具

5.Jdk

6..Net Core

7.Git

8.Docker 容器

9.Kubernetes 自動化部署

10.Jenkins 持續集成

11.VSCode

總結

1.Centos7操作系統

1.1 雜談

 本教程基於linux系統,我安裝的是Centos 7,在VMware虛擬機中運行。

1. 關於虛擬機平臺:Hype-V 與 VMware

  普遍最常用的是VMware,後來我在本地電腦中安裝Docker(一種容器)之後,win10系統便自動開啟了 Hype-V,它與VMware競爭關係,開啟後便不能啟動VMware。

  於是我上手開始用Hype-V搭建虛擬機,安裝Centos 7比較順利,但是網路調試和可視化桌面遇到了問題。

  先簡單演示一下 win10 開啟 Hype-V 的方式,直接上圖:

  

  

  

  先談網路:

  VMware 支持 NAT (VMnet8) 、 Bridge(VMnet0) 、 Host-Only(VMnet1)

  NAT 最簡單,他是由本地電腦分配的網路,共用同一個IP。

  Bridge 是直接訪問硬體網卡,簡單說就是虛擬機走獨立的網路。

  最直觀的表現就是,如果你們公司上網需要到瀏覽器登錄一下獲取動態分配的ip的話,那如果你用bridge時,你同樣也需要在瀏覽器裡面用賬號登錄一次,分配另一個IP,NAT則不需要。

  這樣就遇到了一個問題,bridge方式聯網的時候你需要有可視化桌面,有瀏覽器,你才能上網。(當然你如果會直接使用shell模擬瀏覽器登錄獲取ip的話那你也可以上網)

  而 Hype-V 與 VMware 不同,不可選聯網方式,只可以選要使用的網卡。我選擇網卡以後,發現它只有內網ip,不能訪問外網,顯然就是bridge的聯網方式。但是我們公司必須使用瀏覽器上網,於是我開啟了安裝可視化桌面之路。下文將會介紹(安裝GNome)。當我安裝完以後,發現Hype-V虛擬機桌面無法進入。多次嘗試仍然無效。於是我放棄了Hype-V, 關閉該功能,使用VMware  虛擬機。

  所以我最終的選擇是VMware虛擬機。

2. 關於操作系統

  之前聽說Centos是最穩定的Linux系統,與RedHat最接近,簡單說就是RedHat的免費版,而RedHat是提供商業支持的系統。

  Centos6.5 和 Centos7 等差別比較大。我選擇了後者。

1.2 上手

  上面我已經提到了因為Hype-V的一些坑,我選擇了 VMware。相信大家對它也比較熟悉。以下簡單介紹。

  

  上圖中展示了我虛擬機的配置。有一些點需要註意一下:

  光碟機鏡像: 網上下載系統iso鏡像,然後裝載到虛擬機。

  硬碟:這個比較重要,通常來說5G肯定是不夠的,而且linux擴展硬碟比較複雜,如果你安裝完系統以後再擴容需要做大量的設置,所以我建議剛開始就將硬碟做大一點,後期如果不夠用的話再擴容,而不是剛裝完系統你就要擴容。擴容中的坑,我後續會補充。

  網路: 我上面已經講到了,NAT較為簡單,我選擇了NAT。下麵我談一下網路的配置。

  

  那麼為什麼網關ip配置成 192.168.23.2  呢,請打開本地電腦的網路共用中心,入下圖。

  

  通俗解釋就是,VMware軟體自動建造了一個虛擬網卡,連到這個網卡上的電腦都在一個子網(192.168.23.0)中。其中192.168.23.1 被你自己的硬體電腦用了,192.168.23.2是網關,其它的是給你的虛擬機用的。

  如果你不相信,請你打開CMD 視窗,輸入 ipconfig。如下圖,

  

  在談一談 DHCP ,如下圖,一旦你給dhcp打鉤以後你就不需要給虛擬機設置ip地址了,這個DHCP就幫你完成了。你同時可以設置分配的ip的區間段,如圖:

  

  NAT 設置完成,接下來我們擴展一下,看一看如果選擇另外兩種上網方式:

  Host- only (僅主機):

  

  你剛剛應該已經發現了,這裡還有一個網路,192.168.80.0 子網,這正是“僅主機模式”,你會發現用這種網路的話你的虛擬機只能ping同你的電腦,而不能上外網,不能ping通公司內其他同事的電腦,這就是“僅主機”,你還需要別的網路共用的方式才能上網。

  Bridge(橋接):

  

  這裡什麼都不需要你配置 ,你只需要選擇一個能用的網卡,這裡面有很多虛擬網卡是不能用的,可能是你安裝別的軟體的時候自動建出來的。選完以後,你的虛擬機和你的電腦就是獨立開了,虛擬機的ip是由你家裡的路由器或者你們公司的dhcp來分配的,與你的電腦就無關了,你的電腦僅僅是為它提供了一張網卡。

  還要在說一下,這個虛擬網路編輯器的視窗僅僅是用來設置網路的。最終你的虛擬機要選擇哪一種方式,需要你到“虛擬機設置”中選擇,就和你選擇多大記憶體一樣簡單。So easy 是不是!

  接下來就是安裝操作系統了。你要認得 “install” 這個單詞是“安裝”的意思就好辦了。我就不介紹了,總之就是很簡單了。

  分區的時候預設分區就好了,過程中你設置一下root密碼,然後可以在建一個別的賬號。

  你最好是連同可視化桌面一起安裝,如果你沒有安卓桌面的話,我接下來將介紹如何安裝(前提是你的網路是通的,ping www.baidu.com)

   如果你的網路還是不通的話,可能虛擬要你在安裝好的linux 中配置一下網卡了。請自行百度,或者評論留言。下圖是我網卡的配置:

  

  用 “ifconfig” 或者 “ip addr”  可以查看ip地址

   

  檢查網路沒問題:

  

  可視化桌面也可以這樣查看ip:

  

2.Gnome 可視化桌面

2.1 雜談

  談一下為什麼要安裝可視化桌面呢?

  第一,用慣了windows系統,還是希望出差錯的時候也能點一下滑鼠的,雖然這個桌面要消耗我將近一個多G的硬碟空間。

  第二,下載東西方便一點,可以進瀏覽器裡面下載一些安裝包,雖然我們大多數情況都是用yum直接安裝的。

  第三,我打算試試linux編程,安裝 VS Code,上手在linux中加斷點調試代碼,自然只用命令行是不行的,雖然後來我也放棄了這種方式,我還是覺得VS Stutio要好用的多,不過我還是要演示一下我的踩坑過程。

2.1 上手

更新grub2,是因為我在後來安裝Gnome的時候遇到了與grub2 “衝突” 的坑,所以我建議你提前就更新一下。

yum update grub2-common  

 安裝,每次它提示是否確認下載,確認安裝的時候,都輸入 “y”

yum groupinstall "X Window System" 
yum groupinstall "GNOME Desktop" 

 檢查預設啟動方式,get:

systemctl  get-default

 返回結果一定不是   graphical.target,那就設置一下咯。set:

systemctl  set-default graphical.target

 我個人認為這個比較容易,遇到坑的話可以找一下更為詳細的教程,就可以完成。

然後重啟虛擬機

reboot

3.遠程shell工具

這個工具是安裝在你的windows本地電腦上的

安裝目的: 如果你的linux伺服器不是你本地的虛擬機,而是機房伺服器或者雲伺服器的話,那你是不能通過VMWare來操作它的。只能用遠程來操作。

工具重量很多,我介紹一個我常用的:SecureCRT

SecureFX 工具可以傳輸文件,通常和SecureCRT集成。這倆如果沒有集成的話,需要你單獨下載。

 

4.遠程桌面工具

4.1 linux上安裝 VNC-Server

安裝

yum -y install tigervnc-server

配置

cp /lib/systemd/system/[email protected] /etc/systemd/system/vncserver@:1.service

設置VNC密碼

vncpasswd

重啟systemd

systemctl daemon-reload

設置永久開啟VNC服務

systemctl enable vncserver@:1.service

啟動VNC服務

systemctl start vncserver@:1.service

如遇報錯:
Job for vncserver@:1.service failed because the control process exited with error code. See "systemctl status vncserver@:1.service" and "journalctl -xe" for details.
編輯/etc/systemd/system/vncserver@:1.service配置文件:
將Type=forking改為Type=simple
重新啟動VNC服務

systemctl restart vncserver@:1.service

查看VNC服務狀態

systemctl status vncserver@:1.service

如有Activie:failed則表示啟動失敗
編輯配置文件:

vim /etc/systemd/system/vncserver@:1.service

將裡面所有的<USER>替換為當前用戶名(大致有兩處),如root;另,如果是root用戶,應將PIDFile的/home/root改為/root
重新啟動VNC服務
這裡可能會遇到錯誤,當執行start vncserver@:1.service時可能提示如下錯誤。
Job for vncserver@:1.service failed because the control process exited with error code. See
"systemctl status vncserver@:1.service" and "journalctl -xe" for details.
解決辦法
刪除/tmp/.X11-unix/ 目錄

rm -rf /tmp/.X11-unix/

再啟用一次即可

systemctl restart vncserver@:1.service

開啟防火牆5901埠,重啟防火牆服務

firewall-cmd --zone=public --add-port=5901/tcp --permanent
systemctl restart firewalld.service 

查看埠狀態

netstat -lntp
netstat -lnp|grep 5901

4.2 本地電腦安裝客戶端 VNC-Viewer

 下載地址: http://download.canadiancontent.net/VNC_Viewer.html

下載以後可以直接運行,無需安裝

當它提示需要你輸入密碼的時候,輸入你剛剛在 VNC-Server 中設置的密碼即可。

登錄系統,完成。

5.Jdk

為什麼要安裝Jdk呢,我們不是要做.net開發嗎,那是因為我們接下來要用的Jenkins是需要運行在java環境下,我不確定只安裝jrm是否可行,所以直接安裝了jdk

網路上安裝教程比較多,推薦: https://www.cnblogs.com/sxdcgaq8080/p/7492426.html

我安裝了最新的版本 jdk12, 但是後來安裝Jenkins的時候發現不支持jdk12,因為版本太高了,我老老實實重新安裝了jdk8

需要測試一下java環境是否可用:

java -version

同時要創建軟鏈接

ln -s /usr/local/java/jdk1.8.0_171/bin/java /usr/bin/java

6..Net Core

6.1 安裝.netCore

官方鏈接: https://dotnet.microsoft.com/download/linux-package-manager/centos/sdk-current  

記得選擇你的操作系統,我選的是CentOS

獲取包

sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm

升級更新已安裝的包,並安裝.netcore

sudo yum update
sudo yum install dotnet-sdk-2.2

6.2 安裝nodejs

由於需要做web開發,所以我打算提前安裝 nodejs 

首先下載安裝包

 官網下載:https://nodejs.org/en/

我用windows瀏覽器訪問的時候沒有找到如何下載linux安裝包,於是我用linux瀏覽器訪問,找到了,如下圖。當然你也可以直接用 wget 命令下載。

下載推薦版本,而非最新版本,你懂得。

下載完成尾碼是  .tar.xz,  用下麵的方式解壓,據說,使用這種壓縮方式的原因是壓縮後文件更小。

xz -d node-v10.16.0-linux-x64.tar.xz
tar -xvf node-v10.16.0-linux-x64.tar

創建映射軟鏈接/usr/bin  指向 解壓文件夾,指令: 

ln -s /usr/local/src/node-v10.16.0-linux-x64/bin/node /usr/bin/node
ln -s /usr/local/src/node-v10.16.0-linux-x64/bin/npm /usr/bin/npm

檢查安裝狀態

node -v
npm

7.Git

$ yum install curl-devel expat-devel gettext-devel \
  openssl-devel zlib-devel

$ yum -y install git-core

$ git --version
git version 1.7.1

8.Docker 容器

移除舊的版本:

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

安裝一些必要的系統工具:

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

添加軟體源信息:

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新 yum 緩存:

sudo yum makecache fast

安裝 Docker-ce:

sudo yum -y install docker-ce

啟動 Docker 後臺服務

sudo systemctl start docker

測試運行 hello-world

docker run hello-world

9.Kubernetes 自動化部署

這一節,我目前就先不寫了,因為目前還用不到分散式,當我再今後的文章中用到分散式的時候一定會來修補的。畢竟我是完美主義,用盡所有的工具讓開發運維簡單化。

好吧,我承認,我以前也沒有用過這個東西,但是我目前不想學了,等我用到的時候一定會來學的。

10.Jenkins 持續集成

安裝

sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

yum install jenkins

配置

vim /etc/sysconfig/jenkins

#監聽埠
JENKINS_PORT="8080"
#修改配置
JENKINS_USER="root"

修改目錄許可權

chown -R root:root /var/lib/jenkins
chown -R root:root /var/cache/jenkins
chown -R root:root /var/log/jenkins

重啟

service jenkins restart
ps -ef | grep jenkins

啟動

systemctl start jenkins

如果啟動失敗,報錯找不到  /usr/bin/java ,需要創建Jdk軟鏈接

開啟防火牆8080埠,重啟防火牆服務

firewall-cmd --zone=public --add-port=8080/tcp --permanent
systemctl restart firewalld.service 

查看埠狀態

netstat -lntp
netstat -lnp|grep 8080

查看Jenkins密碼:

cat /var/lib/jenkins/secrets/initialAdminPassword

遠程訪問該電腦 http://ip:8080,即可進入Jenkins

11.VSCode

安裝

yum check-update
sudo yum install code

設為預設編輯器

xdg-mime default code.desktop text/plain

官網地址:https://code.visualstudio.com/docs/setup/linux#_rhel-fedora-and-centos-based-distributions

接下來,怎麼啟動VSCode呢。找到他的路徑,然後拷貝到桌面,即可。

它的實際安裝路徑其實是這裡:

其實你也可以不用找到它的路徑,而是用這種方式:

 

或者你也可以在VSCode中選擇要打開的項目:

大功告成。

我感覺使用調試時不是很方便,不是很流暢,後來我還是選擇用windows上的VS Studio來編譯。

同時VS Studio也會有自帶的單元測試功能等,VSCode 是一個輕量級的編譯器,你需要什麼功能的話需要添加插件等。

 

總結

我上文中提到了持續集成工具,主要的目的就是為了我方便將代碼從Windows高效同步到linux中。代碼自動化部署。降低了運維成本等。

所以我今後的實戰都將會把本地windows作為開發環境,linux作為生產環境。

同時linux可能不止一臺,以後會談到微服務以及分散式的問題,docker容器就發揮上用場了,一切為了簡化部署。 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在C#的資料庫操作過程中,SqlCommand類一般用於Sqlserver資料庫的SQL語句的執行,包括Select語句、Update語句、Delete語句以及SQL存儲過程等,SqlCommand的操作一般在SqlConnection類成功連接Sqlserver資料庫後,並使用SqlConnect ...
  • 在C#的資料庫編程中,SqlConnection類主要用於連接Sqlserver資料庫,使用SqlConnection類的實例方法我們可以打開Sqlserver資料庫連接以及獲取數據完畢後關閉資料庫連接等操作,此文將介紹SqlConnection類的一些常用屬性以及方法。 一、SqlConnecti ...
  • 在Asp.Net應用程式中,很多時候登陸頁面以及其他安全重要操作的頁面需要輸入驗證碼,本文提供一個生成驗證碼圖片的工具類,該工具類通過隨機數生成驗證碼文本後,再通過C#中的圖片處理類點陣圖類,字體類,一個LinearGradientBrush類等生成驗證碼圖片。 本文生成圖片驗證碼的採用Asp.Net ...
  • 在伺服器的運維過程中,有時候發現一些異常IP或者掃描漏洞攻擊者IP訪問你的網站,此時如果想屏蔽該IP訪問你的伺服器,可以通過雲伺服器廠商提供的安全組進行設置。如果伺服器安裝有寶塔面板,也可以通過寶塔面板後臺的安全菜單下的屏蔽IP功能來設置實現。此文將介紹如何在寶塔面板中設置屏蔽IP訪問你的伺服器。 ...
  • 運維過阿裡雲伺服器或者騰訊雲伺服器的運維人員都知道,針對占用記憶體比較高的應用或者服務等,我們需要時刻關註伺服器的記憶體使用率,是否存在記憶體瓶頸等情況的出現。阿裡雲和騰訊雲官方後臺界面的監控數據頁面也有相應的記憶體使用情況統計,如果伺服器安裝的寶塔操作面板的話,在寶塔操作面板後臺界面上也有相應的監控功能, ...
  • 我這個系列博客的排序方式是按照項目的構建順序來的,沒有單元測試是不完整的。 測試場景更多更複雜以後,會來補充本節內容。 單元測試的構建 ...
  • 通過裝飾器模式實現在RegUser()方法本身業務前後加上一些自己的功能,如:RegUserBefore和RegUserAfter,即不修改UserService類又能增加新功能 2、實現用戶這個介面 3、裝飾器的模式去提供一個AOP功能 4、調用 5、效果圖 ...
  • 目錄 1. 新建項目並上傳Github 2. 關聯Jenkins實現持續集成 3. 已經磨好槍了,開始寫代碼 1. 新建項目並上傳Github 新建 ASP.NET Core Web 應用程式,勾選“新建Git存儲庫” : 選擇MVC模板,勾選“啟用Docker支持” 與 “https配置” : 打 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...