Chan's Sea World

AIGC、摘录、随笔

基于Github Actions构建CI-CD流程

一、基础环境准备

  1. 创建仓库:在GitHub上创建新仓库或使用已有仓库。
  2. 启用Actions:进入仓库「Settings」→「Actions」→「General」,启用Actions并选择允许的分支。
  3. 创建工作流文件:在仓库根目录的.github/workflows目录下新建YAML文件(如ci-cd.yml)。

二、定义工作流结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
name: CI/CD Pipeline  # 工作流名称
on: # 触发条件
push:
branches: [main] # 主分支推送时触发
pull_request:
branches: [main] # 主分支PR时触发
jobs: # 任务列表
build: # 构建任务
runs-on: ubuntu-latest # 运行环境
steps: # 执行步骤
- uses: actions/checkout@v3 # 检出代码
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: Install dependencies
run: pip install -r requirements.txt
test: # 测试任务
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run tests
run: pytest tests/ --cov=src
deploy: # 部署任务(示例为GitHub Pages)
needs: [build, test] # 依赖构建和测试任务
if: github.ref == 'refs/heads/main' # 仅主分支合并时部署
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./dist

三、核心功能实现

  1. 自动化测试

    • 集成测试框架(如Python的pytest、JavaScript的Jest),在test作业中运行测试用例。
    • 示例:pytest tests/ --cov=src --cov-report=xml(生成代码覆盖率报告)。
  2. 代码质量检查

    • 使用flake8/eslint等工具检查代码风格。
    • 示例:flake8 src/ tests/
  3. 自动化部署

    • 部署到GitHub Pages:使用actions-gh-pages Action。
    • 部署到云服务:通过SSH或API调用(需配置密钥)。
    • 示例:twine upload dist/*(发布Python包到PyPI)。

四、高级配置技巧

  1. 矩阵测试:跨多环境/版本并行测试

    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest]
        python-version: [3.8, 3.9]
    steps:
      - uses: actions/setup-python@v4
        with:
          python-version: ${{ matrix.python-version }}
    
  2. 密钥管理

    • 在仓库「Settings」→「Secrets」中存储敏感信息(如API密钥),通过${{ secrets.SECRET_NAME }}引用。
  3. 条件执行

    • 通过if条件控制步骤执行,例如仅在特定分支或事件触发时部署。
    • 示例:if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')(仅标签推送时部署)。
  4. 工件存储

    • 使用actions/upload-artifact保存构建产物,供后续作业使用。
    • 示例:actions/upload-artifact@v3保存dist/目录。

五、最佳实践

  • 分离职责:将构建、测试、部署拆分为独立作业,通过needs定义依赖关系。
  • 缓存优化:缓存依赖包(如npm/pip)以加速构建。
  • 监控与通知:集成GitHub Status Checks或第三方工具(如Slack)接收构建结果通知。

六、验证与调试

  1. 查看工作流日志:在仓库「Actions」标签页中查看运行状态和详细日志。
  2. 手动触发:通过「workflow_dispatch」事件手动运行工作流,方便调试。

通过以上步骤,可快速在GitHub上构建完整的CI/CD流程,实现代码从提交到部署的全流程自动化。

Git仓库配置代理

Git可以为某个仓库配置代理访问,而不影响全局设置,具体方法如下:

  1. 打开终端,使用cd命令进入要配置代理的特定Git仓库目录。例如,如果仓库位于~/my-project,则执行cd ~/my-project

  2. 执行设置代理的命令。设置HTTP代理使用git config http.proxy http://代理服务器地址:端口,设置HTTPS代理使用git config https.proxy https://代理服务器地址:端口。例如,代理服务器地址为127.0.0.1,端口为10809

...

从文艺复兴以来...

《傅雷家书》
从文艺复兴以来,各种古代文化,各种不同民族,各种不同的思想感情大接触之下,造成了近代人的极度复杂的头脑与心情;加上政治经济和社会的急剧变化(如法国大革命,十九世纪的工业革命,封建社会与资本主义社会的交替等等),人的精神状态愈加充满了矛盾。这个矛盾中最尖锐的部分仍然是基督教思想与个人主义的自由独立与自我扩张的对立。凡是非基督徒的矛盾,仅仅反映经济方面的苦闷,其程度决没有那么强烈。——在艺术上表现这种矛盾特别显著的,恐怕要算贝多芬了。以贝多芬与歌德作比较研究,大概更可证实我的假定。贝多芬乐曲中两个主题的对立,决不仅仅从技术要求出发,而主要是反映他内心的双重性。否则,一切sonata form[奏鸣曲式]都以两个对立的motifs[主题]为基础,为何独独在贝多芬的作品中,两个不同的主题会从头至尾斗争得那么厉害,那么凶猛呢?他的两个主题,一个往往代表意志,代表力,
...

语言生活中的词语嬗变

语言是一种符号系统,它无时无刻不在变化,这种细微的变化日积月累,就反映出语言在不同时代的明显差异。作为人类最重要的交际工具,语言的演变与社会和交际息息相关,这也决定了它的变化只能是渐变的,而且各个组成部分的变化速度是不平衡的。词汇因其与社会和交际的联系最直接,进而对社会发展和交际需求的反映最灵敏。本期《语言文字》聚焦词汇的变化,以启迪我们更好地观察和了解社会语言生活。

时代浪潮中,社会的词语运用,在人们不知不觉间悄悄发生了若干变化。考察梳理这些变化,会给我们观察新时代的社会语言生活,带来有益的启示。

先说几项触手可及、不时遇到的新变化:

1.集合名词的个体化

集合名词也叫“总称”,

...