本文主要讲解通过github的actions来对我们项目进行ci/cd

一、actions简介

GitHub Actions 是一种持续集成和持续交付 (CI/CD) 平台,可用于自动执行生成、测试和部署管道。 您可以创建工作流程来构建和测试存储库的每个拉取请求,或将合并的拉取请求部署到生产环境。

GitHub Actions 不仅仅是 DevOps,还允许您在存储库中发生其他事件时运行工作流程。 例如,您可以运行工作流程,以便在有人在您的存储库中创建新问题时自动添加相应的标签。

GitHub 提供 Linux、Windows 和 macOS 虚拟机来运行工作流程,或者您可以在自己的数据中心或云基础架构中托管自己的自托管运行器。

下面是一个简单的实例和简介

# 可选 - 工作流的名称,将显示在 GitHub 仓库的 "Actions" 标签中。如果省略此字段,将使用工作流文件的名称。
name: learn-github-actions # 可选 - 从工作流生成的工作流运行的名称,将显示在您的仓库的 "Actions" 标签的工作流运行列表中。此示例使用带有 `github` 上下文的表达式来显示触发工作流运行的用户的用户名。有关更多信息,请参阅 "[AUTOTITLE](/actions/using-workflows/workflow-syntax-for-github-actions#run-name)"。
run-name: ${{ github.actor }} is learning GitHub Actions # 指定触发此工作流的触发器。此示例使用 `push` 事件,因此每次有人推送更改到仓库或合并拉取请求时都会触发工作流运行。这是由推送到每个分支触发的;有关仅在推送到特定分支、路径或标签时运行的语法示例,请参阅 "[AUTOTITLE](/actions/reference/workflow-syntax-for-github-actions#onpushpull_requestpull_request_targetpathspaths-ignore)"。
on: [push] # 将所有在 `learn-github-actions` 工作流中运行的任务分组在一起。
jobs: # 定义一个名为 `check-bats-version` 的任务。子键将定义该任务的属性。
check-bats-version: # 配置该任务在最新版本的 Ubuntu Linux 运行器上运行。这意味着该任务将在 GitHub 托管的新虚拟机上执行。有关使用其他运行器的语法示例,请参阅 "[AUTOTITLE](/actions/reference/workflow-syntax-for-github-actions#jobsjob_idruns-on)"
runs-on: ubuntu-latest # 将在 `check-bats-version` 任务中运行的所有步骤分组在一起。嵌套在此部分下的每个项都是一个独立的操作或 shell 脚本。
steps: # `uses` 关键字指定此步骤将运行 `actions/checkout` 操作的 `v4` 版本。这是一个将您的仓库检出到运行器上的操作,允许您针对您的代码运行脚本或其他操作(例如构建和测试工具)。当您的工作流将使用仓库的代码时,您应该使用检出操作。
- uses: actions/checkout@v4 # 此步骤使用 `actions/setup-node@v4` 操作来安装指定版本的 Node.js。(此示例使用 20 版本。)这会将 `node` 和 `npm` 命令放入您的 `PATH` 中。
- uses: actions/setup-node@v4
with:
node-version: '20' # `run` 关键字告诉任务在运行器上执行命令。在这种情况下,您正在使用 `npm` 来安装 `bats` 软件测试包。
- run: npm install -g bats # 最后,您将运行带有输出软件版本参数的 `bats` 命令。
- run: bats -v

二、前置动作

  1. 准备一台服务器
  2. 申请阿里云镜像仓库服务,申请地址:https://cr.console.aliyun.com/
  3. 能够正常访问github
  4. 新建一个Java SpringBoot项目推送到github代码仓库中
  5. 代码仓库中配置对应的secrets and variables,下一步会教大家配置

三、配置secrets and variables

具体配置位置如下图

我这边使用的实例用了如下的一些secrets

  1. DOCKER_LOGIN_URL 阿里云镜像仓库地址
  2. DOCKER_PASSWORD 阿里云镜像仓库密码
  3. DOCKER_USERNAME 阿里云镜像仓库账号
  4. SERVER_IP 服务器Ip
  5. SERVER_USER_NAME 服务器名称
  6. SSH_PASSWORD 服务器密码

四、创建workflows

点击Actions--New workflows 它会在项目更目录默认创建一个文件夹.github\workflows

选择Docker image

五、编写Dockerfile

因为主要是用来做一个实例,所以我这边编写的Dockerfile就比较简单,如果大家有自己的需求,劳请自行修改

Dockerfile存放位置为:.github\workflows 同docker-image.yml同级

FROM openjdk:17

WORKDIR /app

COPY spring-boot-build-3.3.2.jar /app/spring-boot-build-3.3.2.jar

EXPOSE 8080

ENTRYPOINT ["java","-jar","/app/spring-boot-build-3.3.2.jar"]

六、编写发布流水线配置

name: Docker-Image-CI

on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ] jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Check out the code
uses: actions/checkout@v2 - name: Set up QEMU
uses: docker/setup-qemu-action@v1 - name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1 - name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin' - name: Build with Maven
run: mvn clean package - name: Move JAR to .github/workflows
run: |
mkdir -p .github/workflows
mv target/*.jar .github/workflows/ - name: Log in to Aliyun Docker Registry
env:
ALIYUN_DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
ALIYUN_DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
ALIYUN_DOCKER_URL: ${{ secrets.DOCKER_LOGIN_URL }}
run: |
echo "${ALIYUN_DOCKER_PASSWORD}" | docker login "${ALIYUN_DOCKER_URL}" --username "${ALIYUN_DOCKER_USERNAME}" --password-stdin - name: Remove old Docker images
run: |
docker images --format '{{.Repository}}:{{.Tag}}' | grep 'registry.cn-hangzhou.aliyuncs.com/benxiong_default/public' | xargs -I {} docker rmi -f {} - name: Build Docker image
run: docker build -f .github/workflows/Dockerfile -t springbuild .github/workflows/ - name: Tag Docker image
run: docker tag springbuild 阿里云镜像仓库tag:latest - name: Push Docker image to Aliyun registry
run: docker push 阿里云镜像仓库地址:latest - name: Set up SSH using username and password
env:
SSH_PASSWORD: ${{ secrets.SSH_PASSWORD }}
SSH_USER: ${{ secrets.SERVER_USER_NAME }}
SERVER_IP: ${{ secrets.SERVER_IP }}
run: |
sudo apt-get update
sudo apt-get install -y sshpass
sshpass -p "${SSH_PASSWORD}" ssh -o StrictHostKeyChecking=no ${SSH_USER}@${SERVER_IP} << 'EOF'
# Stop and remove old container
sudo docker ps -q -f "name=容器名称" | xargs -r sudo docker stop
sudo docker ps -aq -f "name=容器名称" | xargs -r sudo docker rm # Remove old Docker images
sudo docker image prune -a -f # Remove the specific Docker image
sudo docker rmi -f 镜像名称 # Pull the new Docker image
sudo docker pull 镜像名称 # Run the new container
sudo docker run -d --name 容器名称--restart unless-stopped -p 9000:9000 镜像名称:latest
EOF

七、结语

通过以上的一套操作下来,我们就可以在提交代码main分支后,通过workflows就能自动的去帮助我们执行构建和部署的操作了,非常方便我们开发者,也不需要我们再去部署jenkins,也不需要学习jenkins的pipeline语法了,同时也不得不说一句,github nb!!!

gthub actions官方地址:https://docs.github.com/zh/actions/learn-github-actions/understanding-github-actions

如有哪里讲得不是很明白或是有错误,欢迎指正

如您喜欢的话不妨点个赞收藏一下吧

带你学习通过GitHub Actions如何快速构建和部署你自己的项目,打造一条属于自己的流水线的更多相关文章

  1. 基于Github Actions + Docker + Git 的devops方案实践教程

    目录 为什么需要Devops 如何实践Devops 版本控制工具(Git) 学习使用 配置环境 源代码仓库 一台配置好环境的云服务器 SSH远程登录 在服务器上安装docker docker技术准备工 ...

  2. 基于 Github Actions 自动部署 Hexo 博客

    前言 前不久使用了 Hexo 搭建独立博客,我是部署在我的腾讯云轻量应用服务器上的,每次都需要 hexo deploy 然后打包.上传.解压和刷新 CDN,非常麻烦.我的服务器配置也不高 2C2G 无 ...

  3. 使用Linux、Nginx和Github Actions托管部署ASP.NET Core 6.0应用

    使用Linux.Nginx和Github Actions托管部署ASP.NET Core 6.0应用 前言 本文主要参考微软这篇文档而来 Host ASP.NET Core on Linux with ...

  4. Hexo快速构建个人小站-Fulid主题下添加Valine评论系统(三)

    Hexo目录: Hexo快速构建个人小站-Hexo初始化和将项目托管在Github(一) Hexo快速构建个人小站-自定义域名和自定义主题(二) 背景交代: 前面两章完成了Hexo的初始化和部分自定义 ...

  5. 5 分钟教你快速掌握 GitHub Actions 自动部署博客

    自从 GitHub 宣布 GitHub Actions 在平台上对所有开发人员和存储库可用以来,GitHub Actions 越来越受欢迎.很多第三方平台在生态系统中有速度等限制,将进一步推动开发人员 ...

  6. 程序员带你学习安卓开发,十天快速入-对比C#学习java语法

    关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到 ...

  7. Github Actions 学习笔记

    Github Actions是什么? Github Actions 官方介绍:GitHub Actions是一个持续集成和持续交付(CI/CD)平台,允许您自动化构建.测试和部署管道.您可以创建构建和 ...

  8. 深度学习入门者的Python快速教程 - 基础篇

      5.1 Python简介 本章将介绍Python的最基本语法,以及一些和深度学习还有计算机视觉最相关的基本使用. 5.1.1 Python简史 Python是一门解释型的高级编程语言,特点是简单明 ...

  9. 【开源】使用.Net Core和GitHub Actions实现哔哩哔哩每日自动签到、投币、领取奖励

    BiliBiliTool是一个B站自动执行任务的工具,使用.NET Core编写,通过它可以实现B站帐号的每日自动观看.分享.投币视频,获取经验,每月自动领取会员权益.自动为自己充电等功能,帮助我们轻 ...

  10. 基于【腾讯云函数】/【GitHub Actions】/【Docker】的每日签到脚本(支持多账号使用)

    每日签到集合 基于[腾讯云函数]/[GitHub Actions]/[Docker]的每日签到脚本 支持多账号使用 特别声明: 本仓库发布的脚本及其中涉及的任何解锁和解密分析脚本,仅用于测试和学习研究 ...

随机推荐

  1. 002. git 分支管理

    git分支 git分支,从本质上来讲仅仅是指向提交对象的可变指针,在这一点上与svn是有着本质区别,svn的分支实际就是个目录而已. git默认分支名字是 master,在多次提交操作后,你其实已经有 ...

  2. docker lnmp

    #wiki: https://github.com/2233466866/lnmp/wiki #安装docker wget -O /etc/yum.repos.d/ali_docker-ce.repo ...

  3. 【Socket】解决TCP粘包问题

    一.介绍 TCP一种面向连接的.可靠的.基于字节流的传输层协议. 三次握手: 客户端发送服务端连接请求,等待服务端的回复. 服务端收到请求,服务端回复客户端,可以建立连接,并等待. 客户端收到回复并发 ...

  4. ansible常用模块的学习

    ansible常用模块列表: 1.file 点击查看代码 2.copy 点击查看代码 3.yum--repository 点击查看代码 4.yum 点击查看代码 5.service 点击查看代码 6. ...

  5. The model backing the 'MainDbContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269).

    The model backing the 'MainDbContext' context has changed since the database was created. Consider u ...

  6. FlashDuty Changelog 2023-09-07 | 新增深色模式与主题配置

    FlashDuty:一站式告警响应平台,前往此地址免费体验! FlashDuty 现在已经全面支持了深色模式,这为您提供了更柔和的光线和舒适的界面外观.并且,您可以根据自己的喜好和使用环境动态切换深色 ...

  7. work08

    day09作业: 必做题:========================================第一题: 1.定义一个Animal类,包含如下行为: eat() 打印"要吃饭&qu ...

  8. Prometheus + Grafana (1) 监控

    简介 Micrometer/Prometheus/Grafana体系是当前最成熟的低成本Java监控解决方案,而且通过其他的Prometheus exporter,还可以进行诸如我们可能需要的Wind ...

  9. Linux下挂载NTFS格式的U盘

    NTFS是Windows下的格式,在Linux下是识别不了的,要想在Linux上挂载NTFS格式的U盘需要安装软件以提供支持.软件名为ntfs-3g. 1.下载安装包 https://tuxera.c ...

  10. 全国产!瑞芯微RK3568J/RK3568B2工业核心板规格书

    核心板简介 创龙科技SOM-TL3568是一款基于瑞芯微RK3568J/RK3568B2处理器设计的四核ARM Cortex-A55全国产工业核心板,每核主频高达1.8GHz/2.0GHz.核心板CP ...