1-1 介绍
服务端 CI/CD流程–让 github 自动化为我们服务
CI: Continuous Integration 持续集成 CD: Continuous Delivery 持续交付 合理全面的 CI/CD,自动化研发流程,提高研发效率,增加系统稳定性
收获
关键词
链接:CI/CD 介绍
这一章双越讲的真的不知道讲了个啥,自己课下补吧,真是一塌糊涂。 github actions 的学习确实很有必要啊,回头等学习完毕再来吐槽。 学习阮一峰大哥的这节文档:http://www.ruanyifeng.com/blog/2019/09/getting-started-with-github-actions.html
第二遍视频笔记记录如下 2-1 章介绍
2-2 认识 Github actions
2-3 Github actions 功能演示
2-4 Github actions 做自动化测试 新建 yml 文件
name: test
on:
push:
branches:
- master
paths:
- '.github/workflows/**'
- '__test__/**'
- 'src/**'
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Use Node.js
uses: actions/setup-node@v1
with:
node-version: 14
- name: lint and test
run: |
npm i
npm run lint
npm run test:remote
本节讲 Github actions 做自动测试
主要自动测试命令为 npm run lint 和 npm run test:remote(补充:checkout 与setup-node 是 actions 仓库比较常用的两个 actions,分别表示下载代码和安装 node)
pre-commit 执行本地接口测试(我的遗留问题:关于 pre-commit 部分)
master push 远程接口测试
测试 「测试部署机」部署完毕
关于 branches 分支的一些注意说明
还是那个疑问,为什么不整个与课程同步的代码仓库?这个对学员来说究竟是不是必要的?
经过笨拙的尝试,终于成功。
2-5 Github actions 章总结
没说什么新的内容
3-1 Docker 章介绍 Docker
基于 Docker,我们可以把开发、测试环境,一键部署到任何一台机器上。只要该机器安装了 Docker。 有了 Docker,就有了一切。
主要产出
使用 Docker 构建 nodejs 项目
主要内容
认识 Dcoker Dockerfile
注意事项
专业的运维工程师对 Docker还有更全面的应用:弹性扩展、微服务等。
3-2 认识 Docker 介绍
Docker 就是一种虚拟机技术,比传统虚拟机(VMware、virtualBox)更加简单、轻量
查找 docker 安装镜像
3-3 启动一个Docker容器
image镜像
container
3-4 Docker容器的进一步演示 功能演示
docker run -p 81:80 -d --name nginx1 nginx
docker ps
# 访问 localhost:81 ,并查看 log
docker exec -it <container-id> /bin/sh
cd /usr/share/nginx/html
echo hello docker world index.html
exit
# 重新访问 localhost:81 ,强制刷新
docker stop <container-id>
docker rm <container-id>
# 1. 新建 /Users/wfp/html/index.html ,内容自定义即可
# 2. 运行
docker run -p 81:80 -v=/Users/wfp/html:/usr/share/nginx/html -d --name nginx1 nginx
# 3. 访问 重新访问 localhost:81 ,看是否你创建的页面?
3-5 介绍 Dockerfile 语法
一个简单的配置文件,描述如何构建一个新的 image 镜像 注意:必须是 Dockerfile 这个文件名,必须在项目的根目录
# Dockerfile
FROM node:latest
WORKDIR /app
COPY . /app
# 设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
#安装
RUN npm set registry https://registry.npm.taobao.org
RUN npm install
#启动
CMD echo #SERVER_NAME &&echo &AUTHOR_NAME && npm run dev && npx pm2 log
#环境变量
ENV SERVER_NAME ="test"
ENV AUTHOR_NAME ="liugezhou"
3-6 用 Dockerfile 构建镜像 构建
docker build -t . #最后的’.'指 Dockerfile 在当前目录下。 docker images
课程修改代码为(去掉routes/index.js的数据库连接以及bin/www中的数据库同步):
# Dockerfile
FROM node:14
WORKDIR /app
COPY . /app
# 设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Beijing /etc/localtime && echo 'Asia/Beijing' >/etc/timezone
#安装
RUN npm set registry https://registry.npm.taobao.org
RUN npm install
#启动
CMD echo $SERVER_NAME && echo $AUTHOR_NAME && npm run dev && npx pm2 log
#环境变量
ENV SERVER_NAME="lego-node-server"
ENV AUTHOR_NAME="liugezhou"
// 步骤一:构建
docker build -t liugezhou-server . # name为将要构建镜像的名字,. 为当前目录
// 步骤二:查看
docker images
//步骤三:启动
docker run -p 8081:3000 -d --name server1 liugezhou-server # 创建容器,注意端口映射
//步骤四:查看启动状态
docker ps
// 步骤五 查看容器日志
docker logs <container-id> # 需等待构建完成
# 访问 localhost:8081/api/db-check ,查看 docker logs
docker stop <container-id>
docker rm <container-id>
docker rmi <image-id>
4-1 docker-compose 章开始
用的来说就是 Docker-compse就是一种组合,这章学到的内容就是这个英文单词的翻译。
4-2 docker-compose 配置文件
version: '3'
services:
editor-server: # service name
build:
context: . # 当前目录
dockerfile: Dockerfile # 基于 Dockerfile 构建
image: editor-server # 依赖于当前 Dockerfile 创建出来的镜像
container_name: editor-server
ports:
- 8081:3000 # 宿主机通过 8081 访问
editor-redis: # service name,重要!
image: redis # 引用官网 redis 镜像
container_name: editor-redis
ports:
# 宿主机,可以用 127.0.0.1:6378 即可连接容器中的数据库 `redis-cli -h 127.0.0.1 -p 6378`
# 但是,其他 docker 容器不能,因为此时 127.0.0.1 是 docker 容器本身,而不是宿主机
- 6378:6379
environment:
- TZ=Asia/Shanghai # 设置时区
4-3 docker-compose 命令演示
4-4 数据持久化 连接mysql和mongodb
区别:
volumes:
4-5 配置 mysql
version: '3'
services:
editor-server:
build:
context: .
dockerfile: Dockerfile
image: editor-server # 依赖于当前 Dockerfile 创建镜像
container_name: editor-server
ports:
- 8081:3000 # 宿主机通过 8081 访问
editor-redis:
image: redis # 引用官网 redis 镜像
container_name: editor-redis
ports:
- 6378:6379 # 宿主机可以用 127.0.0.1:6378 即可连接容器中的数据库
environment:
- TZ=Asia/Beijing # 设置时区
editor-mysql:
image: mysql # 引用官网 mysql 镜像
container_name: editor-mysql
restart: always
privileged: true # 高权限,执行下面的 mysql/init
command: --default-authentication-plugin=mysql_native_password # 解决无法远程访问的问题
ports:
- 3305:3306 # 宿主机可以用 127.0.0.1:3305 即可连接容器中的数据库
volumes:
- .docker-volumes/mysql/log:/var/log/mysql # 数据持久化
- .docker-volumes/mysql/data:/var/lib/mysql
- ./mysql/init:/docker-entrypoint-initdb.d/ # 初始化 sql
environment:
- MYSQL_DATABASE=imooc_lego_course # 初始化容器时创建数据库
- MYSQL_ROOT_PASSWORD=liugezhou1205
# - MYSQL_USER=shuangyue #创建 test 用户
# - MYSQL_PASSWORD=shuangyue #设置 test 用户的密码
- TZ=Asia/Beijing # 设置时区
editor-mongo:
image: mongo # 引用官网 mongo 镜像
container_name: editor-mongo
restart: always #出错则重启
volumes:
- '.docker-volumes/mongo/data:/data/db' # 数据持久化
environment:
- MONGO_INITDB_DATABASE=imooc_lego_course
# - MONGO_INITDB_ROOT_USERNAME=root
# - MONGO_INITDB_ROOT_PASSWORD=123456
- TZ=Asia/Beijing # 设置时区
ports:
- '27016:27017' # 宿主机可以用 127.0.0.1:27016 即可连接容器中的数据库
5-2 配置测试机
5-3 自动发布到测试机-讲解配置 5-4 自动发布到测试机-功能演示
# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
# github actions 中文文档 https://docs.github.com/cn/actions/getting-started-with-github-actions
name: deploy for dev
on:
push:
branches:
- 'dev' # 只针对 dev 分支
paths:
- '.github/workflows/*'
# - '__test__/**' # dev 不需要立即测试
- 'src/**'
- 'Dockerfile'
- 'docker-compose.yml'
- 'bin/*'
jobs:
deploy-dev:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: set ssh key # 临时设置 ssh key
run: |
mkdir -p ~/.ssh/
echo "${{secrets.WFP_ID_RSA}}" > ~/.ssh/id_rsa
# secret 在这里配置 https://github.com/imooc-lego/biz-editor-server/settings/secrets
chmod 600 ~/.ssh/id_rsa
ssh-keyscan "182.92.xxx.xxx" >> ~/.ssh/known_hosts
- name: deploy # 部署
run: |
ssh work@182.92.xxx.xxx "
# 【注意】用 work 账号登录,手动创建 /home/work/imooc-lego 目录
# 然后 git clone https://username:password@github.com/imooc-lego/biz-editor-server.git -b dev (私有仓库,使用 github 用户名和密码)
# 记得删除 origin ,否则会暴露 github 密码
cd /home/work/imooc-lego/biz-editor-server;
git remote add origin https://wangfupeng1988:${{secrets.WFP_PASSWORD}}@github.com/imooc-lego/biz-editor-server.git;
git checkout dev;
git pull origin dev; # 重新下载最新代码
git remote remove origin; # 删除 origin ,否则会暴露 github 密码
# 启动 docker
docker-compose build editor-server; # 和 docker-compose.yml service 名字一致
docker-compose up -d;
"
- name: delete ssh key # 删除 ssh key
run: rm -rf ~/.ssh/id_rsa
5-5 自动发布到测试机–章总结
😔