柳嘉希

硕士研究生毕业生

软件工程师 | 可扩展的API · 网络爬虫 · 数据集成 · Vibe代码清理专家

Git、GitHub Actions、Shell 与 Docker:从本地开发到 CI/CD 和容器化

这组工具解决的是工程落地问题:代码怎么协作、怎么自动测试、怎么打包运行、怎么保证环境一致。

Git 工作流

常用命令:

git status
git add .
git commit -m "feat: add login"
git pull
git push
git checkout -b feature/login

常见概念:

  • merge:保留分支合并历史
  • rebase:把提交“搬到”新基底上,历史更线性
  • reset:移动当前分支指针,可能改工作区
  • revert:新增一个反向提交,更适合公共分支

GitHub Actions

workflow 由触发条件和 jobs 组成。

name: CI
 
on:
  push:
  pull_request:
  workflow_dispatch:
 
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm ci
      - run: npm test

常见触发:

  • push
  • pull_request
  • schedule
  • workflow_dispatch

Git Hooks

Git Hooks 是本地钩子,可以在 commit、push 等动作前后执行脚本。

常见用途:

  • commit 前格式化
  • commit 前 lint
  • push 前测试
  • 校验 commit message

Shell 管道和重定向

cat app.log | grep ERROR

管道把左边命令输出交给右边命令。

node script.js > output.txt
node script.js >> output.txt

> 覆盖写入,>> 追加写入。

Docker 核心概念

Image 是镜像,Container 是镜像运行后的实例。

Dockerfile 描述如何构建镜像。

Volume 用于持久化数据。

Network 用于容器通信。

Dockerfile

FROM node:20
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
EXPOSE 3000
CMD ["npm", "run", "start"]

先复制依赖声明再安装依赖,是为了利用 Docker build cache。

docker-compose

docker-compose 用于同时启动多个服务。

services:
  web:
    build: .
    ports:
      - "3000:3000"
  db:
    image: postgres:16
    volumes:
      - db-data:/var/lib/postgresql/data
 
volumes:
  db-data:

它适合本地开发、集成测试和小型部署。