栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

GitHub Actions CI/CD

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

GitHub Actions CI/CD

CI 持续集成

Continuous Integration 持续集成

  • 在CI环境中,开发人员将会频繁地向主干提交代码。这些新提交的代码在最终合并到主干前,需要经过编译和自动化测试流进行验证
  • 持续集成过程中很重视自动化测试验证结果,以保障所有的提交在合并主线之后的质量问题,对可能出现的一些问题进行预警。
  • 优点
    • 通过自动化测试可以提早拿到回归测试的结果,避免将一些问题提交到交付生产中。
    • 发布编译将会更加容易,因为合并之初已经将所有问题都规避了。
    • 减少工作问题切换,研发可以很快获得构建失败的消息,在开始下一个任务之前就可以很快解决。
    • 测试成本大幅降低,你的CI服务器可以在几秒钟之内运行上百条测试。
  • 需要具备的条件
    • 需要一个持续集成服务器,它可以监控代码提交情况,对每个新的提交进行自动化测试
    • 团队需要为每个新功能、代码改进、或者问题修复创建自动化测试用例
    • 需要编写可执行的命令脚本
CD 持续部署

Continuous Deployment 持续部署/持续交付

  • 在CD环境中,通过自动化的构建、测试和部署循环来快速交付高质量的产品。某种程度上代表了一个开发团队工程化的程度,任何修改通过了所有已有的工作流就会直接和客户见面,只有当一个修改在工作流中构建失败才能阻止它部署到产品线。
  • 持续部署是一个很优秀的方式,可以加速与客户的反馈循环,但是会给团队带来压力,因为不再有“发布日”了。开发人员可以专注于构建软件,他们看到他们的修改在他们完成工作后几分钟就上线了。
  • 优点
    • 简化发布流程 每一次提交都会自动部署
    • 能持续查看团队每天发布的代码 及时的进行审查
    • 提交了发布的稳定性 因为每次发布都经过的CI测试
    • 发布频率高 问题能及时发现
  • 需要具备的条件
    • 团队需要在每次部署后及时的测试和发现问题
    • 对团队技术水平有要求 由于发布过于频繁 需要保证每次发布的质量
GitHub Actions

GitHub Actions 帮助您自动完成软件开发周期内的任务。 GitHub Actions 是事件驱动的,意味着您可以在指定事件发生后运行一系列命令。 例如,每次有人为仓库创建拉取请求时,您都可以自动运行命令来执行软件测试脚本。

完成此次内容 您需要准备以下环境
  1. linux系统机器 用来部署服务
  2. docker 运行服务 隔离环境
  3. dockerhub账户 存放和管理镜像
  4. nodejs js运行时
  5. npm js包管理仓库
注册DockerHub账号

DockerHub官网

创建镜像仓储

安装docker

ubuntu机器安装docker官方教程

# 安装docker存储库
sudo apt-get update

# 添加Docker官方的GPG密钥
 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 使用以下命令设置稳定存储库
echo 
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu 
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装 Docker 引擎
 sudo apt-get update
 sudo apt-get install docker-ce docker-ce-cli containerd.io

# 列出您的存储库中可用的版本
apt-cache madison docker-ce

# 安装指定版本 例如5:18.09.1~3-0~ubuntu-xenial
sudo apt-get install docker-ce= docker-ce-cli= containerd.io

# 测试镜像
sudo docker run hello-world

# 查看docker版本
sudo docker --version

安装nodejs

nodejs官方版本列表

# 创建nodejs包目录
mkdir node

# 进入目录安装nodejs压缩包
cd node
wget https://nodejs.org/download/release/v12.18.3/node-v12.22.4-linux-x64.tar.gz

# 解压压缩包
tar -zxvf node-v12.22.4-linux-x64.tar.gz

# 做软连接
ln -s bin/npm   /usr/local/bin/ 
ln -s bin/node   /usr/local/bin/

# 验证版本
npm -v
node -v

配置工作流密钥变量

在这里添加的变量 在后续的github流水线中会被加密

编写github cicd yml文件

actions工作流程相关官方文档

先创建.github/workflows/github.yml文件 用于每次提交时 github工作流读取文件

## 官方文档 https://docs.github.com/cn/actions/learn-github-actions/workflow-syntax-for-github-actions

name: node # 工作流程的名称

on: # 触发工作流程的 GitHub 事件的名称
  push: # 使用单一事件
    branches: # 设置触发的分支
      - master
      - v-*
    tags: # 设置触发的标签
      - v-*

env: # 作业变量
  UBUNTU_USER: ${{ secrets.UBUNTU_USER }} # 登录机器用户名
  UBUNTU_PASS: ${{ secrets.UBUNTU_PASS }} # 登录机器用户密码
  UBUNTU_IP: ${{ secrets.UBUNTU_IP }} # 登录机器ip
  UBUNTU_PORT: ${{ secrets.UBUNTU_PORT }} # 登录机器ip端口
  DOCKER_USER: ${{ secrets.DOCKER_USER }} # docker用户名
  DOCKER_PASS: ${{ secrets.DOCKER_PASS }} # docker用户密码
  DOCKER_HUB_URL: ${{ secrets.DOCKER_HUB_URL }} # dockerhub 地址
  DOCKER_HUB_NAMESPACE: ${{ secrets.DOCKER_HUB_NAMESPACE }} # dockerhub 仓储命名空间
  DOCKER_CONTAINER_ID: ${{ secrets.DOCKER_CONTAINER_ID }} # 容器id
  DOCKER_IMAGE_ID: node-${GITHUB_REF#refs/heads/}-${GITHUB_SHA} # docker镜像id-commit的sha值
  DOCKER_CONTAINER_PORT: 3000 # 容器端口
  LOCAL_PORT: 3000 # 机器端口

jobs: # 工作流作业
  build: # 自定义作业名称
    name: build # 作业显示在 GitHub 上的名称
    runs-on: ubuntu-18.04 # 要运行作业的机器类型
    concurrency: "1" # 并发
    steps: # 作业包含一系列任务
      - uses: actions/checkout@v2 # 选择要作为作业中步骤的一部分运行的操作
      - name: login-docker-setp
        run: |
          docker login -u ${{env.DOCKER_USER}} -p ${{env.DOCKER_PASS}} ${{env.DOCKER_HUB_URL}}
      - name: build-docker-step # 步骤显示在 GitHub 上的名称
        run: |
          docker build -t ${{env.DOCKER_HUB_NAMESPACE}}:${{env.DOCKER_IMAGE_ID}} .
      - name: release-docker-step
        run: |
          docker push ${{env.DOCKER_HUB_NAMESPACE}}:${{env.DOCKER_IMAGE_ID}}

  release:
    needs: [build] # 识别在此作业运行之前必须成功完成的任何作业
    name: release
    runs-on: ubuntu-18.04
    steps:
      - name: release
        uses: appleboy/ssh-action@master
        with:
          host: ${{env.UBUNTU_IP}}
          username: ${{env.UBUNTU_USER}}
          password: ${{env.UBUNTU_PASS}}
          port: ${{env.UBUNTU_PORT}}
          script: |

            sudo docker stop ${{env.DOCKER_CONTAINER_ID}}

            sudo docker rm ${{env.DOCKER_CONTAINER_ID}}

            sudo docker login -u ${{env.DOCKER_USER}} -p ${{env.DOCKER_PASS}} ${{env.DOCKER_HUB_URL}}

            BRANCH_NAME=${{github.ref}}

            DOCKER_IMAGE_ID=node-${BRANCH_NAME#refs/heads/}-${{github.sha}}

            sudo docker pull ${{env.DOCKER_HUB_NAMESPACE}}:${DOCKER_IMAGE_ID}

            sudo docker images

            sudo docker run -d -p ${{env.LOCAL_PORT}}:${{env.DOCKER_CONTAINER_PORT}} --name=${{env.DOCKER_CONTAINER_ID}} ${{env.DOCKER_HUB_NAMESPACE}}:${DOCKER_IMAGE_ID}

            sudo docker ps -a

            free -m
            

push后会触发github的actions工作流 即可完成持续集成和部署




转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/320527.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号