[整理]CI持续集成-基于Github Action

简介: [整理]CI持续集成-基于Github Action

1. 基本概念说明


1.jpg


2. Workflow


范例一

对Github仓库中XX项目的master分支的代码进行打包并部署到阿里云服务器

# 对Github仓库中master分支的代码进行部署到阿里云服务器
name: Build app and deploy to aliyun
on:
  push:
    branches:
      # 执行工作流的代码分支
      - master
jobs:
  build:
    # runs-on 指定job任务运⾏所需要的虚拟机环境(必填字段)
    runs-on: ubuntu-latest
    steps:
      # 获取源码
      - name: Checkout
        # 使⽤action库 actions/checkout获取源码
        uses: actions/checkout@master
      # 安装Node12
      - name: use Node.js 12.16.3
        # 使⽤action库 actions/setup-node安装node
        uses: actions/setup-node@v1
        with:
          node-version: 12.16.3
      # 安装依赖
      - name: Yarn install
        run: npm install yarn && yarn install
      # 打包
      - name: Yarn build
        run: yarn run build:prod
      # 通过SSH上传部署文件到阿⾥云
      - name: Deploy to Aliyun
        uses: easingthemes/ssh-deploy@v2.1.1
        env:
          # 私钥
          # PRIVATE_KEY 的内容为在服务器生成的SSH的私钥信息
          # PRIVATE_KEY 需要配置到项目/Settings/Secrets/New repository secret
          # 相当于配置环境变量,便于脚本读取
          SSH_PRIVATE_KEY: ${{ secrets.PRIVATE_KEY }}
          # 服务器ip
          REMOTE_HOST: "xxx.xxx.xxx.xxx"
          # 服务器⽤户名
          REMOTE_USER: "root"
          # scp参数
          ARGS: "-avzr --delete"
          # 源⽬录
          SOURCE: "dist"
          # ⽬标地址,服务器不存在目录会发布失败,需要注意
          TARGET: "/root/web-stite/client"


范例二:

对Github仓库中XX项目的master分支的代码进行打包并部署到github-pages

# workflow名称
name: Build and Deploy
# 触发条件:master分支接收到push指令后开始
on:
  push:
    branches:
      - master
# 执行任务
jobs:
  build-and-deploy:
    name: Build and Deploy
    # runs-on 虚拟机环境
    runs-on: ubuntu-latest
    # 任务步骤
    steps:
      # 获取源码
      - name: 1. 拉取代码 🚀
        # 使⽤action库 actions/checkout获取源码
        uses: actions/checkout@master
      # 安装Node12.18.3
      - name: 2. 安装Node 🚀
        # 使⽤action库 actions/setup-node安装node
        uses: actions/setup-node@v1
        with:
          node-version: 12.18.3
      # 安装依赖
      - name: 3. 安装依赖 🚀
        run: npm install yarn && yarn install
      # 编译项目
      - name: 4. 编译项目 🚀
        run: yarn run build:prod
      - name: 5. 部署 🚀
        # 使用JamesIves库 JamesIves/github-pages-deploy-action@3.7.1
        uses: JamesIves/github-pages-deploy-action@3.7.1
        with:
          # GitHub 密钥
          GITHUB_TOKEN: ${{ secrets.GITHUB_ACCESS_TOKEN }}
          # 待发布到的分支
          BRANCH: gh-pages
          # 待部署文件夹
          FOLDER: dist
          # 自动删除已部署的文件
          CLEAN: true


3. 简易流程图


2.jpg


扩展内容


扩展一、创建SSH公&私钥

查看文件中的内容可以使用命令: cat xxx


  1. 进入当前用户的.ssh目录,没有则创建后进入
  1. 进入.ssh目录cd ~/.ssh/
  2. 创建.ssh目录mkdir ~/.ssh
  1. 执行生成命令: ssh-keygen -t rsa -C "建议邮箱地址"
  2. 可以通过ls命令查看当前目录找到新生成的公钥:id_rsa.pub私钥:id_rsa
  3. 可以通过cat .\id_rsa.pub命令打印公钥信息或直接打开文件查看


扩展二、配置本地公钥信息到服务器

可实现免密登录服务器


手动操作


  1. 登录阿里云服务器 ssh root@xxx.xxx.xxx.xxx
  2. 进入.ssh目录 cd .ssh/
  3. 执行命令 vi authorized_keys
  4. 粘贴公钥信息
  5. 按ECS&输出:wq保存退出


简化操作


  1. 执行命令: ssh-copy-id root@xxx.xxx.xxx.xxx


扩展三、Github配置SSH and GPG keys

可实现通过ssh操作Git


  1. 菜单位置: settings/SSH and GPG keys/New SSH key
  2. 添加命名并粘贴本地生成的公钥信息
  3. 通过ssh -T git@github.com验证得到结果如: Hi OSpoon! You've successfully authenticated, but GitHub does not provide shell access.


扩展四、Github的项目中配置Secrets

可充当登录服务器的私钥信息,IP,端口,用户名,密码,Token等信息的变量配置


配置服务器生成的私钥信息到Github


  1. 菜单位置: 项目/Settings/Secrets/New repository secret
  2. 建议命名为PRIVATE_KEY,并粘贴秘钥保存


扩展五、Github生成个人访问令牌

github-pages-deploy-action扩展需要配置令牌到项目的Secrets被使用


  1. 菜单位置: Setting/Developer settings/Personal access tokens
  2. Generate new token: 添加令牌名称并选择需要的权限
  3. 生成令牌并自行保存,遗忘令牌需要重新生成



相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
23天前
|
JavaScript 前端开发 持续交付
Prettier 高级应用:集成 CI/CD 流水线与插件开发
【10月更文挑战第18天】Prettier 是一款流行的代码格式化工具,它能够自动将代码格式化成一致的风格,从而提高代码的可读性和维护性。对于希望进一步发挥 Prettier 潜力的高级用户而言,将 Prettier 集成到持续集成(CI)和持续部署(CD)流程中,确保每次提交的代码都符合团队标准,是非常重要的。此外,通过开发自定义插件来支持更多语言或扩展 Prettier 的功能也是值得探索的方向。本文将详细介绍这两方面的内容。
39 2
|
5天前
|
存储 监控 Devops
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
|
13天前
|
jenkins Java 持续交付
软件开发自动化程度的不断提高,持续集成(CI)和持续部署(CD)成为现代软件开发的重要组成部分
随着软件开发自动化程度的不断提高,持续集成(CI)和持续部署(CD)成为现代软件开发的重要组成部分。本文以电商公司为例,介绍如何使用 Jenkins 自动发布 Java 代码,包括安装配置、构建脚本编写及自动化部署等步骤,帮助团队实现高效稳定的软件交付。
25 3
|
23天前
|
对象存储
一个通过 GitHub Action 将 GitHub 仓库与阿里云 OSS 完全同步的脚本
一种将 GitHub 仓库完全同步到阿里云 OSS 的方法。
|
1月前
|
缓存 监控 测试技术
掌握容器化持续集成/持续部署(CI/CD)的最佳实践
【10月更文挑战第8天】本文介绍了容器化持续集成/持续部署(CI/CD)的最佳实践,涵盖容器化CI/CD的概念、优势和实施步骤。通过使用容器技术,可以实现环境一致性、快速迭代和易于扩展,提高软件开发的效率和可靠性。文章还详细讨论了编写高效的Dockerfile、自动化测试、安全性、监控和日志管理等方面的最佳实践。
|
19天前
|
运维 安全 Devops
DevOps实践:持续集成与持续部署(CI/CD)的自动化之路
【10月更文挑战第22天】在软件交付的快速迭代中,DevOps文化和实践成为企业加速产品上市、保证质量和提升客户满意度的关键。本文将通过一个实际案例,深入探讨如何利用持续集成(Continuous Integration, CI)和持续部署(Continuous Deployment, CD)实现软件开发流程的高效自动化,包括工具选择、流程设计以及问题解决策略。我们将一起探索代码从编写到部署的全自动化旅程,揭示其对企业运维效率和产品质量所带来的深远影响。
|
1月前
|
Devops jenkins 测试技术
DevOps实践:持续集成与持续部署(CI/CD)的实现之路
【9月更文挑战第33天】在软件开发的海洋中,DevOps是一艘能够加速航行、提升航程质量的巨轮。本文将作为你的航海图,指引你理解并实现DevOps文化中的核心环节——持续集成(CI)与持续部署(CD)。我们将从基础概念出发,逐步深入到实际操作,带你领略代码到部署的全过程。准备好扬帆起航,让我们共同探索如何通过自动化工具和流程优化,让软件交付变得既高效又可靠。
|
1月前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
67 0
|
2月前
|
Kubernetes Go 持续交付
一个基于Go程序的持续集成/持续部署(CI/CD)
本教程通过一个简单的Go程序示例,展示了如何使用GitHub Actions实现从代码提交到Kubernetes部署的CI/CD流程。首先创建并版本控制Go项目,接着编写Dockerfile构建镜像,再配置CI/CD流程自动化构建、推送Docker镜像及部署应用。此流程基于GitHub仓库,适用于快速迭代开发。
49 3
|
2月前
|
Kubernetes 持续交付 Go
创建一个基于Go程序的持续集成/持续部署(CI/CD)流水线
创建一个基于Go程序的持续集成/持续部署(CI/CD)流水线