Github Actions實現CI/CD配置

Github Actions

Github ActionsGithub的持續集成服務,點擊Actions在你Github上的項目上建立配置文件,實際也就是保存在.github/workflows下的以.yml結尾的文件。javascript

一、配置文件的基本術語結構

(1)workflow (工做流程):持續集成一次運行的過程,就是一個 workflow。css

(2)job (任務):一個 workflow 由一個或多個 jobs 構成,含義是一次持續集成的運行,能夠完成多個任務。html

(3)step(步驟):每一個 job 由多個 step 構成,一步步完成。java

(4)action (動做):每一個 step 能夠依次執行一個或多個命令(action)。node

二、實例demo,將Github中的項目自動更新到雲服務器

Github存在一個 官方市場,搜索知足你需求的action就能夠了。在 steps配置 uses來引用這個 action的腳本。
name: Blog CI  # 配置名稱

on: # 觸發條件,master分支push代碼後觸發workflow
  push:
    branches: [ master ]

jobs:
  build:
    runs-on: ubuntu-latest # 構建運行環境
    steps:
    - name: Checkout  # 獲取源碼,使用actions/checkout@v2
      uses: actions/checkout@v2

    - name: Install Node.js # 安裝指定Node版本,使用actions/setup-node@v1
      uses: actions/setup-node@v1
      with:
        node-version: '12.x'

    - name: Install & Build # 安裝依賴打包靜態資源
      run: |
        yarn config set registry https://registry.npm.taobao.org 
        yarn install
        yarn build

    - name: Deploy to Server # 部署到雲服務器,使用easingthemes/ssh-deploy@v2.1.1,經過ssh的方式鏈接
      uses: easingthemes/ssh-deploy@v2.1.1
      env:
          SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}  # 私鑰,公鑰拷貝到服務器在/root/.ssh/authorized_keys中中

          ARGS: ${{ secrets.ARGS }} # 對於任何初始/必需的rsync標誌,默認-avzr --delete,若是目錄下有其餘不可刪除文件或文件夾能夠用--exclude忽略,如--exclude /uploads/   
          SOURCE: "build/" # 源目錄
          REMOTE_HOST: ${{ secrets.REMOTE_HOST }} # 服務器地址
          REMOTE_PORT: ${{ secrets.REMOTE_PORT }} # ssh鏈接端口號
          REMOTE_USER: root # 鏈接用戶名
          TARGET: ${{ secrets.REMOTE_TARGET }} # 目標部署目錄

三、敏感數據配置

由於部署到雲服務器須要身份驗證,相應的敏感數據不能直接暴露,Github中能夠在項目setting中的Secrets設置相應的環境變量,而後經過${{}}的語法就能夠訪問相應的變量了。nginx

Nginx的安裝與配置

由於個人服務器使用了Nginx這裏簡單作些記錄git

Nginx是一個高性能的HTTP和反向代理web服務器,平時應用場景能夠做爲反向代理服務器,靜態資源服務器,負載均衡等功能。安裝使用以Linux爲例,Windows和Mac能夠直接下載安裝包。

一、安裝

yum install nginx -y # Centos 7.x直接使用yum安裝便可

二、相關文件夾

使用rpm -ql nginx查看Nginx主要安裝在什麼地方,/etc/nginx/nginx.conf對應Nginx的主配置文件。github

三、經常使用操做命令

nginx -s reload  # 向主進程發送信號,從新加載配置文件,熱重啓
nginx -s reopen     # 重啓 Nginx
nginx -s stop    # 快速關閉
nginx -s quit    # 等待工做進程處理完成後關閉
nginx -T         # 查看當前 Nginx 最終的配置

systemctl enable nginx  # 使用系統管理命令設置Nginx開機啓動

四、經常使用配置

4.1 首先看下主配置文件/etc/nginx/nginx.conf的 基本結構。

main        # 全局配置,對全局生效
├── events  # Nginx服務器相關連接配置
|   ├── worker_connections 1024;# 默認最大併發鏈接數
├── http    # 配置代理,緩存,日誌定義等絕大多數功能和第三方模塊的配置
│   ├── upstream # 配置後端服務器具體地址,能夠配置多個,也是負載均衡配置的地方
│   ├── server   # 配置虛擬主機的相關參數,一個 http 塊中能夠有多個 server 塊
│   ├── server
│   │   ├── location  # 每一個server能夠包含多個location塊,location用於匹配相應的uri
│   │   ├── location
│   │   └── ...
│   └── ...
└── ...

4.2 一個相對完整的配置demo

#   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/doc/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 www.example.com # 服務地址;
        rewrite ^(.*)$  https://$host$1 # $host$1變量對應上面的服務地址,配置了https訪問時就重定向到https的地址;  
    }
    
# Settings for a TLS enabled server.

    server {
        listen       443 ssl http2 default_server;
        listen       [::]:443 ssl http2 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        #ssl證書配置
        ssl_certificate /etc/nginx/Nginx/ssl.crt; # 證書地址
        ssl_certificate_key /etc/nginx/Nginx/ssl.key; # 證書私鑰
           ssl_session_timeout 10m;
        ssl_session_cache shared:SSL:1m;
        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 / {
            root /home/dist # 靜態資源地址;
            index index.html;
            try_files  $uri $uri/ /index.html @rewrites; # 單頁面history模式下的路由配置
        }

        # 其餘靜態資源、公共資源目錄
        location /public {
          alias           /home/public;  # 靜態資源目錄
          autoindex             on;   # 開啓靜態資源列目錄
          autoindex_exact_size  off;  # on(默認)顯示文件的確切大小,單位是byte;off顯示文件大概大小,單位KB、MB、GB
          autoindex_localtime   off;   # off(默認)時顯示的文件時間爲GMT時間;on顯示的文件時間爲服務器時間
       }

        location ~ /api/ {
          proxy_pass http://www.example.com:8080; # 相應接口轉發的uri
       }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
}

4.3 其它配置

/etc/nginx/conf.d目錄下增長Gzip的配置web

gzip on; # 默認off,是否開啓gzip
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

gzip_static on; # 默認off,開啓後會檢查.gz結尾的壓縮文件
gzip_proxied any; # 默認off,控制從代理服務器上接受壓縮資源
gzip_vary on; # 響應頭中增長 `Vary: Accept-Encoding`
gzip_comp_level 6; # gzip壓縮比,壓縮級別是1-9,1壓縮級別最低,9最高,級別越高壓縮率越大,壓縮時間越長,建議4-6
gzip_buffers 16 8k; # 獲取多少內存用於緩存壓縮結果,16 8k 表示以 8k*16爲單位得到
gzip_min_length 1k; # 容許須要壓縮的最小資源大小
gzip_http_version 1.1; # 默認1.1,開啓Gzip所需的最低HTTP版本
參考
相關文章
相關標籤/搜索