GitHub中的GitHub Actions是一个持续集成和持续交付的平台,它可以帮助你通过自动化的构建(包括编译、发布、自动化测试)来验证你的代码,从而尽快地发现集成错误。github于2019年11月后对该功能全面开放,现在所有的github用户可以直接使用该功能。GitHub 提供 Linux、Windows 和 macOS 虚拟机来运行您的工作流程,或者您可以在自己的数据中心或云基础架构中托管自己的自托管运行器。
GitHub Actions使开发人员能够在其代码存储库中自动化地执行各种任务。无论是自动构建和测试代码,还是自动部署应用程序,GitHub Actions 都可以帮助开发团队提高效率,降低错误率。在本文中,我们将深入了解 GitHub Actions 的概念、常见用例和示例,并提供相关参考文档。
在使用免费版本的Github Action是有如下限制的:
作业执行时间 - 工作流中的每个作业最多可以运行 6 小时的执行时间。如果作业达到此限制,该作业将终止且无法完成。
工作流运行时间 - 每个工作流运行限制为 35 天。如果工作流运行达到此限制,则工作流运行将被取消。此时间段包括执行持续时间以及等待和批准所花费的时间。
API 请求 - 您可以在一小时内跨存储库中的所有操作执行多达 1000 个 API 请求。如果超出此限制,其他 API 调用将失败,这可能会导致作业失败。
并发作业 - 可以在帐户中运行的并发作业数取决于 GitHub 计划,如下表所示。如果超出,则任何其他作业都将排队。
GitHub 计划 | 并发作业总数 | 最大并发 macOS 作业数 |
---|---|---|
自由 | 20 | 5 |
专业版 | 40 | 5 |
团队 | 60 | 5 |
企业 | 180 | 50 |
作业矩阵 - 作业矩阵每次工作流运行最多可以生成 256 个作业。此限制适用于 GitHub 托管和自托管的运行程序。
工作流运行队列 - 每个存储库的排队时间间隔不超过 500 个工作流运行,间隔为 10 秒。如果工作流运行达到此限制,则工作流运行将终止且无法完成。
编写GithubActions的流程时,需要创建一个workflow工作流,workflow必须存储在你的项目库根路径下的.github/workflows目录中,每一个 workflow对应一个具体的.yml 文件(或者 .yaml)。
yml是YAML(YAML Ain’t Markup Language)语言的文件,以数据为中心,比properties、xml等更适合做配置文件,主要有以下几个特点:
大小写敏感。
使用缩进表示层级关系。
缩进只能使用空格,不能用 TAB 字符。
缩进的空格数量不重要,只要层级相同的元素左对齐即可。
‘#’ 表示注释。
这是一个常见的用例,当代码推送到存储库时,自动触发工作流程来构建和测试代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
name: Build and Test on: push: branches: - main jobs: build: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Build run: make build - name: Test run: make test< |
另一个常见的用例是当发布新版本时,自动将应用程序部署到服务器。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
name: Deploy on: release: types: [published] jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Deploy to server uses: easingthemes/ssh-deploy@v2 with: server_ip: ${{ secrets.SERVER_IP }} server_port: ${{ secrets.SERVER_PORT }} username: ${{ secrets.SERVER_USERNAME }} password: ${{ secrets.SERVER_PASSWORD }} source: 'dist/' target: '/var/www/myapp'< |
这个示例展示了如何将代码构建成 Docker 镜像,推送到 Amazon ECR 和 Alibaba Cloud Container Registry (ACR)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
name: Push to ECR and ACR on: push: branches: - main jobs: push_to_ecr: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Login to Amazon ECR id: login-ecr uses: aws-actions/amazon-ecr-login@v2 with: registry: ${{ secrets.AWS_REGISTRY_URL }} aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - name: Build and push Docker image id: build-image run: | docker build -t ${{ secrets.AWS_REGISTRY_URL }}/my-image . docker push ${{ secrets.AWS_REGISTRY_URL }}/my-image push_to_acr: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Login to Alibaba Cloud uses: aliyun/login-action@v1 with: access-key-id: ${{ secrets.ALIYUN_ACCESS_KEY_ID }} access-key-secret: ${{ secrets.ALIYUN_ACCESS_KEY_SECRET }} region: ${{ secrets.ALIYUN_REGION }} - name: Build and push Docker image id: build-image-acr run: | docker build -t ${{ secrets.ACR_REGISTRY_URL }}/my-image . docker login -u ${{ secrets.ACR_REGISTRY_USERNAME }} -p ${{ secrets.ACR_REGISTRY_PASSWORD }} ${{ secrets.ACR_REGISTRY_URL }} docker push ${{ secrets.ACR_REGISTRY_URL }}/my-image< |
以上是 GitHub Actions 的概念、常见用例和示例。通过利用这一功能,开发团队可以实现更高效的开发流程,提高代码质量和部署速度。如果您对 GitHub Actions 有任何疑问,请随时向我们提问!