
作者:望道同學https://juejin.cn/post/6951684431597797389
服務器作為開發的一環,並且現在非常多的商業公司部署在生產環境上的服務器都是CentOS系統! 讓我們了解了解也在情理之中!
作為前端開發者,我們應該跳出自己的一畝三分地,跳出舒適區。擴大自己的技術廣度和深度,只有這樣!我們才能"做大做強,再創輝煌"
本篇文章旨在介紹在 Centos 上的一些常見環境配置技巧,為"前端小白"們在CentOS的道路上更進一步!
Centoslogo_centos
Centos 是一個基於 Linux 的開源免費操作系統,下面列出一些常用操作
#本地拷貝文件到遠程服務器scpoutput.txtroot@47.93.242.155:/data/複製代碼
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目錄中
開啟 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
server{listen80;server_namewww.123.com;location/api/{proxy_passhttp://127.0.0.1:18081/;}}複製代碼
代理到後端的路徑為:http://127.0.0.1:18081/getUser,省略了匹配到的/api/路徑;
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 的幾種方式
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 容器可以在數毫秒內啟動 用途/作用 比喻
在開始安裝之前,需要安裝device-mapper-persistent-data和lvm2兩個依賴。
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複製代碼
上面命令的各個參數含義如下。
如果沒有報錯,就可以打開瀏覽器訪問IP:4030了。正常情況下,顯示 Nginx 的歡迎頁。

docker-nginx-4030
然後,把這個容器終止,由於--rm參數的作用,容器文件會自動刪除。
dockercontainerstopmynginx複製代碼Docker 內配置 Nginx 方式二
下載一個官方的Nginx鏡像到本地
dockerpullnginx複製代碼
下載好的鏡像就會出現在鏡像列表里
dockerimages複製代碼docker-images
運行容器
dockerrun--name=nginx-d-p4030:80nginx複製代碼
上面命令的解釋如下:
如圖所示

docker-nginx-started
然後在瀏覽器裡面訪問http://47.93.242.155:4030/

docker-nginx-4030給 Docker 內的 Nginx 配置反向代理
要修改 Nginx 的配置文件,首先需要進入 Nginx 容器裡面,使用下面的命令進入容器裡面
dockerexec-itnginx/bin/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 版本簡介:
查看版本當前操作系統發行版信息。這個命令就可以清楚的知道到底是 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複製代碼20210414231503
20210414231520
點擊 繼續 按鈕,解鎖 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複製代碼
做一些配置(如何做參考前文的說明)
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這一項。接着填寫信息即可:
在命令行窗口,查看私鑰文件內容,並複製它
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可描述為:
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。
進入 jenkin 的系統管理->管理用戶界面, 可以看到一個用戶列表。在此列表中就找到User ID.

Jenkins-user-list
接下來點擊工具圖標進入詳情界面後找到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配置呢?歡迎在評論區留下的你的見解!
覺得有收穫的朋友歡迎點讚,關注一波!
(文本完)

每日分享前端插件乾貨,歡迎關注!
點讚和在看就是最大的支持❤️