• CICD:github actions 实现CICD


    在当今的软件开发世界中,持续集成与持续部署(CI/CD)是一种常见的实践,它能帮助开发者更高效地构建、测试和发布软件。

    GitHub Actions是GitHub平台提供的一种基于YAML配置的自动化工作流服务,可以在项目的构建、测试和发布等环节实现高度的自定义和控制。下面,我们将通过一些步骤和示例来展示如何使用GitHub Actions实现CICD。

    持续集成解决什么问题

    • 提高软件质量
    • 效率迭代
    • 便捷部署
    • 快速交付、便于管理

    持续集成(CI)

    集成,就是一些孤立的事物或元素通过某种方式集中在一起,产生联系,从而构建一个有机整体的过程。

    持续,就是指长期的对项目代码进行集成。

    持续集成是指将所有开发者工作副本每天多次合并到主干的做法。

    持续集成强调开发人员提交了新代码之后,立刻进行构建、测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。

    持续部署(CD)

    对于一个成熟的CICD管到来说,最后的阶段就是持续部署。作为持续交付——自动将生产就绪型构建版本发不到代码存储库的延伸。

    持续集成组成要素

    一个最小化的持续集成系统需要包含以下几个要素:

    • 版本管理系统
    • 构建脚本和工具
    • CI服务器

    一、创建GitHub Actions

    首先,你需要在你的GitHub项目中创建一个新的Actions文件,通常这个文件名为main.yml。这个文件定义了一个工作流,工作流是由一系列的步骤组成的。

    以下是一个简单的示例,它演示了如何使用GitHub Actions在每次push到master分支时触发一个构建和部署流程:

    name: CI/CD Pipeline
    on:
      push:
        branches: [ master ]
      pull_request:
        branches: [ master ]
    
    jobs:
      build:
        name: Build and Test
        steps:
          - name: Checkout Code
            uses: actions/checkout@v2
          - name: Set up JDK
            uses: actions/setup-java@v1
            with:
              java-version: 1.8
          - name: Build and Test
            run: mvn clean install
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    二、配置触发器

    on部分,你可以配置触发器来启动工作流。上面的例子中,我们在push到master分支或pull request修改master分支时触发工作流。

    三、定义工作流

    jobs部分,我们定义了一个名为build的工作流,它包含三个步骤:Checkout Code、Set up JDK和Build and Test。这个工作流会先检出代码,然后设置JDK版本,最后运行构建和测试命令。

    四、部署

    部署的部分通常会涉及到更多的步骤,例如将构建的结果部署到一个预生产环境或者生产环境。这通常涉及到创建Docker镜像,将镜像推送到Docker registry,并创建一个Kubernetes deployment。以下是一个简单的部署示例:

    	# Sample workflow for building and deploying a Hugo site to GitHub Pages
    	name: Deploy wisdomwindy site pages
    	
    	on:
    	  # Runs on pushes targeting the default branch
    	  push:
    	    branches: [$default_branch]
    	
    	  # Allows you to run this workflow manually from the Actions tab
    	  workflow_dispatch:
    	
    	jobs:
    	  # Build job
    	  build:
    	    runs-on: ubuntu-latest
    	    steps:
    	      # 检出代码
    	      - name: checkout
    	        uses: actions/checkout@v3
    	        with:
    	          fetch-depth: 0
    	      - name: Git Configuration
    	        run: |
    	          git config --global core.quotePath false
    	          git config --global core.autocrlf false
    	          git config --global core.safecrlf true
    	          git config --global core.ignorecase false  
    	      # 安装 PNPM
    	      - name: setup PNPM
    	        uses: pnpm/action-setup@v2
    	        with:
    	          version: latest
    	      # 安装 node
    	      - name: Setup Node
    	        uses: actions/setup-node@v3
    	        with:
    	          node-version: 18.18.1
    	          registry-url: https://registry.npmjs.org
    	          cache: pnpm
    	      # 安装依赖
    	      - name: Install dependencies
    	        run: pnpm i --frozen-lockfile
    	      # 打包
    	      - name: Build
    	        run: pnpm build
    	      # 部署
    	      - name: Deploy GitHub Pages
    	        uses:  JamesIves/github-pages-deploy-action@v4
    	        with:
    	          branch: pages
    	          folder: docs
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    如果出现The deploy step encountered an error: The process '/usr/bin/git' failed with错误,在当前项目仓库的settings页面中点击actions,选中general,在Fork pull request workflows from outside collaborators配置项中选中第一个,在Workflow permissions配置项中选中第一个,且在yml配置文件中不能再次设置权限。

  • 相关阅读:
    RetinexDIP: A Unified Deep Framework for Low-Light Image Enhancement 论文阅读笔记
    DC/DC开关电源学习笔记(七)低压大电流DC/DC变换技术
    Python进阶系列 - 17讲 函数
    English语法_关系代词 - 注意事项
    [附源码]JAVA毕业设计高校学生社团管理(系统+LW)
    Google Earth Engine(GEE)—如何新增一个图例在Map面板
    思修复习知识点-《思想道德基础与法律修养》
    CDR插件开发之Addon插件007 - Addon插件简介和案例演示
    分布式消息队列RocketMQ继承SpringBoot
    数据结构与算法_part_8_二叉树
  • 原文地址:https://blog.csdn.net/qq_40850839/article/details/133821809