前端開發者應該知道的 Centos-Docker-Nginx-Node-Jenkins 操作
output.txt
: 本地文件root
: 登錄遠程服務器的賬號47.93.242.155
: 遠程服務器的 IP/data/
: 遠程服務器的目錄
# 拷貝D盤https目錄下的所有文件到 遠程的 /data 目錄
scp D:/https/* root@47.93.242.155:/data
複製代碼
本地鏈接遠程 Centos 服務器
ssh -p 端口 用戶名@服務器IP
例子:
ssh -p 22 root@47.93.242.155
# 輸入登錄密碼
# 成功
複製代碼
yum 切換爲阿里源
cd /etc/yum.repos.d/
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo
# 重新生成緩存--查看執行結果,如果有aliyun 字樣就算成功
yum makecache
複製代碼
其他
# 創建 /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|grep 88 #88請換爲你需要的端口,如:80
複製代碼
執行netstat -lnp|grep 端口號
之後會打印出被佔用的進程及其編號
# 殺掉編號爲1777的進程(請根據實際情況輸入)
kill -9 1777
複製代碼
查看當前 Centos
操作系統發行版信息
cat /etc/redhat-release
複製代碼
Nginx 服務器搭建
Nginx 是一個高性能的 HTTP 和反向代理 web 服務器,使用 nginx 網站有:百度、京東、新浪、網易、騰訊、淘寶...。
Centos 下安裝 Nginx 服務器
這裏我們使用 yum
安裝 Nginx 服務器。
yum install -y nginx
複製代碼
啓動 Nginx 服務器
安裝後的 Nginx 沒有啓動,先啓動 Nginx 服務器。
nginx
複製代碼
此時,訪問 http://<您的域名或IP>
可以看到 Nginx 的測試頁面
如果無法訪問,請重試用
nginx -s reload
命令重啓 Nginx
配置靜態服務器訪問路徑
外網用戶訪問服務器的 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
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$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.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
# 修改爲以下路徑
root /data/www;
include /etc/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}
複製代碼
配置文件將 /data/www/static
作爲所有靜態資源請求的根路徑,如訪問: http://<您的域名或IP>/static/index.js
,將會去 /data/www/static/
目錄下去查找 index.js/index.html
。現在我們需要重啓 Nginx 讓新的配置生效,如:
nginx -s reload
複製代碼
創建第一個靜態文件
現在讓我們新建一個靜態文件,查看服務是否運行正常。
首先讓我們在 /data
目錄 下創建 www
目錄,如:
mkdir -p /data/www
複製代碼
在 /data/www
目錄下創建我們的第一個靜態文件 index.html
touch /data/www/index.html
vi /data/www/index.html
複製代碼
示例代碼:/data/www/index.html
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8" />
<title>第一個靜態文件</title>
</head>
<body>
<h1>Hello world!</h1>
</body>
</html>
複製代碼
現在訪問 http://<您的域名或IP>/index.html
應該可以看到頁面輸出 Hello world!
到此,一個基於 Nginx 的靜態服務器就搭建完成了,現在所有放在 /data/www
目錄下的的靜態資源都可以直接通過域名 / IP 訪問。
如果無顯示,請刷新瀏覽器頁面
Nginx 配置 SSL 泛域名證書
這裏使用的是阿里雲的免費證書,期限爲 1 年
購買成功後進入ssl證書控制檯
下載證書
下載申請好的 ssl 證書文件壓縮包到本地並解壓放到自己喜歡的目錄, 如D:/https/
。(這裏是用的 pem 與 key 文件,文件名可以更改)。
在連接服務器的窗口中創建 /data/cert
目錄用來存放證書文件
mkdir /data/cert
複製代碼
使用 scp
命令上傳文件到遠程服務器 (這裏需要新開一個終端,不要使用連接服務器的窗口):
scp D:/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
, 說明都在註釋中
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$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.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
# 修改域名
server_name nsuedu.cn;
# 如果是HTTP請求則重定向到HTTPS
rewrite ^(.*) https://$host$1 permanent;
}
# Settings for a TLS enabled server.
server {
# 服務器端口使用443,開啓ssl
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
# 輸入你的域名
server_name nsuedu.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_cache shared:SSL:1m;
ssl_session_timeout 10m; #緩存有效期
ssl_ciphers HIGH:!aNULL:!MD5; #加密算法
ssl_prefer_server_ciphers on; #使用服務器端的首選算法
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}
複製代碼
重啓 nginx
nginx -s reload
複製代碼
在瀏覽器中訪問http://nsuedu.cn/
配置 Nginx 反向代理
客戶端對代理服務器是無感知的,客戶端不需要做任何配置,用戶只請求反向代理服務器,反向代理服務器選擇目標服務器,獲取數據後再返回給客戶端。
反向代理服務器和目標服務器對外而言就是一個服務器,只是暴露的是代理服務器地址,而隱藏了真實服務器的 IP 地址。
訪問路徑:/api/getUser
- 當 nginx 配置文件
proxy_pass
的 url 末尾 帶/
時:
server {
listen 80;
server_name www.123.com;
location /api/ {
proxy_pass http://127.0.0.1:18081/;
}
}
複製代碼
代理到後端的路徑爲:http://127.0.0.1:18081/getUser
,省略了匹配到的/api/
路徑;
- 當 nginx 配置文件
proxy_pass
的 url 末尾 不帶/
時:
server {
listen 80;
server_name www.123.com;
location /api/ {
proxy_pass http://127.0.0.1:18081;
}
}
複製代碼
代理到後端的路徑爲:http://127.0.0.1:18081/api/getUser
,連同匹配到的/api/
路徑,一起進行反向代理;
Centos 下搭建 Node.js 環境
Node.js
是運行在服務端的 JavaScript
, 是基於 Chrome JavaScript V8
引擎建立的平臺。
安裝 Node.js 的幾種方式
- 方法一:從
EPEL庫
安裝Node.js
--yum install nodejs
,不足: 安裝的node/npm
版本較低, 需要手動切換版本 - 方法二: 使用官方編譯過的二進制數據包安裝, 不足: 安裝步驟繁雜
- 方法三: 通過
NVM
安裝, 方便快捷不足: 安裝時國外的網不好 🥶 - 方法四: 源碼下載後編譯安裝, 版本是最新的
yum install nodejs 方式安裝
查看當前系統自帶了哪些nodejs
的版本
sudo dnf module list nodejs
複製代碼
可以看到有三個版本的 Node
:10
,12
,14
. 在版本 10 上有個[d]
符號, 它代表系統將會默認安裝的版本。如果你想要切換默認安裝的版本,可以執行下面的命令
sudo dnf module enable nodejs:14
複製代碼
安裝 Node
sudo dnf install nodejs
複製代碼
查看 node 版本,可以發現是Node14
的版本
node --v
複製代碼
NVM 方式安裝
我們可能同時在進行 2 個項目,而 2 個不同的項目所使用的 node 版本又是不一樣的,對於維護多個版本的node
將會是一件非常麻煩的事情,而nvm
就是爲解決這個問題而產生的,它可以方便的在同一臺設備上進行多個node
版本之間切換
注: 使用此方式,在後面的 Jenkins 腳本使用 npm/yarn 會提示找不到命令,我也不知道咋解決,求大佬科普 🤪
下面是 (2021/04) 的最新穩定版: 可以在去 NVM 官網看一下,替換成最新的鏈接
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | cp
複製代碼
還需要運行下面的命令,以確認上一條命令的更改結果
source ~/.bash_profile
複製代碼
查看 Node 版本列表
nvm list-remote
複製代碼
安裝一個長期支持的版本
nvm install 14.16.1
複製代碼
確認是否安裝成功
nvm current
node -v
npm -v
複製代碼
通過 環境變量echo $PATH
查看安裝的位置
echo $PATH
# 打印出的結果中,需要取出 `/root/.nvm/versions/node/v14.16.1/bin`
複製代碼
使用官方編譯過的二進制數據包的方式安裝
注: 使用此方式,在後面的 Jenkins 腳本使用 npm/yarn 能夠正常運行
下面是 (2021/04) 的最新穩定版: 可以在去 Node.js 官網看一下,替換成最新的鏈接
下載 14.16.0
到/data
目錄
cd /data
wget https://nodejs.org/dist/v14.16.0/node-v14.16.0-linux-x64.tar.xz
複製代碼
下載完成後, 將其解壓
tar xvJf node-v14.16.0-linux-x64.tar.xz
複製代碼
將解壓的 Node.js
目錄移動到 /usr/local
目錄下
mv node-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 'export PATH=/usr/local/node-v14/bin:$PATH' >> /etc/profile
複製代碼
使環境變量生效
source /etc/profile
複製代碼
使用 npm
通過 npm
配置淘寶源
npm config set registry https://registry.npm.taobao.org
npm get registry
複製代碼
全局安裝yarn
並配置淘寶源
npm install yarn -g
yarn config set registry http://registry.npm.taobao.org/
yarn config get registry
複製代碼
在 Centos 上安裝 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
包管理器安裝兩個依賴:
yum install -y yum-utils device-mapper-persistent-data lvm2
複製代碼
依賴安裝完畢後,我們將阿里雲的 Docker
鏡像源添加進去。可以加速 Docker
的安裝。
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
複製代碼
yum install docker-ce -y
複製代碼
安裝完畢,我們就可以使用 systemctl
啓動來啓動 Docker
了。systemctl
是 Linux
的進程管理服務命令,他可以幫助我們啓動 docker
systemctl start docker
systemctl enable docker
複製代碼
接着執行一下 docker -v
,這條命令可以用來查看 Docker
安裝的版本信息。當然也可以幫助我們查看 docker
安裝狀態。如果正常展示版本信息,代表 Docker
已經安裝成功。
docker -v
複製代碼
設置開機啓動
chkconfig docker on
複製代碼
其他
顯示所有容器
docker ps
複製代碼
docker images
複製代碼
docker rmi imageID
複製代碼
docker stop containerID
docker start containerID
docker restart containerID
複製代碼
docker rm containerID
複製代碼
配置阿里雲鏡像源
在 Docker
安裝完畢後,之後我們去拉取 docker
鏡像時,一般默認會去 docker
官方源拉取鏡像。但是國內出海網速實在是太慢,所以選擇我們更換爲阿里雲鏡像倉庫源進行鏡像下載加速。
登錄阿里雲官網,打開 阿里雲容器鏡像服務。點擊左側菜單最下面的鏡像加速器
,選擇 CentOS
(如下圖)。按照官網的提示執行命令,即可更換 docker
鏡像源地址。
Docker 內配置 Nginx 方式一 (推薦)
參考 Nginx 容器教程
docker container run -d -p 4030:80 --rm --name mynginx nginx
複製代碼
上面命令的各個參數含義如下。
-d
:在後臺運行-p
:容器的 80 端口映射到 127.0.0.1:4030--rm
:容器停止運行後,自動刪除容器文件--name
:容器的名字爲 mynginx- 末尾的
nginx
:表示根據 nginx 鏡像運行容器。
如果沒有報錯,就可以打開瀏覽器訪問 IP:4030
了。正常情況下,顯示 Nginx 的歡迎頁。
然後,把這個容器終止,由於--rm
參數的作用,容器文件會自動刪除。
docker container stop mynginx
複製代碼
Docker 內配置 Nginx 方式二
下載一個官方的 Nginx
鏡像到本地
docker pull nginx
複製代碼
下載好的鏡像就會出現在鏡像列表裏
docker images
複製代碼
運行容器
docker run --name=nginx -d -p 4030:80 nginx
複製代碼
上面命令的解釋如下:
--name
:設置容器的名稱;-d
:表示在後臺運行容器;-p
:指定端口映射。4030
是宿主機的端口,80
是 Nginx 容器內部的端口;- 末尾的
nginx
:表示根據 nginx 鏡像運行容器。
如圖所示
然後在瀏覽器裏面訪問 http://47.93.242.155:4030/
給 Docker 內的 Nginx 配置反向代理
要修改 Nginx 的配置文件,首先需要進入 Nginx 容器裏面,使用下面的命令進入容器裏面
docker exec -it nginx /bin/bash
複製代碼
上面命令的解釋說明:
-it
:表示分配一個僞終端。nginx
:表示容器的名稱,這裏也可以使用容器 ID。/bin/bash
:表示對容器執行 bash 操作。
我們使用ls
查看一下文件結構,發現裏面其實就是一個 Linux
操作系統。
再查看一下詳細的操作系統發行版信息
cat /etc/issue
複製代碼
可以發現是一個Debian
系統
Debian
系統
順便介紹一些 Debian
系統的基本操作
# 首先需要更新一下
apt-get update
# 安裝vim
apt-get install vim
複製代碼
修改爲清華源鏡像
如果遇到無法拉取 https 源的情況,請先使用 http 源並安裝:
sudo apt install apt-transport-https ca-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
複製代碼
修改鏡像文件
vi /etc/apt/sources.list
複製代碼
修改內容如下
# 默認註釋了源碼鏡像以提高 apt update 速度,如有需要可自行取消註釋
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free
複製代碼
Nginx 默認會安裝在 etc
目錄下面, 查看 Nginx 的配置文件的內容
cat /etc/nginx/nginx.conf
複製代碼
我們看最後紅框裏面的內容,表示使用的是/etc/nginx/conf.d/default.conf
文件進行配置。
那麼我們編輯/etc/nginx/conf.d/default.conf
文件即可。
vi /etc/nginx/conf.d/default.conf
複製代碼
配置方式與前文的 nginx 配置一樣,不過我們需要把必要的文件 (靜態文件, SSL 證書) 傳遞給 Docker 容器
創建存放資源的目錄
mkdir /data/cert
mkdir /data/www
複製代碼
退出 docker
容器,到服務器界面
exit
複製代碼
查看所有的容器信息,能獲取容器的 id
, 如下圖
docker ps -a
複製代碼
在服務器終端把資源文件傳遞給 docker
下的nginx
容器
docker cp /data/cert 6ba3901beac9:/data/cert
複製代碼
保存容器
然後執行如下命令,保存鏡像:
docker commit -m="備註" 你的CONTAINER_ID 你的IMAGE
複製代碼
請自行將 -m 後面的信息改成自己的容器的信息
大功告成!
恭喜你結束了 Docker 的教程並學會了 Docker 的一些基本操作
Centos 下安裝 Jenkins
Jenkins
是一個基於 Java
語言開發的持續構建工具平臺,主要用於持續、自動的構建 / 測試你的軟件和項目。它可以執行你預先設定好的設置和構建腳本,也可以和 Git
代碼庫做集成,實現自動觸發和定時觸發構建。
這部分內容大多內容是對從 0 到 1 實現一套 CI/CD 流程 掘金小冊的搬運,更詳細的內容可以學習這本小冊
安裝 OpenJDK
因爲 Jenkins
是 Java
編寫的持續構建平臺,所以安裝 Java
必不可少。
在這裏,我們選擇安裝開源的 openjdk
。在這我們直接使用 yum
包管理器安裝 openjdk
即可。
yum install -y java
複製代碼
使用國內鏡像加速安裝 Jenkins
官方教程 安裝速度太慢。因此我們選擇國內鏡像安裝
下面是 (2021/04) 的 jenkins LTS 版本: 可以在去 清華大學鏡像站 看一下,替換成最新的鏈接
下載 Jenkins
到/data
目錄
cd /data
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.277.2-1.1.noarch.rpm
sudo yum install jenkins-2.277.2-1.1.noarch.rpm
複製代碼
啓動 Jenkins
Jenkins
安裝後,會將啓動命令註冊到系統 Service
命令中。所以我們直接使用系統 service
命令啓動 Jenkins
即可。
在這裏,有三個命令可以使用,分別對應 啓動 / 重啓 / 停止 三個命令。
在這裏,我們直接調用 service jenkins start
啓動 Jenkins
即可
service jenkins start
# service jenkins restart restart 重啓 Jenkins
# service jenkins restart stop 停止 Jenkins
複製代碼
服務啓動後,訪問 IP:8080
。如果能夠看到以下界面,代表正在啓動。 Jenkins
第一次的啓動時間一般比較長(視服務器性能而看)
初始化 Jenkins 配置
解鎖 Jenkins
在 Jenkins
啓動完成後,會自動跳轉至這個界面(下方二圖)。這是 Jenkins
的解鎖界面,你需要輸入存放在服務器的初始解鎖密碼才能進行下一步操作。
Jenkins
啓動後,會生成一個初始密碼。該密碼在服務器的文件內存放,我們可以進入服務器查看密碼內容,將密碼填寫在 Jenkins
的管理員密碼輸入框內:
cat /var/lib/jenkins/secrets/initialAdminPassword
複製代碼
點擊 繼續 按鈕,解鎖 Jenkins。
下載插件
解鎖後就來到了插件下載頁面,這一步要下載一些 Jenkins
的功能插件。
因爲 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
複製代碼
接着點擊 安裝推薦的插件 即可。稍等一會插件安裝完畢
完成安裝
插件安裝完畢後,接着是註冊管理員賬號。
按照提示一路配置後,直到看到以下界面代表安裝成功
測試安裝
到這裏,我們的 Jenkins
算是啓動成功了。但是,我們還需要對 Jenkins
做一點點簡單的配置,纔可以讓它可以構建 docker
鏡像。
我們點擊 Jenkins 首頁
-> 左側導航
-> 新建任務
-> Freestyle project(構建一個自由風格的軟件項目)
新建完畢後,找到 構建 一項,選擇 增加構建步驟,選擇 執行 shell
,輸入以下命令
docker -v
docker pull node:latest
複製代碼
該命令會去拉取一個 nodejs
穩定版的鏡像,我們可以來測試 Docker
的可用性
保存後,我們點擊左側菜單的立即構建, Jenkins
就會開始構建。選擇左側歷史記錄第一項(最新的一項),點擊控制檯輸出,查看構建日誌。
執行後,我們發現提示無訪問權限。這又是什麼情況呢?這裏就不得不提到 Linux 下的 Unix Socket
權限問題了
在 Linux
中, Unix socket
屬於 root
用戶,因此需要 root
權限才能訪問
但是在 docker
中, docker
提供了一個 用戶組 的概念。我們可以將執行 Shell
的用戶添加到名稱爲 docker
的用戶組,則可以正常執行 docker
命令。
而在 Jenkins
中執行的終端用戶做 jenkins
,所以我們只需要將 jenkins
加入到 docker
用戶組即可:
sudo groupadd docker #新增docker用戶組
sudo gpasswd -a jenkins docker #將當前用戶添加至docker用戶組
newgrp docker #更新docker用戶組
複製代碼
加入後,重啓 Jenkins
:
sudo service jenkins restart
複製代碼
重啓 Jenkins
後,再次執行腳本。此時執行成功:
回過頭來查看 docker 鏡像
docker images
複製代碼
會發現多了一個docker
的node
鏡像, 這就是我們通過Jenkins
自動安裝的
進入此docker
鏡像
docker run -it node /bin/bash
複製代碼
做一些配置 (如何做參考前文的說明)
npm
配置淘寶源- 全局安裝
yarn
並配置配置淘寶源
npm config set registry https://registry.npm.taobao.org
npm get registry
# 可能提示已安裝,就不用再安裝了
npm install yarn -g
yarn config set registry http://registry.npm.taobao.org/
yarn config get registry
exit
複製代碼
使用 SSH 協議集成 Git 倉庫源
這一步,我們使用 Jenkins
集成外部 Git
倉庫,實現對真實代碼的拉取和構建。在這裏,我們選用 Gitee
(Github 太慢了 🤧) 作爲我們的代碼源。 這裏準備一個 UmiJS 項目來演示構建。
生成公鑰私鑰
首先,我們先來配置公鑰和私鑰。這是 Jenkins
訪問 Git
私有庫的常用認證方式。我們可以使用 ssh-keygen
命令即可生成公鑰私鑰。在本地機器執行生成即可。這裏的郵箱可以換成你自己的郵箱:
ssh-keygen -t rsa -C "642178633@qq.com"
複製代碼
執行後,會遇到第一步驟: Enter file in which to save the key
。
這一步是詢問你要將公鑰私鑰文件放在哪裏。默認是放在 ~/.ssh/id_rsa
下,當然也可以選擇輸入你自己的路徑。一路回車即可。
結束後,你會得到兩個文件。分別是 id_rsa
和 id_rsa.pub
。
其中,id_rsa
是私鑰文件,id_rsa.pub
是對應的公鑰文件。
我們需要在 Git 端配置公鑰,在 Jenkins 端使用私鑰與 Git 進行身份校驗。
在 Gitee 配置公鑰
在 Gitee
中,如果你要配置公鑰有 2 種方式:倉庫公鑰 和 個人公鑰。其中,如果配置了倉庫公鑰,則該公鑰只能對配置的倉庫進行訪問。如果配置了個人公鑰,則賬號下所有私有倉庫都可以訪問。
這裏我們就以配置個人公鑰爲例子。首先打開右上角的設置 ,點擊下面的 設置
=> SSH 公鑰
在下方有個添加公鑰,填入信息即可。
其中的標題爲公鑰標題,這裏可以自定義標題;公鑰則爲剛纔生成的 id_rsa.pub
文件。使用 cat
命令查看下文件內容,將內容填入輸入框並保存。接着去 Jenkins
端配置私鑰
cat ~/.ssh/id_rsa.pub
複製代碼
在 Jenkins 配置私鑰
回到 Jenkins
。在 Jenkins
中,私鑰 / 密碼 等認證信息都是以 憑證 的方式管理的,所以可以做到全局都通用。 我們可以在配置任務時,來添加一個自己的憑證。點擊項目的 配置,依次找到 源碼管理
=> Git
=> Repositories
這裏的 Repository URL
則是我們的倉庫地址, SSH 地址格式爲 git@gitee.com:xxx/xxx.git
。可以從倉庫首頁中的 克隆/下載
=> SSH
中看到
重點是 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)
接着點擊添加按鈕,保存憑證。
保存後,在 Credentials
下拉列表中選擇你添加的憑證。
如果沒有出現紅色無權限提示,則代表身份校驗成功,可以正常訪問。
如果出現下圖的問題,則說明服務器上沒有安裝 Git
安裝結束後,刷新界面就正常了
yum -y install git
複製代碼
構建鏡像
在我們將環境準備就緒後,就可以開始構建鏡像了。不過,我們需要先準備個 DockerFile
纔可以構建鏡像。那什麼是 DockerFile
呢?
編寫 Dockerfile
什麼是 Dockerfile
Dockerfile
是一個 Docker
鏡像的基礎描述文件,裏面描述了生成一個鏡像所需要的執行步驟。我們也可以自定義一份 Dockerfile
來創建一個自己的鏡像。
例如下面的步驟,使用 Dockerfile
可描述爲:
- 基於
nginx:1.15
鏡像做底座。 - 拷貝本地
html
文件夾內的文件,到鏡像內/etc/nginx/html
文件夾。 - 拷貝本地
conf
文件夾內的文件,到鏡像內/etc/nginx/
文件夾。
FROM nginx:1.15-alpine
COPY html /etc/nginx/html
COPY conf /etc/nginx/
WORKDIR /etc/nginx/html
複製代碼
編寫完成後,怎麼生成鏡像呢?我們只需要使用 docker build
命令就可以構建一個鏡像了:
docker build -t imagename:version .
複製代碼
-t
: 聲明要打一個鏡像的 Tag 標籤,緊跟着的後面就是標籤。
標籤格式爲 鏡像名:版本 .
:聲明要尋找dockerfile
文件的路徑. .
代表當前路徑下尋找。默認文件名爲 Dockerfile
。
關於更多 DockerFile
的語法,詳細可以看這裏
因爲我們的鏡像只包含一個 nginx
,所以 dockerfile
內容比較簡單。我們只需要在代碼根目錄下新建一個名爲 Dockerfile
的文件,輸入以下內容,並將其提交到代碼庫即可。
vi Dockerfile
FROM nginx:1.15-alpine
COPY html /etc/nginx/html
COPY conf /etc/nginx/
WORKDIR /etc/nginx/html
複製代碼
git add ./Dockerfile
git commit -m "chore: add dockerfile"
git push
複製代碼
Jenkins 端配置
在代碼源和 DockerFile
準備就緒後。在服務器的/data
目錄下新建一個jenkins-shll.sh
腳本文件
touch /data/jenkins-shll.sh
vi /data/jenkins-shll.sh
複製代碼
並加入如下內容
#!/bin/sh -l
yarn
yarn run build
docker build -t jenkins-test .
複製代碼
這裏腳本很簡單,主要是作用是安裝依賴
=> 構建文件
=> 構建鏡像
。
#!/bin/sh -l
的作用是:
如果在服務器中的shell
命令可以執行,但到了jenkins
中卻無法執行,這是因爲jenkins
沒有加載服務器中的全局變量/etc/profile
導致的
最後只需在 Jenkins
端配置下要執行的 Shell
腳本即可。找到項目的配置,依次找到構建
=> Execute shell
。輸入以下腳本:
sh /data/jenkins-shll.sh
複製代碼
手動執行任務
保存後我們去手動觸發執行下任務。當未拋出錯誤時,代表任務執行成功
回過頭來查看 docker
docker images
複製代碼
可以發現,又多了一個名叫jenkins-test
的 docker 鏡像
自動執行任務
安裝插件
安裝 Generic Webhook Trigger Plugin
插件(系統管理
-插件管理
-可用插件
- 搜索 Generic Webhook
)
選中並點擊Install without restart
如果可選插件列表爲空,點擊高級標籤頁,替換升級站點的 URL 爲:http://mirror.xmission.com/jenkins/updates/update-center.json
並且點擊提交和立即獲取。
添加觸發器
Generic Webhook Trigger Plugin
插件功能很強大,可以根據不同的觸發參數觸發不同的構建操作,比如我向遠程倉庫提交的是 master
分支的代碼,就執行代碼部署工作,我向遠程倉庫提交的是某個 feature
分支,就執行單元測試,單元測試通過後合併至 dev
分支。
靈活性很高,可以自定義配置適合自己公司的方案,這裏方便演示我們不做任何條件判斷,只要有push
就觸發。
在任務配置 ->觸發構建起
-> 裏勾選 Generic Webhook Trigger
,然後保存即可
Git 倉庫配置鉤子
此處以碼云爲例,github 的配置基本一致,進入碼雲項目主頁後,點擊管理
-webhooks
-添加
,會跳出一個這樣的框來。
上圖中的 URL 格式爲 http://<User ID>:<API Token>@<Jenkins IP 地址>:端口/generic-webhook-trigger/invoke
下面的幾個選項是你在倉庫執行什麼操作的時候觸發鉤子,這裏默認用 push
。
- 獲取
User ID
進入 jenkin 的系統管理
->管理用戶
界面, 可以看到一個用戶列表。在此列表中就找到User ID
.
- 獲取
API Token
接下來點擊工具圖標
進入詳情界面後找到API Token
->添加新Token
->生成
-> 找個你喜歡的地方將此 token 保存好
- 獲取端口
Jenkins IP 地址
和端口是你部署 jenkins 服務器的 ip 地址,端口號沒改過的話就是 8080
。
- 獲取密碼
密碼
就是你登錄 jenkins 的密碼
點擊提交完成配置。我們還需要測試一下鉤子是否生效
點擊測試
,如果配置是成功的,你的 Jenkins
左側欄構建執行狀態裏將會出現一個任務。
實現郵件提醒 - todo
批量刪除構建歷史
進入系統配置
->腳本命令運行
輸入腳本
# "test"是項目名稱,100是指(0~·100)全刪除,就是構建歷史前面的ID
def jobName = "test"
def maxNumber = 100
Jenkins.instance.getItemByFullName(jobName).builds.findAll {it.number <= maxNumber}.each { it.delete() }
複製代碼
點擊運行
最後
在日常工作中你還使用哪些Centos配置
呢?歡迎在評論區留下的你的見解!
覺得有收穫的朋友歡迎點贊,關注一波!
往期好文
參考文檔
- How To Install Node.js on CentOS 8
- How to Set Up SSH Keys on CentOS 8
- How to configure build tools (Gradle, Yarn) in Jenkins and use them in Jenkinsfile 🛠
- 搭建 Docker 環境
- 搭建 Nginx 靜態網站
- 搭建 Node.js 環境
- 實戰筆記:Jenkins 打造強大的前端自動化工作流
- 從 0 到 1 實現一套 CI/CD 流程
- CentOS8 安裝 MySQL8
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://juejin.cn/post/6951684431597797389