首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

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

编程知识
2024年07月27日 15:15

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

System.out.println("原文地址:https://www.cnblogs.com/ancold/p/18327097");

一、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

如有哪里讲得不是很明白或是有错误,欢迎指正
如您喜欢的话不妨点个赞收藏一下吧🙂

From:https://www.cnblogs.com/ancold/p/18327097
本文地址: http://shuzixingkong.net/article/485
0评论
提交 加载更多评论
其他文章 Spring 常用的三种拦截器详解
在开发过程中,我们常常使用到拦截器来处理一些逻辑。最常用的三种拦截器分别是 AOP、 Interceptor 、 Filter,但其实很多人并不知道什么时候用AOP,什么时候用Interceptor,什么时候用Filter,也不知道其拦截顺序,内部原理。今天我们详细介绍一下这三种拦截器。
Spring 常用的三种拦截器详解 Spring 常用的三种拦截器详解
ComfyUI插件:ComfyUI Impact 节点(一)
前言: 学习ComfyUI是一场持久战,而 ComfyUI Impact 是一个庞大的模块节点库,内置许多非常实用且强大的功能节点 ,例如检测器、细节强化器、预览桥、通配符、Hook、图片发送器、图片接收器等等。通过这些节点的组合运用,我们可以实现的工作有很多,例如自动人脸检测和优化修复、区域增强、
ComfyUI插件:ComfyUI Impact 节点(一) ComfyUI插件:ComfyUI Impact 节点(一) ComfyUI插件:ComfyUI Impact 节点(一)
超级猫超级签名分发平台前台SQL注入漏洞+前台任意文件删除漏洞+前台远程文件写入漏洞+前台任意文件读取漏洞+前台任意命令执行漏洞
超级猫超级签名分发平台前台SQL注入漏洞+前台任意文件删除漏洞+前台远程文件写入漏洞+前台任意文件读取漏洞+前台任意命令执行漏洞
超级猫超级签名分发平台前台SQL注入漏洞+前台任意文件删除漏洞+前台远程文件写入漏洞+前台任意文件读取漏洞+前台任意命令执行漏洞 超级猫超级签名分发平台前台SQL注入漏洞+前台任意文件删除漏洞+前台远程文件写入漏洞+前台任意文件读取漏洞+前台任意命令执行漏洞 超级猫超级签名分发平台前台SQL注入漏洞+前台任意文件删除漏洞+前台远程文件写入漏洞+前台任意文件读取漏洞+前台任意命令执行漏洞
C# 通过反射(Reflection)调用不同名泛型方法
概述 由于工作需要,需要通过数据类型和方法名控制方法走向 用到的数据类型有8种(string,Int16,Int32,Int64,Boolean,Byte,Single,Double) 读取的方法(参数一致,但是数据不同的泛型方法,返回值也是泛型)暂时只有11种,但肯定的是,后续一定会增加 原本计划
【AppStore】IOS应用上架Appstore的一些小坑
前言 上一篇文章写到如何上架IOS应用到Appstore,其中漏掉了些许期间遇到的小坑,现在补上 审核不通过原因 5.1.1 Guideline 5.1.1 - Legal - Privacy - Data Collection and Storage 5.1.1(ii) Permission Ap
【AppStore】IOS应用上架Appstore的一些小坑 【AppStore】IOS应用上架Appstore的一些小坑 【AppStore】IOS应用上架Appstore的一些小坑
useRoute 函数的详细介绍与使用示例
title: useRoute 函数的详细介绍与使用示例 date: 2024/7/27 updated: 2024/7/27 author: cmdragon excerpt: 摘要:本文介绍了Nuxt.js中useRoute函数的详细用途与示例,展示了如何在组合式API中使用useRoute获取
useRoute 函数的详细介绍与使用示例 useRoute 函数的详细介绍与使用示例
Golang 高性能 Websocket 库 gws 使用与设计(一)
GitHub 🌟 1.2k,高性能的 websocket 库,代码双语注释,适合有开发经验的同学进阶学习。
Golang 高性能 Websocket 库 gws 使用与设计(一) Golang 高性能 Websocket 库 gws 使用与设计(一) Golang 高性能 Websocket 库 gws 使用与设计(一)
Java SE 文件上传和文件下载的底层原理
1. Java SE 文件上传和文件下载的底层原理 @目录1. Java SE 文件上传和文件下载的底层原理2. 文件上传2.1 文件上传应用实例2.2 文件上传注意事项和细节3. 文件下载3.1 文件下载应用实例3.2 文件下载注意事项和细节4. 总结:5. 最后: 2. 文件上传 文件的上传和下
Java SE 文件上传和文件下载的底层原理 Java SE 文件上传和文件下载的底层原理 Java SE 文件上传和文件下载的底层原理