Github: Github actions 自动化工作原理与多workflow创建和部署

2024-03-18 07:44

本文主要是介绍Github: Github actions 自动化工作原理与多workflow创建和部署,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Github actions


1 )概述

  • Github Actions 是Github官方推出的 CI/CD 解决方案
    • https://docs.githu.com/en/actions
  • 优点
    • 自动发布流程可减少发布过程中手动操作成本,大幅提升ci/cd效率,快速实现项目发布上线
  • 缺点
    • 存在较高的技术门槛
    • 需要利用额外服务,会产生技术成本

2 )工作原理

  • Repository 是代码仓库, .github 是特定的目录,里面有一个目录是 workflows
  • workflow 是一个可配置的自动化流程,它可以包含多个jobs
    • 通过在 .github/workflows 添加 .yml 配置文件实现 1个 workflow
    • 一个工程可以包含多个 workflow
    • 参考:https://docs.github.com/cn/actions/learn-github-actions/understanding-github-actions#workflows
  • 在 workflows 下包含了所有 .yml 结尾的文件
    • yaml 是一种标记语言,可读性较好,适合编写配置文件
  • 有多少 yml 文件都会并发执行
  • 每个 workflow 都通过 event 来触发
    • 比如 pull request, push 或 open issue, 也可以自定义事件
    • 如:https://docs.github.com/cn/actions/learn-github-actions/events-that-trigger-workflows
  • 每个 workflow 包含若干 job
    • job 是 workflow 当中一系列的可执行步骤,每个 job 是在同一个 runner 中进行的
    • runner 是指处于 github 的一台特殊的虚拟机,支持各种操作系统
    • 每个步骤或是一个 shell 脚本,亦或是一个可执行的action
    • 每个步骤是按照顺序执行,并且互相依赖
  • 每个 job 包含若干 step, 这里的stop 就是 cmd 或 action
    • 这里 action 就是 一些列 shell 的组合或传参的封装
  • Action 是 github action 中的一个自定义应用,它可以以运行一系列复杂的并且常用的任务
    • 使用 action 可以帮我们减少在 workflow 中写重复代码
    • github 提供了非常多常用的action
    • 可以再这里查阅: https://github.com/marketplace?type=actions
    • 同时,我们也可以写自己的 action

3 )yml 配置示例

  • 在项目目录下新建 .github/workflows 目录, 在里面 新建 test.yml

    name: Github Actions Test
    on: [push]
    jobs:Test:runs-on: ubuntu-lateststeps:- run: echo "hello test"- run: echo "${{ github.event_name }}"
    
  • 可以看到,在里面可以使用环境变量和自定义变量, 同时,类似 jobs 下可定义多个任务,比如 再加一个 Test2

  • 参考:https://docs.github.com/en/actions/learn-github-actions/environment-variables

  • 上面的简单示例可以很明白的看清楚会发生什么

  • 我们把代码提交到github, 在github的action上就会出现一条记录

  • 点进去就可以看到具体运行的 job

多 workflow 演示

  • 在上面 test.yml 同级,新增 test2.yml

    name: Github Actions Test2
    on: [push]
    jobs:Test2:runs-on: ubuntu-lateststeps:- run: echo "hello test2"- run: echo "${{ github.action }}"- run: echo "${{ github.ref }}"- run: echo "${{ github.repository }}"
    
  • 这样,再次提交运行,就可以重新运行这2个 workflow 了

  • 如果没有触发,可能由于提交到真实的主机上,或 workflows 目录或具体配置错误

代码自动化部署

  • 前文描述了 cmd 相关的,也就是 基于 run 来说的,现在我们使用 action 来操作
  • 这里基于action来操作,在 https://github.com/marketplace?type=actions 来查找可用的 action
    • 可以搜索 ssh remote commands
    • 找到 By appleboy 的这个
    • 点击进去可以查看相关文档
    • https://github.com/marketplace/actions/ssh-remote-commands

1 )初步测试

  • .github/workflows/deploy.yml
    name: Deploy xxx-project
    on: [push]
    jobs:Deploy:runs-on: ubuntu-lateststeps:- uses: appleboy/ssh-action@v0.1.7with:host: $ {{ secrets.SSH_HOST }}username: $ {{ secrets.SSH_USER }}password: $ {{ secrets.SSH_PWD }} script_stop: truescript: |ls -altouch test.txtecho "hello deploy" >> test.txtcat test.txt
  • with 下的所有字段在文档上有相关说明
  • 这里,secrets 在 仓库 / Settings / Secrets 中进行配置的
  • 这里,很方便的保护了一些隐私数据
  • 提交后,查看workflow部署情况,并且自己使用 ssh 连入 服务器
  • 查看是否创建了 test.txt,如果一切就绪,则表示准备工作完成

2 )优化脚本

  • ssh 登录 ubuntu 服务器后,默认回到用户目录下面,也就是 ~

  • 我们要重新修改脚本

    name: Deploy xxx-project
    on: [push]
    jobs:Deploy:runs-on: ubuntu-lateststeps:- uses: appleboy/ssh-action@v0.1.7with:host: $ {{ secrets.SSH_HOST }}username: $ {{ secrets.SSH_USER }}password: $ {{ secrets.SSH_PWD }} script_stop: truescript: |cd /root/resource/nginx/ls -larm -rf 带部署项目目录git clone git@github.com:某用户/某仓库.git -b $ {{ github.ref_name }}cd 某仓库目录npm installnpm run build
    
  • 这样,基于此,将中文替换成自己的项目相关名称,即可完成一个前端项目的部署

这篇关于Github: Github actions 自动化工作原理与多workflow创建和部署的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/821658

相关文章

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

SpringBoot配置Ollama实现本地部署DeepSeek

《SpringBoot配置Ollama实现本地部署DeepSeek》本文主要介绍了在本地环境中使用Ollama配置DeepSeek模型,并在IntelliJIDEA中创建一个Sprin... 目录前言详细步骤一、本地配置DeepSeek二、SpringBoot项目调用本地DeepSeek前言随着人工智能技

Python实现自动化接收与处理手机验证码

《Python实现自动化接收与处理手机验证码》在移动互联网时代,短信验证码已成为身份验证、账号注册等环节的重要安全手段,本文将介绍如何利用Python实现验证码的自动接收,识别与转发,需要的可以参考下... 目录引言一、准备工作1.1 硬件与软件需求1.2 环境配置二、核心功能实现2.1 短信监听与获取2.

Python实现Microsoft Office自动化的几种方式及对比详解

《Python实现MicrosoftOffice自动化的几种方式及对比详解》办公自动化是指利用现代化设备和技术,代替办公人员的部分手动或重复性业务活动,优质而高效地处理办公事务,实现对信息的高效利用... 目录一、基于COM接口的自动化(pywin32)二、独立文件操作库1. Word处理(python-d

通过Docker Compose部署MySQL的详细教程

《通过DockerCompose部署MySQL的详细教程》DockerCompose作为Docker官方的容器编排工具,为MySQL数据库部署带来了显著优势,下面小编就来为大家详细介绍一... 目录一、docker Compose 部署 mysql 的优势二、环境准备与基础配置2.1 项目目录结构2.2 基

Python使用DrissionPage中ChromiumPage进行自动化网页操作

《Python使用DrissionPage中ChromiumPage进行自动化网页操作》DrissionPage作为一款轻量级且功能强大的浏览器自动化库,为开发者提供了丰富的功能支持,本文将使用Dri... 目录前言一、ChromiumPage基础操作1.初始化Drission 和 ChromiumPage

CentOS 7部署主域名服务器 DNS的方法

《CentOS7部署主域名服务器DNS的方法》文章详细介绍了在CentOS7上部署主域名服务器DNS的步骤,包括安装BIND服务、配置DNS服务、添加域名区域、创建区域文件、配置反向解析、检查配置... 目录1. 安装 BIND 服务和工具2.  配置 BIND 服务3 . 添加你的域名区域配置4.创建区域