close
喜歡就關注我們吧

作者:望道同學https://juejin.cn/post/6951684431597797389

服務器作為開發的一環,並且現在非常多的商業公司部署在生產環境上的服務器都是CentOS系統! 讓我們了解了解也在情理之中!

作為前端開發者,我們應該跳出自己的一畝三分地,跳出舒適區。擴大自己的技術廣度和深度,只有這樣!我們才能"做大做強,再創輝煌"

本篇文章旨在介紹在 Centos 上的一些常見環境配置技巧,為"前端小白"們在CentOS的道路上更進一步!

Centoslogo_centos

Centos 是一個基於 Linux 的開源免費操作系統,下面列出一些常用操作

#本地拷貝文件到遠程服務器scpoutput.txtroot@47.93.242.155:/data/複製代碼

output.txt:本地文件
root:登錄遠程服務器的賬號
47.93.242.155:遠程服務器的 IP
/data/:遠程服務器的目錄
#拷貝D盤https目錄下的所有文件到遠程的/data目錄scpD:/https/*root@47.93.242.155:/data複製代碼本地鏈接遠程 Centos 服務器

ssh -p 端口 用戶名@服務器IP

例子:

ssh-p22root@47.93.242.155#輸入登錄密碼#成功複製代碼yum 切換為阿里源cd/etc/yum.repos.d/curl-o/etc/yum.repos.d/CentOS-Base.repohttps://mirrors.aliyun.com/repo/Centos-8.repo#重新生成緩存--查看執行結果,如果有aliyun字樣就算成功yummakecache複製代碼其他#創建/data/test目錄mkdir/data/test#創建/data/newtest目錄mkdir/data/newtest#創建/data/test/index.html文件touch/data/test/index.html#編輯文件vi/data/test/index.html#查看文件內容cat/data/www/index.html#將`test`目錄下的所有文件複製到`newtest`目錄下cp–r/data/test/*/data/newtest#刪除/data/newtest/index.html文件rm-rf/data/newtest/index.html#將`test`目錄下的所有文件移動到新目錄`newtest`目錄下mv/data/test/*/data/newtest複製代碼#查看當前目錄的路徑pwd複製代碼#檢查端口被哪個進程占用netstat-lnp|grep88#88請換為你需要的端口,如:80複製代碼

執行netstat -lnp|grep 端口號之後會打印出被占用的進程及其編號

#殺掉編號為1777的進程(請根據實際情況輸入)kill-91777複製代碼

查看當前Centos操作系統發行版信息

cat/etc/redhat-release複製代碼Nginx 服務器搭建nginx-logo

Nginx 是一個高性能的 HTTP 和反向代理 web 服務器,使用 nginx 網站有:百度、京東、新浪、網易、騰訊、淘寶...。

Centos 下安裝 Nginx 服務器

這裡我們使用yum安裝 Nginx 服務器。

yuminstall-ynginx複製代碼啟動 Nginx 服務器

安裝後的 Nginx 沒有啟動,先啟動 Nginx 服務器。

nginx複製代碼

此時,訪問http://<您的域名或IP>可以看到 Nginx 的測試頁面

如果無法訪問,請重試用nginx -s reload命令重啟 Nginx

nginx-index配置靜態服務器訪問路徑

外網用戶訪問服務器的 Web 服務由Nginx提供,Nginx需要配置靜態資源的路徑信息才能通過url正確訪問到服務器上的靜態資源。

打開Nginx的默認配置文件/etc/nginx/nginx.conf,修改 Nginx 配置

vi/etc/nginx/nginx.conf複製代碼

將默認的/usr/share/nginx/html; 修改為:/data/www;,如下:

示例代碼:/etc/nginx/nginx.conf

usernginx;worker_processesauto;error_log/var/log/nginx/error.log;pid/run/nginx.pid;include/usr/share/nginx/modules/*.conf;events{worker_connections1024;}http{log_formatmain'$remote_addr-$remote_user[$time_local]"$request"''$status$body_bytes_sent"$http_referer"''"$http_user_agent""$http_x_forwarded_for"';access_log/var/log/nginx/access.logmain;sendfileon;tcp_nopushon;tcp_nodelayon;keepalive_timeout65;types_hash_max_size2048;include/etc/nginx/mime.types;default_typeapplication/octet-stream;include/etc/nginx/conf.d/*.conf;server{listen80default_server;listen[::]:80default_server;server_name_;#修改為以下路徑root/data/www;include/etc/nginx/default.d/*.conf;location/{}error_page404/404.html;location=/40x.html{}error_page500502503504/50x.html;location=/50x.html{}}}複製代碼

配置文件將/data/www/static作為所有靜態資源請求的根路徑,如訪問:http://<您的域名或IP>/static/index.js,將會去/data/www/static/目錄下去查找index.js/index.html。現在我們需要重啟 Nginx 讓新的配置生效,如:

nginx-sreload複製代碼創建第一個靜態文件

現在讓我們新建一個靜態文件,查看服務是否運行正常。

首先讓我們在/data目錄 下創建www目錄,如:

mkdir-p/data/www複製代碼

在/data/www目錄下創建我們的第一個靜態文件index.html

touch/data/www/index.htmlvi/data/www/index.html複製代碼

示例代碼:/data/www/index.html

<!DOCTYPEhtml><htmllang="zh"><head><metacharset="UTF-8"/><title>第一個靜態文件</title></head><body><h1>Hello world!</h1></body></html>複製代碼

現在訪問http://<您的域名或IP>/index.html應該可以看到頁面輸出Hello world!

到此,一個基於 Nginx 的靜態服務器就搭建完成了,現在所有放在/data/www目錄下的的靜態資源都可以直接通過域名/IP 訪問。

如果無顯示,請刷新瀏覽器頁面

indexHTMLNginx 配置 SSL 泛域名證書

這裡使用的是阿里雲的免費證書,期限為 1 年

aliyun-free-cert

購買成功後進入ssl證書控制台下載證書

aliyun-download-cert

下載申請好的 ssl 證書文件壓縮包到本地並解壓放到自己喜歡的目錄,如D:/https/。(這裡是用的 pem 與 key 文件,文件名可以更改)。

在連接服務器的窗口中創建/data/cert目錄用來存放證書文件

mkdir/data/cert複製代碼

使用scp命令上傳文件到遠程服務器(這裡需要新開一個終端,不要使用連接服務器的窗口):

scpD:/https/*root@47.93.242.155:/data/cert複製代碼

上面的意思是拷貝D:/https/目錄下的所有文件到遠程服務器的/data/cert目錄中

D:/https/:本地文件的絕對路徑
root:通過 root 用戶登錄到遠程服務器
47.93.242.155:遠程服務器的 ip 地址
/data/cert:遠程服務器上的路徑

開啟 443 監聽

Nginx 啟動後默認只監聽 80 端口。

這裡我們把 443 端口的監聽也一併開啟。

編輯全局配置文件

vi/etc/nginx/nginx.conf複製代碼

示例代碼:/etc/nginx/nginx.conf,說明都在注釋中

#Formoreinformationonconfiguration,see:#*OfficialEnglishDocumentation:http://nginx.org/en/docs/#*OfficialRussianDocumentation:http://nginx.org/ru/docs/usernginx;worker_processesauto;error_log/var/log/nginx/error.log;pid/run/nginx.pid;#Loaddynamicmodules.See/usr/share/nginx/README.dynamic.include/usr/share/nginx/modules/*.conf;events{worker_connections1024;}http{log_formatmain'$remote_addr-$remote_user[$time_local]"$request"''$status$body_bytes_sent"$http_referer"''"$http_user_agent""$http_x_forwarded_for"';access_log/var/log/nginx/access.logmain;sendfileon;tcp_nopushon;tcp_nodelayon;keepalive_timeout65;types_hash_max_size2048;include/etc/nginx/mime.types;default_typeapplication/octet-stream;#Loadmodularconfigurationfilesfromthe/etc/nginx/conf.ddirectory.#Seehttp://nginx.org/en/docs/ngx_core_module.html#include#formoreinformation.include/etc/nginx/conf.d/*.conf;server{listen80;#修改域名server_namensuedu.cn;#如果是HTTP請求則重定向到HTTPSrewrite^(.*)https://$host$1permanent;}#SettingsforaTLSenabledserver.server{#服務器端口使用443,開啟ssllisten443sslhttp2default_server;listen[::]:443sslhttp2default_server;#輸入你的域名server_namensuedu.cn;#修改靜態文件的路徑root/data/www;#ssl證書配置#修改證書路徑一ssl_certificate"/data/cert/4726867_www.nsuedu.cn.pem";#修改證書路徑二ssl_certificate_key"/data/cert/4726867_www.nsuedu.cn.key";ssl_session_cacheshared:SSL:1m;ssl_session_timeout10m;#緩存有效期ssl_ciphersHIGH:!aNULL:!MD5;#加密算法ssl_prefer_server_cipherson;#使用服務器端的首選算法#Loadconfigurationfilesforthedefaultserverblock.include/etc/nginx/default.d/*.conf;location/{}error_page404/404.html;location=/40x.html{}error_page500502503504/50x.html;location=/50x.html{}}}複製代碼

重啟 nginx

nginx-sreload複製代碼

在瀏覽器中訪問http://nsuedu.cn/

https-success配置 Nginx 反向代理

客戶端對代理服務器是無感知的,客戶端不需要做任何配置,用戶只請求反向代理服務器,反向代理服務器選擇目標服務器,獲取數據後再返回給客戶端。

反向代理服務器和目標服務器對外而言就是一個服務器,只是暴露的是代理服務器地址,而隱藏了真實服務器的 IP 地址。

20210416165016

參考從原理到實戰,徹底搞懂 Nginx![1]

訪問路徑:/api/getUser

當 nginx 配置文件proxy_pass的url 末尾 帶/時:

server{listen80;server_namewww.123.com;location/api/{proxy_passhttp://127.0.0.1:18081/;}}複製代碼

代理到後端的路徑為:http://127.0.0.1:18081/getUser,省略了匹配到的/api/路徑;

當 nginx 配置文件proxy_pass的url 末尾 不帶/時:

server{listen80;server_namewww.123.com;location/api/{proxy_passhttp://127.0.0.1:18081;}}複製代碼

代理到後端的路徑為:http://127.0.0.1:18081/api/getUser,連同匹配到的/api/路徑,一起進行反向代理;

Centos 下搭建 Node.js 環境node-logo

Node.js是運行在服務端的JavaScript, 是基於Chrome JavaScript V8引擎建立的平台。

安裝 Node.js 的幾種方式

方法一:從EPEL庫安裝Node.js--yum install nodejs,不足:安裝的node/npm版本較低,需要手動切換版本
方法二:使用官方編譯過的二進制數據包安裝,不足:安裝步驟繁雜
方法三: 通過NVM安裝,方便快捷不足:安裝時國外的網不好 🥶
方法四:源碼下載後編譯安裝,版本是最新的

yum install nodejs 方式安裝

查看當前系統自帶了哪些nodejs的版本

sudodnfmodulelistnodejs複製代碼centos-node-list

可以看到有三個版本的Node:10,12,14. 在版本 10 上有個[d]符號,它代表系統將會默認安裝的版本。如果你想要切換默認安裝的版本,可以執行下面的命令

sudodnfmoduleenablenodejs:14複製代碼

安裝 Node

sudodnfinstallnodejs複製代碼

查看 node 版本,可以發現是Node14的版本

node--v複製代碼NVM 方式安裝

我們可能同時在進行 2 個項目,而 2 個不同的項目所使用的 node 版本又是不一樣的,對於維護多個版本的node將會是一件非常麻煩的事情,而nvm就是為解決這個問題而產生的,它可以方便的在同一台設備上進行多個node版本之間切換

注: 使用此方式,在後面的 Jenkins 腳本使用 npm/yarn 會提示找不到命令,我也不知道咋解決,求大佬科普 🤪

下面是(2021/04)的最新穩定版: 可以在去NVM 官網[2]看一下,替換成最新的鏈接

curl-o-https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh|cp複製代碼

還需要運行下面的命令,以確認上一條命令的更改結果

source~/.bash_profile複製代碼

查看 Node 版本列表

nvmlist-remote複製代碼

安裝一個長期支持的版本

nvminstall14.16.1複製代碼

確認是否安裝成功

nvmcurrentnode-vnpm-v複製代碼

通過 環境變量echo $PATH查看安裝的位置

echo$PATH#打印出的結果中,需要取出`/root/.nvm/versions/node/v14.16.1/bin`複製代碼使用官方編譯過的二進制數據包的方式安裝

注: 使用此方式,在後面的 Jenkins 腳本使用 npm/yarn 能夠正常運行

下面是(2021/04)的最新穩定版: 可以在去Node.js 官網[3]看一下,替換成最新的鏈接

下載14.16.0到/data目錄

cd/datawgethttps://nodejs.org/dist/v14.16.0/node-v14.16.0-linux-x64.tar.xz複製代碼

下載完成後, 將其解壓

tarxvJfnode-v14.16.0-linux-x64.tar.xz複製代碼

將解壓的Node.js目錄移動到/usr/local目錄下

mvnode-v14.16.0-linux-x64/usr/local/node-v14複製代碼

配置node軟鏈接到/bin目錄

ln-s/usr/local/node-v14/bin/node/bin/node複製代碼配置和使用 npm

npm是Node.js的包管理和分發工具。它可以讓Node.js開發者能夠更加輕鬆的共享代碼和共用代碼片段

下載node的壓縮包中已經包含了npm, 我們只需要將其軟鏈接到bin目錄下即可

ln-s/usr/local/node-v14/bin/npm/bin/npm複製代碼配置環境變量

將/usr/local/node-v14/bin目錄添加到$PATH環境變量中可以方便地使用通過npm全局安裝的第三方工具

echo'exportPATH=/usr/local/node-v14/bin:$PATH'>>/etc/profile複製代碼

使環境變量生效

source/etc/profile複製代碼使用 npm

通過npm配置淘寶源

npmconfigsetregistryhttps://registry.npm.taobao.orgnpmgetregistry複製代碼

全局安裝yarn並配置淘寶源

npminstallyarn-gyarnconfigsetregistryhttp://registry.npm.taobao.org/yarnconfiggetregistry複製代碼在 Centos 上安裝 DockerLogo-Docker

Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的鏡像中,然後發布到任何流行的 Linux 或 Windows 機器上

Docker 與虛擬機的區別

Docker 是一個容器,它基於 Linux 內核實現

Docker 體積更小:容器運行的是不完整的操作系統(儘管它們可以),虛擬機必須運行完整的操作系統

Docker 啟動速度更快:虛擬機啟動需要數分鐘,而 Docker 容器可以在數毫秒內啟動

用途/作用

虛擬機更擅長於徹底隔離整個運行環境,虛擬機更擅長於徹底隔離整個運行環境。例如,雲服務提供商通常採用虛擬機技術隔離不同的用戶。
Docker 通常用於隔離不同的應用,例如前端,後端以及數據庫。

比喻

擁有完全獨立(隔離)的空間;
屬於不同的客戶(虛擬機所有者);
每個倉庫有各自的庫管人員(當前虛擬機的操作系統內核),無法管理其它倉庫。不存在信息共享的情況
Docker 比作集裝箱:各種貨物的打包(將各種應用程序和他們所依賴的運行環境打包成標準的容器,容器之間隔離)
服務器虛擬化就好比在碼頭上(物理主機及虛擬化層),建立了多個獨立的「小碼頭」—倉庫(虛擬機)
安裝與配置 Docker

在開始安裝之前,需要安裝device-mapper-persistent-data和lvm2兩個依賴。

device-mapper-persistent-data是Linux下的一個存儲驅動,Linux上的高級存儲技術。
Lvm的作用則是創建邏輯磁盤分區。這裡我們使用CentOS的Yum包管理器安裝兩個依賴:

yuminstall-yyum-utilsdevice-mapper-persistent-datalvm2複製代碼

依賴安裝完畢後,我們將阿里雲的Docker鏡像源添加進去。可以加速Docker的安裝。

sudoyum-config-manager--add-repohttp://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo複製代碼yuminstalldocker-ce-y複製代碼

安裝完畢,我們就可以使用systemctl啟動來啟動Docker了。systemctl是Linux的進程管理服務命令,他可以幫助我們啟動docker

systemctlstartdockersystemctlenabledocker複製代碼

接着執行一下docker -v,這條命令可以用來查看Docker安裝的版本信息。當然也可以幫助我們查看docker安裝狀態。如果正常展示版本信息,代表Docker已經安裝成功。

docker-v複製代碼

設置開機啟動

chkconfigdockeron複製代碼其他

顯示所有容器

dockerps複製代碼

顯示本地鏡像列表[4]

dockerimages複製代碼

刪除本地一個或多個鏡像[5]

dockerrmiimageID複製代碼

容器的啟動/關閉/重啟[6]

dockerstopcontainerIDdockerstartcontainerIDdockerrestartcontainerID複製代碼

刪除一個或多個容器[7]

dockerrmcontainerID複製代碼配置阿里雲鏡像源

在Docker安裝完畢後,之後我們去拉取docker鏡像時,一般默認會去docker官方源拉取鏡像。但是國內出海網速實在是太慢,所以選擇我們更換為阿里雲鏡像倉庫源進行鏡像下載加速。

登錄阿里雲官網,打開阿里雲容器鏡像服務[8]。點擊左側菜單最下面的鏡像加速器,選擇CentOS(如下圖)。按照官網的提示執行命令,即可更換docker鏡像源地址。

ea464ab9fe1941bba822a6131dd631c8_tplv-k3u1fbpfcp-zoom-1Docker 內配置 Nginx 方式一(推薦)

參考Nginx 容器教程[9]

dockercontainerrun-d-p4030:80--rm--namemynginxnginx複製代碼

上面命令的各個參數含義如下。

-d:在後台運行
-p:容器的 80 端口映射到 127.0.0.1:4030
--rm:容器停止運行後,自動刪除容器文件
--name:容器的名字為 mynginx
末尾的nginx:表示根據 nginx 鏡像運行容器。

如果沒有報錯,就可以打開瀏覽器訪問IP:4030了。正常情況下,顯示 Nginx 的歡迎頁。

docker-nginx-4030

然後,把這個容器終止,由於--rm參數的作用,容器文件會自動刪除。

dockercontainerstopmynginx複製代碼Docker 內配置 Nginx 方式二

下載一個官方的Nginx鏡像到本地

dockerpullnginx複製代碼

下載好的鏡像就會出現在鏡像列表里

dockerimages複製代碼docker-images

運行容器

dockerrun--name=nginx-d-p4030:80nginx複製代碼

上面命令的解釋如下:

--name:設置容器的名稱;
-d:表示在後台運行容器;
-p:指定端口映射。4030是宿主機的端口,80是 Nginx 容器內部的端口;
末尾的nginx:表示根據 nginx 鏡像運行容器。

如圖所示

docker-nginx-started

然後在瀏覽器裡面訪問http://47.93.242.155:4030/

docker-nginx-4030給 Docker 內的 Nginx 配置反向代理

要修改 Nginx 的配置文件,首先需要進入 Nginx 容器裡面,使用下面的命令進入容器裡面

dockerexec-itnginx/bin/bash複製代碼

上面命令的解釋說明:

-it:表示分配一個偽終端。
nginx:表示容器的名稱,這裡也可以使用容器 ID。
/bin/bash:表示對容器執行 bash 操作。

我們使用ls查看一下文件結構,發現裡面其實就是一個Linux操作系統。

20210415235729

再查看一下詳細的操作系統發行版信息

cat/etc/issue複製代碼cat-etc-issue

可以發現是一個Debian系統

Debian系統

順便介紹一些Debian系統的基本操作

#首先需要更新一下apt-getupdate#安裝vimapt-getinstallvim複製代碼修改為清華源鏡像

參考Debian 鏡像使用幫助[10]

如果遇到無法拉取 https 源的情況,請先使用 http 源並安裝:

sudoaptinstallapt-transport-httpsca-certificates複製代碼

查看 Debian 版本,以便選擇對應的鏡像源

Debian 版本簡介:

下一代 Debian 正式發行版的代號為buster
Debian 9(stretch) — 被淘汰的穩定版
Debian 8(jessie) — 被淘汰的穩定版
Debian 7(wheezy) — 被淘汰的穩定版
Debian 6.0(squeeze) — 被淘汰的穩定版
Debian GNU/Linux 5.0(lenny) — 被淘汰的穩定版
Debian GNU/Linux 4.0(etch) — 被淘汰的穩定版
Debian GNU/Linux 3.1(sarge) — 被淘汰的穩定版
Debian GNU/Linux 3.0(woody) — 被淘汰的穩定版
Debian GNU/Linux 2.2(potato) — 被淘汰的穩定版
Debian GNU/Linux 2.1(slink) — 被淘汰的穩定版
Debian GNU/Linux 2.0(hamm) — 被淘汰的穩定版

查看版本當前操作系統發行版信息。這個命令就可以清楚的知道到底是 RedHat 的、還是別的發行版,還有具體的版本號,比如 3.4 還是 5.4 等等

cat/etc/os-release複製代碼cat-etc.-os

修改鏡像文件

vi/etc/apt/sources.list複製代碼

修改內容如下

#默認注釋了源碼鏡像以提高aptupdate速度,如有需要可自行取消注釋debhttps://mirrors.tuna.tsinghua.edu.cn/debian/bustermaincontribnon-free#deb-srchttps://mirrors.tuna.tsinghua.edu.cn/debian/bustermaincontribnon-freedebhttps://mirrors.tuna.tsinghua.edu.cn/debian/buster-updatesmaincontribnon-free#deb-srchttps://mirrors.tuna.tsinghua.edu.cn/debian/buster-updatesmaincontribnon-freedebhttps://mirrors.tuna.tsinghua.edu.cn/debian/buster-backportsmaincontribnon-free#deb-srchttps://mirrors.tuna.tsinghua.edu.cn/debian/buster-backportsmaincontribnon-freedebhttps://mirrors.tuna.tsinghua.edu.cn/debian-securitybuster/updatesmaincontribnon-free#deb-srchttps://mirrors.tuna.tsinghua.edu.cn/debian-securitybuster/updatesmaincontribnon-free複製代碼

Nginx 默認會安裝在etc目錄下面, 查看 Nginx 的配置文件的內容

cat/etc/nginx/nginx.conf複製代碼20210415235137

我們看最後紅框裡面的內容,表示使用的是/etc/nginx/conf.d/default.conf文件進行配置。

那麼我們編輯/etc/nginx/conf.d/default.conf文件即可。

vi/etc/nginx/conf.d/default.conf複製代碼

配置方式與前文的 nginx 配置一樣,不過我們需要把必要的文件(靜態文件,SSL 證書)傳遞給 Docker 容器

創建存放資源的目錄

mkdir/data/certmkdir/data/www複製代碼

退出docker容器,到服務器界面

exit複製代碼

查看所有的容器信息,能獲取容器的id,如下圖

dockerps-a複製代碼docker-ps-a

在服務器終端把資源文件傳遞給docker下的nginx容器

dockercp/data/cert6ba3901beac9:/data/cert複製代碼

保存容器

然後執行如下命令,保存鏡像:

dockercommit-m="備註"你的CONTAINER_ID你的IMAGE複製代碼

請自行將 -m 後面的信息改成自己的容器的信息

大功告成!

恭喜你結束了 Docker 的教程並學會了 Docker 的一些基本操作

Centos 下安裝 Jenkinsjenkins-logo

Jenkins是一個基於Java語言開發的持續構建工具平台,主要用於持續、自動的構建/測試你的軟件和項目。它可以執行你預先設定好的設置和構建腳本,也可以和Git代碼庫做集成,實現自動觸發和定時觸發構建。

這部分內容大多內容是對從 0 到 1 實現一套 CI/CD 流程[11]掘金小冊的搬運,更詳細的內容可以學習這本小冊

安裝 OpenJDK

因為Jenkins是Java編寫的持續構建平台,所以安裝Java必不可少。

在這裡,我們選擇安裝開源的openjdk。在這我們直接使用yum包管理器安裝openjdk即可。

yuminstall-yjava複製代碼使用國內鏡像加速安裝 Jenkins

官方教程[12]安裝速度太慢。因此我們選擇國內鏡像安裝

下面是(2021/04)的 jenkins LTS 版本: 可以在去清華大學鏡像站[13]看一下,替換成最新的鏈接

下載Jenkins到/data目錄

cd/datawgethttps://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.277.2-1.1.noarch.rpmsudoyuminstalljenkins-2.277.2-1.1.noarch.rpm複製代碼啟動 Jenkins

Jenkins安裝後,會將啟動命令註冊到系統Service命令中。所以我們直接使用系統service命令啟動Jenkins即可。

在這裡,有三個命令可以使用,分別對應 啟動 / 重啟 / 停止 三個命令。

在這裡,我們直接調用service jenkins start啟動Jenkins即可

servicejenkinsstart#servicejenkinsrestartrestart重啟Jenkins#servicejenkinsrestartstop停止Jenkins複製代碼

服務啟動後,訪問IP:8080。如果能夠看到以下界面,代表正在啟動。Jenkins第一次的啟動時間一般比較長(視服務器性能而看)

20210414231359初始化 Jenkins 配置解鎖 Jenkins

在Jenkins啟動完成後,會自動跳轉至這個界面(下方二圖)。這是Jenkins的解鎖界面,你需要輸入存放在服務器的初始解鎖密碼才能進行下一步操作。

Jenkins啟動後,會生成一個初始密碼。該密碼在服務器的文件內存放,我們可以進入服務器查看密碼內容,將密碼填寫在Jenkins的管理員密碼輸入框內:

cat/var/lib/jenkins/secrets/initialAdminPassword複製代碼2021041423150320210414231520

點擊 繼續 按鈕,解鎖 Jenkins。

下載插件

解鎖後就來到了插件下載頁面,這一步要下載一些Jenkins的功能插件。

20210414231547

因為Jenkins插件服務器在國外,所以速度不太理想。我們需要更換為清華大學的Jenkins插件源後,再安裝插件,所以先不要點安裝插件。

更換方法很簡單。進入服務器,將/var/lib/jenkins/updates/default.json內的插件源地址替換成清華大學的源地址,將google替換為baidu即可。

sed-i's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g'/var/lib/jenkins/updates/default.json&&sed-i's/http:\/\/www.google.com/https:\/\/www.baidu.com/g'/var/lib/jenkins/updates/default.json複製代碼

接着點擊 安裝推薦的插件 即可。稍等一會插件安裝完畢

完成安裝

插件安裝完畢後,接着是註冊管理員賬號。

jenkis-welcome

按照提示一路配置後,直到看到以下界面代表安裝成功

20210414231814測試安裝

到這裡,我們的Jenkins算是啟動成功了。但是,我們還需要對Jenkins做一點點簡單的配置,才可以讓它可以構建docker鏡像。

我們點擊Jenkins 首頁->左側導航->新建任務->Freestyle project(構建一個自由風格的軟件項目)

20210414232035

新建完畢後,找到 構建 一項,選擇 增加構建步驟,選擇 執行shell,輸入以下命令

docker-vdockerpullnode:latest複製代碼

該命令會去拉取一個nodejs穩定版的鏡像,我們可以來測試Docker的可用性

20210414232101

保存後,我們點擊左側菜單的立即構建,Jenkins就會開始構建。選擇左側歷史記錄第一項(最新的一項),點擊控制台輸出,查看構建日誌。

20210414232116

執行後,我們發現提示無訪問權限。這又是什麼情況呢?這裡就不得不提到 Linux 下的Unix Socket權限問題了

在Linux中,Unix socket屬於root用戶,因此需要root權限才能訪問

但是在docker中,docker提供了一個 用戶組 的概念。我們可以將執行Shell的用戶添加到名稱為docker的用戶組,則可以正常執行docker命令。

而在Jenkins中執行的終端用戶做jenkins,所以我們只需要將jenkins加入到docker用戶組即可:

sudogroupadddocker#新增docker用戶組sudogpasswd-ajenkinsdocker#將當前用戶添加至docker用戶組newgrpdocker#更新docker用戶組複製代碼

加入後,重啟Jenkins:

sudoservicejenkinsrestart複製代碼

重啟Jenkins後,再次執行腳本。此時執行成功:

20210414232608回過頭來查看 docker 鏡像dockerimages複製代碼

會發現多了一個docker的node鏡像,這就是我們通過Jenkins自動安裝的

node-in-docker

進入此docker鏡像

dockerrun-itnode/bin/bash複製代碼

做一些配置(如何做參考前文的說明)

npm配置淘寶源
全局安裝yarn並配置配置淘寶源

npmconfigsetregistryhttps://registry.npm.taobao.orgnpmgetregistry#可能提示已安裝,就不用再安裝了npminstallyarn-gyarnconfigsetregistryhttp://registry.npm.taobao.org/yarnconfiggetregistryexit複製代碼使用 SSH 協議集成 Git 倉庫源

這一步,我們使用Jenkins集成外部Git倉庫,實現對真實代碼的拉取和構建。在這裡,我們選用Gitee(Github 太慢了 🤧) 作為我們的代碼源。這裡準備一個UmiJS[14]項目來演示構建。

生成公鑰私鑰

首先,我們先來配置公鑰和私鑰。這是Jenkins訪問Git私有庫的常用認證方式。我們可以使用ssh-keygen命令即可生成公鑰私鑰。在本地機器執行生成即可。這裡的郵箱可以換成你自己的郵箱:

ssh-keygen-trsa-C"642178633@qq.com"複製代碼

執行後,會遇到第一步驟:Enter file in which to save the key。

這一步是詢問你要將公鑰私鑰文件放在哪裡。默認是放在~/.ssh/id_rsa下,當然也可以選擇輸入你自己的路徑。一路回車即可。

20210414234455

結束後,你會得到兩個文件。分別是id_rsa和id_rsa.pub。

其中,id_rsa是私鑰文件,id_rsa.pub是對應的公鑰文件。

我們需要在 Git 端配置公鑰,在 Jenkins 端使用私鑰與 Git 進行身份校驗。

在 Gitee 配置公鑰

在Gitee中,如果你要配置公鑰有 2 種方式:倉庫公鑰 和 個人公鑰。其中,如果配置了倉庫公鑰,則該公鑰只能對配置的倉庫進行訪問。如果配置了個人公鑰,則賬號下所有私有倉庫都可以訪問。

這裡我們就以配置個人公鑰為例子。首先打開右上角的設置 ,點擊下面的設置=>SSH 公鑰

gitee-ssh-firstgitee-ssh-second

在下方有個添加公鑰,填入信息即可。

其中的標題為公鑰標題,這裡可以自定義標題;公鑰則為剛才生成的id_rsa.pub文件。使用cat命令查看下文件內容,將內容填入輸入框並保存。接着去Jenkins端配置私鑰

cat~/.ssh/id_rsa.pub複製代碼20210414235532在 Jenkins 配置私鑰

回到Jenkins。在Jenkins中,私鑰/密碼 等認證信息都是以 憑證 的方式管理的,所以可以做到全局都通用。我們可以在配置任務時,來添加一個自己的憑證。點擊項目的 配置,依次找到源碼管理=>Git=>Repositories

2021041423562020210414235631

這裡的Repository URL則是我們的倉庫地址, SSH 地址格式為git@gitee.com:xxx/xxx.git。可以從倉庫首頁中的克隆/下載=>SSH中看到

20210414235645

重點是Credentials這一項,這裡則是我們選擇認證憑證的地方。我們可以點擊右側添加=>Jenkins按鈕添加一條新的憑證認證信息。

點擊後會打開一個彈窗,這是 Jenkins 添加憑證的彈窗。選擇類型中的SSH Username with private key這一項。接着填寫信息即可:

ID:這條認證憑證在 Jenkins 中的名稱是什麼
描述:描述信息
Username:用戶名(郵箱)
Private Key:這裡則是我們填寫私鑰的地方。

在命令行窗口,查看私鑰文件內容,並複製它

cat~/.ssh/id_rsa複製代碼

點擊Add按鈕,將xxx 私鑰文件內所有文件內容全部複製過去(包含開頭的 BEGIN OPENSSH PRIVATE KEY 和結尾的 END OPENSSH PRIVATE KEY)

接着點擊添加按鈕,保存憑證。

20210414235711

保存後,在Credentials下拉列表中選擇你添加的憑證。

如果沒有出現紅色無權限提示,則代表身份校驗成功,可以正常訪問。

20210414235729

如果出現下圖的問題,則說明服務器上沒有安裝Git

no-git

安裝結束後,刷新界面就正常了

yum-yinstallgit複製代碼構建鏡像

在我們將環境準備就緒後,就可以開始構建鏡像了。不過,我們需要先準備個DockerFile才可以構建鏡像。那什麼是DockerFile呢?

編寫 Dockerfile

什麼是Dockerfile

Dockerfile是一個Docker鏡像的基礎描述文件,裡面描述了生成一個鏡像所需要的執行步驟。我們也可以自定義一份Dockerfile來創建一個自己的鏡像。

例如下面的步驟,使用Dockerfile可描述為:

基於nginx:1.15鏡像做底座。
拷貝本地html文件夾內的文件,到鏡像內/etc/nginx/html文件夾。
拷貝本地conf文件夾內的文件,到鏡像內/etc/nginx/文件夾。

FROMnginx:1.15-alpineCOPYhtml/etc/nginx/htmlCOPYconf/etc/nginx/WORKDIR/etc/nginx/html複製代碼

編寫完成後,怎麼生成鏡像呢?我們只需要使用docker build命令就可以構建一個鏡像了:

dockerbuild-timagename:version.複製代碼

-t: 聲明要打一個鏡像的 Tag 標籤,緊跟着的後面就是標籤。

標籤格式為鏡像名:版本 .:聲明要尋找dockerfile文件的路徑..代表當前路徑下尋找。默認文件名為Dockerfile。

關於更多DockerFile的語法,詳細可以看這裡[15]

因為我們的鏡像只包含一個nginx,所以dockerfile內容比較簡單。我們只需要在代碼根目錄下新建一個名為Dockerfile的文件,輸入以下內容,並將其提交到代碼庫[16]即可。

viDockerfileFROMnginx:1.15-alpineCOPYhtml/etc/nginx/htmlCOPYconf/etc/nginx/WORKDIR/etc/nginx/html複製代碼gitadd./Dockerfilegitcommit-m"chore:adddockerfile"gitpush複製代碼Jenkins 端配置

在代碼源和DockerFile準備就緒後。在服務器的/data目錄下新建一個jenkins-shll.sh腳本文件

touch/data/jenkins-shll.shvi/data/jenkins-shll.sh複製代碼

並加入如下內容

#!/bin/sh-lyarnyarnrunbuilddockerbuild-tjenkins-test.複製代碼

這裡腳本很簡單,主要是作用是安裝依賴=>構建文件=>構建鏡像。

#!/bin/sh -l的作用是:

如果在服務器中的shell命令可以執行,但到了jenkins中卻無法執行,這是因為jenkins沒有加載服務器中的全局變量/etc/profile導致的

最後只需在Jenkins端配置下要執行的Shell腳本即可。找到項目的配置,依次找到構建=>Execute shell。輸入以下腳本:

sh/data/jenkins-shll.sh複製代碼手動執行任務

保存後我們去手動觸發執行下任務。當未拋出錯誤時,代表任務執行成功

20210415000307回過頭來查看 dockerdockerimages複製代碼

可以發現,又多了一個名叫jenkins-test的 docker 鏡像

laest-docker-images自動執行任務安裝插件

安裝Generic Webhook Trigger Plugin插件(系統管理-插件管理-可用插件-搜索Generic Webhook)

選中並點擊Install without restart

Generic-Webhook

如果可選插件列表為空,點擊高級標籤頁,替換升級站點的 URL 為:http://mirror.xmission.com/jenkins/updates/update-center.json並且點擊提交和立即獲取。

添加觸發器

Generic Webhook Trigger Plugin插件功能很強大,可以根據不同的觸發參數觸發不同的構建操作,比如我向遠程倉庫提交的是master分支的代碼,就執行代碼部署工作,我向遠程倉庫提交的是某個feature分支,就執行單元測試,單元測試通過後合併至dev分支。

靈活性很高,可以自定義配置適合自己公司的方案,這裡方便演示我們不做任何條件判斷,只要有push就觸發。

在任務配置->觸發構建起->里勾選Generic Webhook Trigger,然後保存即可

20210415001710Git 倉庫配置鈎子

此處以碼云為例,github 的配置基本一致,進入碼雲項目主頁後,點擊管理-webhooks-添加,會跳出一個這樣的框來。

webhooks1

上圖中的 URL 格式為http://<User ID>:<API Token>@<Jenkins IP 地址>:端口/generic-webhook-trigger/invoke

下面的幾個選項是你在倉庫執行什麼操作的時候觸發鈎子,這裡默認用push。

獲取User ID

進入 jenkin 的系統管理->管理用戶界面, 可以看到一個用戶列表。在此列表中就找到User ID.

Jenkins-user-list

獲取API Token

接下來點擊工具圖標進入詳情界面後找到API Token->添加新Token->生成->找個你喜歡的地方將此 token 保存好

獲取端口

Jenkins IP 地址和端口是你部署 jenkins 服務器的 ip 地址,端口號沒改過的話就是8080。

獲取密碼

密碼就是你登錄 jenkins 的密碼

點擊提交完成配置。我們還需要測試一下鈎子是否生效

test-webhooks

點擊測試,如果配置是成功的,你的Jenkins左側欄構建執行狀態里將會出現一個任務。

20210415001854實現郵件提醒-todo批量刪除構建歷史

進入系統配置->腳本命令運行

jenkins-script-delete-history

輸入腳本

#"test"是項目名稱,100是指(0~·100)全刪除,就是構建歷史前面的IDdefjobName="test"defmaxNumber=100Jenkins.instance.getItemByFullName(jobName).builds.findAll{it.number<=maxNumber}.each{it.delete()}複製代碼

點擊運行

最後

在日常工作中你還使用哪些Centos配置呢?歡迎在評論區留下的你的見解!

覺得有收穫的朋友歡迎點讚,關注一波!

(文本完)

每日分享前端插件乾貨,歡迎關注!


點讚和在看就是最大的支持❤️

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()