赞
踩
GitHub Marketplace · Actions to improve your workflow · GitHub
GitHub Actions 是一个持续集成和持续交付(CI/CD)平台,允许您自动化构建、测试和部署流水线。您可以创建工作流来构建和测试存储库中的每个请求,或者将合并的请求部署到生产环境中。
工作流是一个可配置的自动化流程,它将运行一个或多个作业。工作流是由签入存储库的 YAML 文件定义的,并且在由 repository 中的事件触发时运行,或者可以手动触发,或者按照定义的时间表运行。
工作流在.github/workflows
目录中定义, 并且存储库可以有多个工作流,每个工作流可以执行不同的任务集。例如,您可以使用一个工作流来构建和测试拉请求,使用另一个工作流在每次创建发行版时部署您的应用程序,还可以使用另一个工作流在每次有人打开新问题时添加标签。
事件是存储库中触发工作流运行的特定活动。例如,活动可以来自 GitHub 创建请求(pull request
)、打开问题(open an issue
)或向存储库提交(push an commit
)。您还可以通过向 REST API 发布或手动触发按计划运行的工作流。
作业是工作流中在同一运行程序上执行的一组步骤。每个步骤要么是将要执行的 shell 脚本,要么是将要运行的操作。步骤按顺序执行,并相互依赖。由于每个步骤都在同一个运行程序上执行,因此可以将数据从一个步骤共享到另一个步骤。例如,您可以有一个生成应用程序的步骤,然后有一个测试生成的应用程序的步骤。
动作是 GitHub Actions 平台的自定义应用程序,它执行复杂但经常重复的任务。使用一个操作来帮助减少在工作流文件中编写的重复代码的数量。操作可以从 GitHub 获取 git 存储库,为构建环境设置正确的工具链,或者为云提供商设置身份验证o
运行器是在工作流被触发时运行它们的服务器。每个运行器可以一次运行一个作业。GitHub 提供 Ubuntu Linux、 Microsoft Windows 和 macOS 运行程序来运行您的工作流; 每个工作流运行在一个全新的、新配置的虚拟机中执行。GitHub 还提供了更大的运行器,可以进行更大的配置。
Context 上下文就是工作流各个步骤的信息。例如env.sha
,就是自己设置的环境变量里面的sha
变量。
上下文种类和工作流步骤相关
共有十一种:
github、env、job、jobs、steps、runner、secrets、strategy、matrix、needs、inputs
你可以使用表达式语法访问上下文。
${{ <context>.<attribute> }}
或 ${{ <context>[attribute]}}
secrets
上下文secrets
可以通过仓库里的设置栏Actions选项进行设置。
在仓库中,创建.github/workflow/
目录来存储工作流文件。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dTqkORYs-1672369344358)(file:///home/hhoa/文档/blog/assets/2022-12-22-19-00-28-image.png?msec=1672369340086)]
用于触发的工作流、对照下面的可复用工作流
deploy-project.yml
# 工作流名称 name: Deploy Project # 工作流触发设置 on: # push进入仓库时触发 push: # 分支条件设置 branches: - main # 工作流作业 jobs: # 作业名称 deploy-project: # 使用可复用工作流 # 也可以通过GitHub仓库引用自己或其他人的工作流 uses: ./.github/workflows/deploy.yml # 使用策略复用工作流,例如它会并发执行project-name为vblog-server-admin、 # vblog-server-portal、vblog-server-search 的作业, strategy: # 矩阵,就是搭配出各种可能,依次复用,可以有多维矩阵 matrix: # 矩阵的一行,行名称用于引用(可以有多行,多列) project-name: [ vblog-server-admin, vblog-server-portal, vblog-server-search ] # 发送过去的普通属性 with: # 引用上面的矩阵 project-name: ${{ matrix.project-name }} # 秘密,秘密可以在仓库中设置,可复用工作流要获取秘密属性,只能通过这里传播过去之后获取 secrets: # server-host是自定义的秘密名,后面为引用仓库的秘密 server-host: ${{ secrets.SERVER_HOST }} mysql-root-password: ${{ secrets.MYSQL_ROOT_PASSWORD }} jwt-secret: ${{ secrets.JWT_SECRET }} elastic-password: ${{ secrets.ELASTIC_PASSWORD }} docker-username: ${{ secrets.DOCKER_USERNAME }} docker-password: ${{ secrets.DOCKER_PASSWORD }}
可复用工作流顾名思义就是可以复用的工作流、对照上面的主工作流
官方可复用工作流平台 https://github.com/marketplace/actions
能用平台上面的可复用工作流就用平台上面的可复用工作流。
deploy.yml
# 工作流名称 name: Deploy # 设置触发条件 on: # 说明该工作流为可复用工作流(可被其他工作流引用) workflow_call: # 定义参数,就和函数参数一样 # function inputs(string project-name){} inputs: # 自定义参数名 project-name: # 设置是否必须 required: true # 类型(必要) type: string # 安全参数,只能 secrets: # 自定义参数名 server-host: # 是否必须 required: true mysql-root-password: required: true jwt-secret: required: true elastic-password: required: true docker-username: required: true docker-password: required: true # 工作流作业 jobs: # 自定义作业名称 check-update: # 运行时名称 name: Check if the project is updated # 运行的操作系统 runs-on: ubuntu-latest # 其他作业能从该作业获取的变量设置 outputs: # 自定义变量, 该变量为步骤2输出的 'is_update' 变量 is_update: ${{ steps.step2.outputs.is_update }} # 设置步骤名称 steps: # 步骤 id 用于上面的outputs - id: step1 # 步骤名 name: Check out the repository # 复用其他仓库的工作流 "actions/checkout",该工作流的作用是拉取最近仓库的代码 uses: actions/checkout@v3 # 设置输入到复用工作流属性 with: # 拉取仓库的深度,这是 "actions/checkout" 工作流规定的 fetch-depth: 2 # 步骤 id 用于上面的outputs - id: step2 # 步骤名 name: Check out project update # 在设置的操作系统的 shell 或 bash 上运行脚本,该脚本的功能是检测传入项目是否更新 run: | if [ -n "$(git diff HEAD^ -- ${{ inputs.project-name }})" ]; then echo "is_update=true" >> $GITHUB_OUTPUT fi # 自定义作业名称 push-to-docker-registry: # 依赖 check-update, 只有check-update 运行完才开始启动 needs: check-update # 运行时名称 name: Build, test and push docker image to docker hub # 运行的操作系统 runs-on: ubuntu-latest # 运行条件,这里使用了上面作业输出的 is_update变量 if: ${{ needs.check-update.outputs.is_update == 'true' }} # 设置步骤名称 steps: # 使用可复用工作流,拉取最新代码 - name: Check out the repo uses: actions/checkout@v3 # 使用可复用工作流,安装JDK17 - name: Set up JDK 17 uses: actions/setup-java@v3 with: java-version: '17' distribution: 'adopt' # 验证gradle包是否错误 - name: Checkout gradle uses: gradle/wrapper-validation-action@v1 # 安装Gradle - name: Setup Gradle uses: gradle/gradle-build-action@v2 # 运行Gradle进行构建 - name: Run build with Gradle wrapper # 设置进行构建时的环境变量,环境变量会输入运行操作系统的环境变量中 env: # 这里通过主工作流输入的秘密设置环境变量 SERVER_HOST: ${{ secrets.server-host }} MYSQL_ROOT_PASSWORD: ${{ secrets.mysql-root-password }} JWT_SECRET: ${{ secrets.jwt-secret }} ELASTIC_PASSWORD: ${{ secrets.elastic-password }} run: | ./gradlew :${{ inputs.project-name }}:build; # 上传构建完成后的报告 - name: Upload build reports uses: actions/upload-artifact@v3 with: name: build-reports path: build/reports/ # 登陆Docker Hub - name: Login to Docker Hub uses: docker/login-action@v2 with: username: ${{ secrets.docker-username }} password: ${{ secrets.docker-password }} # 获取Docker tags和 labels - name: Extract metadata (tags, labels) for Docker id: meta uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38 with: images: ${{ secrets.docker-username }}/${{ inputs.project-name }} # 通过上面步骤获取的tags和labels构建docker 镜像 - name: Build and push Docker image uses: docker/build-push-action@v3 with: context: ./${{ inputs.project-name }} push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }}
当您的工作流被触发时,将创建一个执行该工作流的工作流运行。工作流运行开始后,您可以看到运行进度的可视化图表,并在 GitHub 上查看每个步骤的活动。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。