0
点赞
收藏
分享

微信扫一扫

Matlab 2022a 安装教程 附安装包

言午栩 2024-03-17 阅读 18
githubci/cd

一、概述

1.1Github Action介绍

1.2基本概念 

1.3Github Action 的使用限制

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

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

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

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

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

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

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

 相关Github Action文档

1.4工作流程

持续集成

持续交付

持续部署

总结

二、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 固态硬盘空间。
.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

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.找到华为云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 端口
举报

相关推荐

0 条评论