引言
本文转载自本人的个人公众号:代码之外的程序员
在现代软件开发中,持续集成(CI)和持续交付(CD)已经成为提高开发效率和代码质量的关键实践。本文将介绍什么是CI/CD,以及如何利用Github Action 通过CI/CD把我们的应用从代码库中自动集成到K8S上。主要涉及如下知识点:
- CI/CD介绍。
- Github Action介绍和使用。
- 利用GitHub Action制作镜像,并推送到Github Packages上。
- 配置K8S集群,对外提供控制服务,让Github Action 把镜像部署到K8S上。
- 彻底解决国内集群访问国外镜像服务的限速问题,把镜像推送到国内云商仓库中(华为云为例)。
每个知识点都相对独立,大家可以按需阅读。
1. 什么是CI/CD
持续集成(Continuous Integration,CI)是一种软件开发实践。简单来说,就是日常开发的时候,我们通过了Merge Request后,自动触发的一个构建流水线,一般会有如下步骤:
- 启动自动化测试
- 编译和构建出对应的产物
- 把构建产物托管到指定的平台上,如:maven,镜像仓库等
持续交付(Continuous Delivery,CD)是在 CI 的基础上进一步扩展,确保代码在任何时间点都可以安全地发布到生产环境。其主要目的是缩短开发周期,提高软件质量和交付速度。一般会有如下步骤:
- 登录到目标容器
- 触发目标容器启动部署任务
- 目标容器自动拉取CI生成的镜像进行部署。
2. Github Action是什么?
Github Actions 是 Github 提供的一种 CI/CD 工具,它允许开发者在代码库中创建工作流,自动化构建、测试和部署任务。通过定义简单的 YAML 文件,开发者可以轻松地配置并运行各种自动化任务。大大降低了CI/CD的使用门槛。
3. Github Action使用
在介绍前,先看看了解下完整的CI/CD流程。
- 这里有个地方需要注意,大部分需要部署到服务器的项目中,CD流程是不会把构建产物直接推送到目标容器中的。一般来说,CI会把构建产物推送到镜像仓库(Maven)中,然后CD触发时,会触发容器从镜像仓库中拉取我们CI构建的镜像,再进行部署。
3.1. 在对应的仓库中配置Github Action Secret
在使用前,需要先对Github Action进行配置,步骤如下:
- 登录Github进入账号设置页
- 拉到底部点击Developer settings
- 展开Personal access tokens
- 点击tokens
- 点击Generate new token(classic)创建token Scopes勾选参考下图
创建成功后,看到新创建的密钥,这里要注意的是,密钥只会在创建的时候能看到,后面就无法再次查询,需要注意保存。如下图:
- 打开需要使用Github Action仓库的Setting页面 点击Secrets and variables下面的Actions选项,然后把刚刚生成的token拷贝进去, 单机Ad secret即可。
到这里我们已经配置好我们的环境了。
3.2. 使用Github Action 触发CI流程
3.2.1. 创建dockerfile
FROM openjdk:17-jdk-slim
COPY /build/libs/HelloGithubAction-1.0-SNAPSHOT.jar /hello-github-action.jar
EXPOSE 8080
CMD ["java", "-jar", "/hello-github-action.jar"]
3.2.2. 创建deploy.yml文件
打开你的项目,在根目录下创建文件.github/workflows/deploy.yml文件。
name: CI/CD for hello-github-action
on:
push:
branches:
- main
workflow_dispatch:
jobs:
build_and_deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Set up JDK 17
uses: actions/setup-java@v2
with:
java-version: '17'
distribution: 'adopt'
- name: Build with Gradle
run: |
./gradlew build
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Login to Github Container Register
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.actor }}
# password 这里的HELLO_GITHUB_ACTION_SECRET需要改成你刚刚创建的secret key
password: ${{ secrets.HELLO_GITHUB_ACTION_SECRET }}
- name: Build and push Docker image
uses: docker/build-push-action@v2
with:
context: .
push: true
tags: ghcr.io/${{ github.repository}}:latest
platforms: linux/amd64,linux/arm64
3.3.3. 触发CI流程
保存代码后,直接push到main分支就会自动触发Github Action的构建了。如下图:
构建完成后,我们可以在Github package仓库中找到我们刚刚推送的镜像。在仓库中,点击右下角的packages项。
查看你的镜像
- ps: 如果刚点进去没看到有镜像的话,可以点击下Clear current search query, filters, and sorts项,清空筛选条件就会出来了,这可能是Github的一个BUG,
4. 小结
到这里,我们就学会使用了Github Action中的CI流程了。限于篇幅Github CD流程会在下一篇文章中介绍,敬请期待~