GitHub Actions持续部署

一、概述

1.1Github Action介绍

 什么是Github Action ?

GitHub Actions是GitHub提供的CI/CD(持续集成/持续部署)服务。它允许你在GitHub仓库中自动化、定制和执行你的软件开发工作流。你可以发现、创建和分享用于执行任何你想要的工作的操作,包括CI/CD,并在完全定制的工作流中组合操作。 


它可以帮助你通过自动化的构建(包括编译、发布、自动化测试)来验证你的代码,从而尽快地发现集成错误。github于2019年11月后对该功能全面开放,现在所有的github用户可以直接使用该功能。GitHub 提供 Linux、Windows 和 macOS 虚拟机来运行您的工作流程,或者您可以在自己的数据中心或云基础架构中托管自己的自托管运行器。在使用Github Action之前首先需要了解以下前置知识:

  • 持续集成/持续交付的概念。
  • Git相关知识。
  • Linux或Windows或macOS脚本相关知识。
  • Yaml基础语法。

1.2基本概念 

  • workflow: 一个 workflow 就是一个完整的工作流过程,每个workflow 包含一组 jobs任务。
  • job : jobs任务包含一个或多个job ,每个 job包含一系列的 steps 步骤。
  • step : 每个 step 步骤可以执行指令或者使用一个 action 动作。
  • action : 每个 action 动作就是一个通用的基本单元。

1.3Github Action 的使用限制

在使用免费版本的Github Action是有如下限制的:

  • 作业执行时间 - 工作流中的每个作业最多可以运行 6 小时的执行时间。如果作业达到此限制,该作业将终止且无法完成。

  • 工作流运行时间 - 每个工作流运行限制为 35 天。如果工作流运行达到此限制,则工作流运行将被取消。此时间段包括执行持续时间以及等待和批准所花费的时间。

  • API 请求 - 您可以在一小时内跨存储库中的所有操作执行多达 1000 个 API 请求。如果超出此限制,其他 API 调用将失败,这可能会导致作业失败。

  • 并发作业 - 可以在帐户中运行的并发作业数取决于 GitHub 计划,如下表所示。如果超出,则任何其他作业都将排队。

  • 作业矩阵 - 作业矩阵每次工作流运行最多可以生成 256 个作业。此限制适用于 GitHub 托管和自托管的运行程序。

  • 工作流运行队列 - 每个存储库的排队时间间隔不超过 500 个工作流运行,间隔为 10 秒。如果工作流运行达到此限制,则工作流运行将终止且无法完成。

 相关Github Action文档

1.4工作流程

持续集成

GitHub Actions 可以用于实现持续集成(Continuous Integration,简称 CI)。持续集成是一种开发实践,开发人员会频繁地(比如每天)将代码集成到主分支。每次集成都通过自动化的构建(包括编译、发布、自动化测试)来验证,从而尽早地发现集成错误。 

持续交付

要使用 GitHub Actions 进行持续交付,你需要创建一个名为 .github/workflows 的目录,并在其中添加一个 YAML 文件来定义你的工作流程。

持续部署

总结

二、GitHubAction的使用

持续集成流程

1.开启github共享项目

2.在项目库根路径下的.github/workflows目录中创建一个.yml 文件(或者 .yaml)

name: Java CI with Maven  # 工作流程的名称

on:  # 触发工作流程的事件
  push:  # 当有新的推送到以下分支时
    branches: [ "master" ]  # master分支
  pull_request:  # 当有新的拉取请求到以下分支时
    branches: [ "master" ]  # master分支

jobs:  # 工作流程中的任务
  build:  # 任务的名称

    runs-on: ubuntu-latest  # 任务运行的环境,这里是最新版本的Ubuntu

    steps:  # 任务中的步骤
    - uses: actions/checkout@v3  # 使用actions/checkout@v3来检出仓库代码
    - name: Set up JDK 17  # 步骤的名称,这里是设置JDK 17
      uses: actions/setup-java@v3  # 使用actions/setup-java@v3来设置JDK
      with:  # 步骤的参数
        java-version: '17'  # JDK的版本
        distribution: 'temurin'  # JDK的发行版
        cache: maven  # 缓存Maven依赖
    - name: Build with Maven  # 步骤的名称,这里是使用Maven构建项目
      run: mvn -B package --file pom.xml  # 运行Maven命令来构建项目

    # Optional: Uploads the full dependency graph to GitHub to improve the quality of Dependabot alerts this repository can receive
    - name: Update dependency graph  # 步骤的名称,这里是更新依赖图
      uses: advanced-security/maven-dependency-submission-action@571e99aab1055c2e71a1e2309b9691de18d6b7d6  # 使用advanced-security/maven-dependency-submission-action来提交依赖图

3.推到开发分支

4../github/workflows/拉回本地,修改后并重新推送

原理概述

name

Workflow的名字,随便可以设置,就是工作流的名字。如果省略该字段,默认为当前 workflow 的文件名。

name: hello-github-actions

on

触发的事件,可以是一个事件数组。
在代码仓库Push时触发:

#push时触发
on: push

可以用数组指定多个条件触发:

#push和merge时触发
on: [push, merge]

还可以对条件进行限制触发:

#当master分支push时触发,可以限定分支或标签。
on:
  push:
    branches:
      - master

完整的事件列表,请查看官方文档。除了代码库事件,GitHub Actions 也支持外部事件触发,或者定时运行。

jobs

job

jobs表示要执行的一项或多项任务。jobs可以包含一个或多个job,一个job就是一个任务,这个任务可以包含多个步骤(steps):

jobs:
  job1:
    ...
  job2:
    ...     

需要注意的是每一个Job都是并发执行的并不是按照申明的先后顺序执行的, 如果多个job 之间存在依赖关系,那么你可能需要使用 needs :

jobs:
  job1:
  
  job2:
    needs: job1
  
  job3:
    needs: [job1, job2]

这里的needs声明了job2 必须等待 job1 成功完成,job3必须等待 job1 和 job2依次成功完成。因此,这个 workflow 的运行顺序依次为:job1、job2、job3。needs字段指定当前任务的依赖关系,即运行顺序。 

job->runs-on

runs-on字段指定运行所需要的虚拟机环境。它是必填字段,目前可用的虚拟机如下:

  • ubuntu-latest,ubuntu-18.04或ubuntu-16.04。
  • windows-latest,windows-2019或windows-2016。
  • macOS-latest或macOS-10.14。
    指定job的运行环境:
jobs:
  job1:
    runs-on: ubuntu-18.04
  job2:
    runs-on: macos-10.15
  job3:
    runs-on: windows-2019    

github 会提供一个配置很不错的服务器做为 runner,Windows 和 Linux 虚拟机的硬件规格:

  • 2 核处理器。
  • 7 GB 内存。
  • 14 GB 固态硬盘空间。

macOS 虚拟机的硬件规格:

  • 3 核处理器。
  • 14 GB 内存。
  • 14 GB 固态硬盘空间。

如果你有网络时延的需求,(比如推送及拉取镜像时产生的网络时延),你也可以自建runner 。

.job->env

使用env可以给该任务或者是步骤配置环境变量:

 env:
   name: "zhangsan"
 run: |
   echo $name

环境变量可以配置在以下地方:

  • jobs->job->env
  • jobs->job->steps.env
job->steps

steps字段指定每个 Job 的运行步骤,每个job由多个step构成,它会从上至下依次执行。steps可以包含一个或多个步骤,每个 step 步骤可以有:

  • name:步骤名称,步骤的名称。
  • env:该步骤所需的环境变量。
  • id : 每个步骤的唯一标识符
  • uses : 使用哪个action,这个表示使用别人预先设置好的Actions,比如因为我代码中要用到python,所以就用了actions/setup-python@v1来设置python环境,不用我自己设置了。
  • with: 指定某个action 可能需要输入的参数。
  • run: 执行哪些指令,具体运行什么命令行代码。
  • continue-on-error : 设置为 true 允许此步骤失败job 仍然通过。
  • timeout-minutes : step 的超时时间。

例如:

    steps:  # 任务中的步骤
    - uses: actions/checkout@v3  # 使用actions/checkout@v3来检出仓库代码
    - name: Set up JDK 17  # 步骤的名称,这里是设置JDK 17
      uses: actions/setup-java@v3  # 使用actions/setup-java@v3来设置JDK
      with:  # 步骤的参数
        java-version: '17'  # JDK的版本
        distribution: 'temurin'  # JDK的发行版
        cache: maven  # 缓存Maven依赖
    - name: Build with Maven  # 步骤的名称,这里是使用Maven构建项目
      run: mvn -B package --file pom.xml  # 运行Maven命令来构建项目

Action

Github Actions 是GitHub的持续集成服务。持续集成由很多操作组成,比如登录远程服务器,发布内容到第三方服务等等,这些相同的操作完全可以提取出来制作成脚本供所有人使用。GitHub允许开发者把每个操作写成独立的脚本文件,存放到代码仓库,使得其他开发者可以引用该脚本,这个脚本就是一个Action。如果你需要某种功能的Action可以从GitHub社区共享的action官方市场查找,也可以自己编程Action开源出来供大家使用。既然 actions 是代码仓库,当然就有版本的概念,用户可以引用某个具体版本的 action。 下面都是合法的 action 引用:

actions/setup-node@74bc508 # 指向一个 commit
actions/setup-node@v1.0    # 指向一个标签
actions/setup-node@master  # 指向一个分支

GitHub Actions 中使用密文

在持续集成的过程中,我们可能会使用到自己的敏感数据,这些数据不应该被开源并泄露。那么如何才能安全的使用这些敏感数据呢?GithubActions提供了Secrets变量来实现这一效果。我们可以在 github repo 上依次点击 Settings -> Secrets-> Actions->New repository secret创建一个敏感数据例如:OSS_KEY_ID,OSS_KEY_SECRET, 然后我们就可以在GithubAction脚本中使用这一变量了:

-  name:  setup  aliyun  oss
    uses:  manyuanrong/setup-ossutil@master
    with:
        endpoint:  oss-cn-beijing.aliyuncs.com
        access-key-id:  ${{  secrets.OSS_KEY_ID  }}
        access-key-secret:  ${{  secrets.OSS_KEY_SECRET  }}

这里的secret就是一种context,描述 CI/CD 一个workflow 中的上下文信息,使用${{ expression }}语法表示。更多context信息可以参考官方文档

问题解决

报403Resource not accessible by integration

参考解决方案

快速解决 Resource not accessible by integration

报404"The Dependency graph is disabled for this repository. Please enable it before submitting snapshots.",

这个错误信息表示你正在尝试提交依赖关系快照,但是这个仓库的依赖关系图已经被禁用了。你需要先启用它,然后再提交快照。

你可以按照以下步骤来启用仓库的依赖关系图:

1. 打开你的 GitHub 仓库。
2. 点击仓库的 "Settings"(设置)选项卡。
3. 在左侧的导航栏中,点击 "Security & analysis"(安全与分析)。
4. 在 "Dependency graph"(依赖关系图)部分,点击 "Enable"(启用)。

完成以上步骤后,你应该就可以提交依赖关系快照了。如果问题仍然存在,你可能需要联系 GitHub 的支持团队以获取更多的帮助。

持续交付流程

 1.找到华为云docker登录指令

2。隐私数据处理

3.设置docker

      name: docker push
      run: |
        ${{ secrets.HUAWEI_DOCKERLOGIN }}
        docker build . -t ${{ secrets.HUAWEI_DOCKERREPOSITORY }}
        docker push ${{ secrets.HUAWEI_DOCKERREPOSITORY }}

 4.推送

持续部署流程

deploy:  # 定义一个名为 "deploy" 的工作
  needs: [build]  # 这个工作需要在 "build" 工作完成后才能开始
  runs-on: ubuntu-latest  # 这个工作将在最新版本的 Ubuntu 虚拟环境中运行
  steps:  # 定义这个工作的步骤
    - name: deploy  # 定义一个名为 "deploy" 的步骤
      uses: appleboy/ssh-action@master  # 使用 appleboy/ssh-action 这个 GitHub Action
      with:  # 为这个 Action 提供参数
        host: ${{ secrets.HUAWEI_HOST }}  # SSH 主机地址
        username: ${{ secrets.HUAWEI_USERNAME }}  # SSH 用户名
        password: ${{ secrets.HUAWEI_PWD }}  # SSH 密码
        script: |  # 要在 SSH 会话中执行的脚本
          ${{ secrets.HUAWEI_DOCKERLOGIN }}  # 登录到 Docker
          docker stop $(docker ps --filter ancestor=${{ secrets.HUAWEI_DOCKERREPOSITORY }} -q)  # 停止所有使用指定 Docker 镜像的容器
          docker rm -v $(docker ps --filter ancestor=${{ secrets.HUAWEI_DOCKERREPOSITORY }} -q)  # 删除这些容器
          docker rmi -f $(docker images ${{ secrets.HUAWEI_DOCKERREPOSITORY }} -q)  # 删除指定的 Docker 镜像
          docker pull ${{ secrets.HUAWEI_DOCKERREPOSITORY }}  # 从 Docker 仓库拉取最新的镜像
          docker run -d -p 3080:8080 ${{ secrets.HUAWEI_DOCKERREPOSITORY }}  # 运行新的 Docker 容器,将容器的 8080 端口映射到主机的 3080 端口

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/462816.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

媒体发稿:澳门媒体发稿7个流程

推广平台澳门是一个重要的度假旅游娱乐终点,都是媒体领域热议的话题。对于澳门的媒体发稿营销推广要求,大家提供了一个简单易用的套餐系统软件,帮助大家在澳门媒体上发表推广文章。下面我们就根据7个阶段,详解构建这一套餐推广平台…

Vue+SpringBoot打造教学过程管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 教师端2.2 学生端2.3 微信小程序端2.3.1 教师功能如下2.3.2 学生功能如下 三、系统展示 四、核心代码4.1 查询签到4.2 签到4.3 查询任务4.4 查询课程4.5 生成课程成绩 六、免责说明 一、摘要 1.1 项目介绍 基于JAVAVu…

CentOS Stream9更改ip地址,网关(设置静态ip)

使用grep命令查询ens160文件所在的文件夹处 grep -rnw /etc -e ens160 然后用vi命令打开文件进行修改 vi /etc/NetworkManager/system-connections/ens160.nmconnection 配置: 假设将ip地址改为192.168.200.130 [connection] idens33 uuid0050f214-01a7-395e-…

数据分析-Pandas雷达图的多维数据可视化

数据分析-Pandas雷达图的多维数据可视化 数据分析和处理中,难免会遇到各种数据,那么数据呈现怎样的规律呢?不管金融数据,风控数据,营销数据等等,莫不如此。如何通过图示展示数据的规律? 数据表…

【jeecgboot】微服务实战LISM

目录 一、服务解决方案-Spring Cloud Alibaba1.1选用原因(基于Spring Cloud Alibaba的试用场景)1.2 核心组件使用前期规划 部署 nacos部署 mino使用JavaFreemarker模板引擎,根据XML模板文件生成Word文档使用JavaFlowable 工作流引擎前端 -vue…

maven工程,未被idea识别为maven工程怎么办?

示例:以下工程的pom文件图标不是一个蓝色的m,所以未被识别为maven工程。 解决办法:打开pom.xml文件—>右键—>add as maven project 问题解决:

服务器机器学习环境搭建(包括AanConda的安装和Pytorch的安装)

服务器机器学习环境搭建 1 服务器与用户 在学校中,我们在学校中是以用户的身份进行访问学校的服务器的。整体框架大致如下: 我们与root用户共享服务器的一些资源,比如显卡驱动,Cuda以及一些其他的公共软件。 一般情况下&#…

pta-猜帽子游戏

宝宝们在一起玩一个猜帽子游戏。每人头上被扣了一顶帽子,有的是黑色的,有的是黄色的。每个人可以看到别人头上的帽子,但是看不到自己的。游戏开始后,每个人可以猜自己头上的帽子是什么颜色,或者可以弃权不猜。如果没有…

Spring整合RabbitMQ

需求&#xff1a;使用Spring整合RabbitMQ 步骤&#xff1a; 生产者 1.创建生产者工程 2.添加依赖 3.配置整合 4.编写代码发送消息 消费者步骤相同 生产者 导入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://…

antd5 虚拟列表原理(rc-virtual-list)

github:https://github.com/react-component/virtual-list rc-virtual-list 版本 3.11.4(2024-02-01) 版本&#xff1a;virtual-list-3.11.4 Development npm install npm start open http://localhost:8000/List 组件接收 Props PropDescriptionTypeDefaultchildrenRender …

【计算机网络】https的工作原理以及和http的区别

目录 前言 1. HTTP协议存在的问题 2. 什么是HTTPS协议&#xff1f; 3. HTTP和HTTPS有哪些区别&#xff1f; 4. HTTPS的工作原理 加密方式 前言 在日常的Web项目练习中&#xff0c;我们会发现老师会让我们在打开服务器之后使用 http://localhost/...进行项目效果测试和预览…

OpenCV C++ 图像处理实战 ——《物体数量计数与尺寸测量》

OpenCV C++ 图像处理实战 ——《物体数量计数与尺寸测量》 一、结果演示二、多尺度自适应Gamma矫正的低照度图像增强三、轮廓计算与尺寸测量3.1 图像二值化3.2 轮廓提取3.3 物体计数与尺寸测量四、源码测试图像下载总结一、结果演示 二、多尺度自

1.实用Qt:解决绘制圆角边框时,圆角锯齿问题

目录 问题描述 解决方案 方案1&#xff1a; 方案2&#xff1a; 结果示意图 问题描述 做UI的时候&#xff0c;我们很多时候需要给绘制一个圆角边框&#xff0c;初识Qt绘制的童鞋&#xff0c;可能绘制出来的圆角边框很是锯齿&#xff0c;而且粗细不均匀&#xff0c;如下图&…

开环端到端自动驾驶: 到底行不行

开环端到端自动驾驶&#xff1a; 到底行不行 附赠全面专业的自动驾驶学习资料&#xff1a;直达链接 TLDR: 别在nuScenes上做开环端到端自动驾驶刷点了。 论文&#xff1a; https://arxiv.org/pdf/2312.03031.pdf github: https://github.com/NVlabs/BEV-Planner 前言 Uni…

idea中database的一些用法

1、查看表结构 方法1&#xff0c;右键&#xff0c;选这个 方法2 双击表后&#xff0c;看到数据&#xff0c;点DDL 方法3 写SQL时&#xff0c;把鼠标放在表名上&#xff0c;可以快速查看表结构 2、表生成对应的实体类 表中右键&#xff0c;选择这2个&#xff0c;选择生成的路…

物联网 3.15日 | 2024年中国七大 IoT 物联网云平台价格对比

随着 中国电信天翼 CTWing 物联网平台正式开始收费&#xff0c;国内物联网平台云产品发展进入成熟期&#xff0c;越来越多企业选择云厂商提供的物联网PaaS服务&#xff0c;以降低运营成本&#xff0c;缩短业务上线周期&#xff0c;释放运维的人力&#xff0c;按需付费动态扩容。…

2024 第一届VCTF 纳新赛 Web方向 题解WP

hackjs 题目描述&#xff1a;A baby oldjs, just warm up. 附件给源码 const express require(express) const fs require(fs) var bodyParser require(body-parser); const app express() app.use(bodyParser.urlencoded({extended: true })); app.use(bodyParser.json…

安装python、pycharm,打好基础,准备飞起

python安装使用 安装python安装包 以下为自定义安装python安装包&#xff0c;无特殊要求可直接进行安装。 勾选Add Python 3.6 to PATH&#xff0c; 然后点击 Customize installation&#xff0c;进行自定义安装。 所有的都勾上&#xff0c;然后点击Next。 可选择自己需要…

【算法杂货铺】模拟

目录 &#x1f308;前言&#x1f308; &#x1f4c1;1576. 替换所有的问号​编辑 &#x1f4c1; 495. 提莫攻击 &#x1f4c1; 6. Z 字形变换 &#x1f4c1;38. 外观数列 &#x1f4c1;1419. 数青蛙 &#x1f4c1; 总结 &#x1f308;前言&#x1f308; 欢迎观看本期【算…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Stack)

堆叠容器&#xff0c;子组件按照顺序依次入栈&#xff0c;后一个子组件覆盖前一个子组件。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 可以包含子组件。 接口 Stack(value?: { ali…
最新文章