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

本文主要讲解通过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
二、前置动作
- 准备一台服务器
- 申请阿里云镜像仓库服务,申请地址:https://cr.console.aliyun.com/
- 能够正常访问github
- 新建一个Java SpringBoot项目推送到github代码仓库中
- 代码仓库中配置对应的secrets and variables,下一步会教大家配置
三、配置secrets and variables
具体配置位置如下图
我这边使用的实例用了如下的一些secrets
- DOCKER_LOGIN_URL 阿里云镜像仓库地址
- DOCKER_PASSWORD 阿里云镜像仓库密码
- DOCKER_USERNAME 阿里云镜像仓库账号
- SERVER_IP 服务器Ip
- SERVER_USER_NAME 服务器名称
- 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如何快速构建和部署你自己的项目,打造一条属于自己的流水线的更多相关文章
- 基于Github Actions + Docker + Git 的devops方案实践教程
目录 为什么需要Devops 如何实践Devops 版本控制工具(Git) 学习使用 配置环境 源代码仓库 一台配置好环境的云服务器 SSH远程登录 在服务器上安装docker docker技术准备工 ...
- 基于 Github Actions 自动部署 Hexo 博客
前言 前不久使用了 Hexo 搭建独立博客,我是部署在我的腾讯云轻量应用服务器上的,每次都需要 hexo deploy 然后打包.上传.解压和刷新 CDN,非常麻烦.我的服务器配置也不高 2C2G 无 ...
- 使用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 ...
- Hexo快速构建个人小站-Fulid主题下添加Valine评论系统(三)
Hexo目录: Hexo快速构建个人小站-Hexo初始化和将项目托管在Github(一) Hexo快速构建个人小站-自定义域名和自定义主题(二) 背景交代: 前面两章完成了Hexo的初始化和部分自定义 ...
- 5 分钟教你快速掌握 GitHub Actions 自动部署博客
自从 GitHub 宣布 GitHub Actions 在平台上对所有开发人员和存储库可用以来,GitHub Actions 越来越受欢迎.很多第三方平台在生态系统中有速度等限制,将进一步推动开发人员 ...
- 程序员带你学习安卓开发,十天快速入-对比C#学习java语法
关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到 ...
- Github Actions 学习笔记
Github Actions是什么? Github Actions 官方介绍:GitHub Actions是一个持续集成和持续交付(CI/CD)平台,允许您自动化构建.测试和部署管道.您可以创建构建和 ...
- 深度学习入门者的Python快速教程 - 基础篇
5.1 Python简介 本章将介绍Python的最基本语法,以及一些和深度学习还有计算机视觉最相关的基本使用. 5.1.1 Python简史 Python是一门解释型的高级编程语言,特点是简单明 ...
- 【开源】使用.Net Core和GitHub Actions实现哔哩哔哩每日自动签到、投币、领取奖励
BiliBiliTool是一个B站自动执行任务的工具,使用.NET Core编写,通过它可以实现B站帐号的每日自动观看.分享.投币视频,获取经验,每月自动领取会员权益.自动为自己充电等功能,帮助我们轻 ...
- 基于【腾讯云函数】/【GitHub Actions】/【Docker】的每日签到脚本(支持多账号使用)
每日签到集合 基于[腾讯云函数]/[GitHub Actions]/[Docker]的每日签到脚本 支持多账号使用 特别声明: 本仓库发布的脚本及其中涉及的任何解锁和解密分析脚本,仅用于测试和学习研究 ...
随机推荐
- Jenkins通过脚本进行自动发布
编写以下脚本: ------------------------------------------------------------------------------------- #!/bin ...
- vue3组件通信与props
title: vue3组件通信与props date: 2024/5/31 下午9:00:57 updated: 2024/5/31 下午9:00:57 categories: 前端开发 tags: ...
- test(爱测试) 开源接口测试,敏捷测试管理平台10.2.7发布
一:itest work 简介 itest work 开源敏捷测试管理,包含极简的任务管理,测试管理,缺陷管理,测试环境管理,接口测试,接口Mock,还有压测 ,又有丰富的统计分析,8合1工作站.可按 ...
- http1.1 的默认长连接 Connection: keep-alive 与 TCP KeepAlive 之间区别
HTTP 长连接,也称为 HTTP 持久连接(HTTP Persistent Connection)或 HTTP 连接重用,是一种在 HTTP 协议中实现的机制. 在传统的 HTTP 通信中,每个 H ...
- 错误 CS1617 Invalid option '7.3' for /langversion; must be ISO-1, ISO-2, Default or an integer in range 1 to 6.
严重性 代码 说明 项目 文件 行 禁止显示状态错误 CS1617 Invalid option '7.3' for /langversion; must be ISO-1, ISO-2, Defau ...
- .NET5 ASP.NET CORE 发布到IIS 文件无法替换
由于默认是:进程内托管.要在IIS里停止网站,才能替换文件. 建议解决方案是:进程外(out-of-process)托管 记事本修改项目的 .csproj 文件(或在VS上,选中web项目,右键-编 ...
- MapStruct - 注解汇总
@Mapper @Mapper 将接口或抽象类标记为映射器,并自动生成映射实现类代码. public @interface Mapper { // 引入其他其他映射器 Class<?>[] ...
- 支撑阻力指标,庄家成本价是可靠的支撑位(无未来,DLL加密)
本指标依据庄家的成本价设计的,庄家成本价是可靠的支撑位.底层逻辑:庄家是有内幕的, 庄家能在价格低位时抄底,庄家控股时,庄家不会让散户获取低价的筹码,所以当股价到达到支撑位时,会有比较大的反弹.庄家也 ...
- 05-Python函数
函数定义与调用 函数由以下几个部分组成: 函数名 函数参数 函数体 返回值 定义一个函数: def showMyName(name): #定义函数 print(name) showMyName(&qu ...
- Nginx SSL证书更新及密码套件更新
一.域名更换证书 ssl证书一般包括证书文件crt.cer.pem.pfx和私钥文件key. CER.CRT.PEM 和 PFX 是不同的证书文件格式,它们之间存在一些区别: CER (DER 编码) ...