16|自动构建:如何使用 GitHub Action 构建镜像?
- 深入了解
- 翻译
- 解释
- 总结
本文详细介绍了如何使用 GitHub Action 自动构建镜像的方法,以及相关的配置步骤和操作流程。作者首先介绍了 GitHub Action 的基本概念,包括 Workflow、Event、Job 和 Step,并通过实际示例应用展示了如何创建自动构建镜像的工作流。在操作实践中,读者可以学习到如何创建 build.yaml 文件来定义 GitHub Action 工作流,以及如何配置 Docker Hub Secret 以提供推送镜像的权限。通过触发 GitHub Action Workflow,读者可以了解工作流的运行状态及日志输出,并在 Docker Hub 中查看自动构建并推送的新版本镜像。最终实现效果是,当向 main 分支提交代码时,GitHub 工作流将自动构建镜像,并且每一个 commit id 对应一个镜像版本。文章还提出了思考题,鼓励读者尝试改造 build.yaml,使其同时支持构建不同平台的镜像。整体而言,本文是一篇非常实用的技术文章,适合想要学习 GitOps 工作流中自动化阶段的读者阅读。
《云原生架构与 GitOps 实战》,新⼈⾸单¥59
全部留言(10)
- 最新
- 精选
- GAC·DU老师,您在日常工作中,镜像版本是如何定义的?有特殊的规范吗?
作者回复: 我们的实践是生产镜像用一个特殊的 prefix 标识,比如 release-v1.0.0,其他的用 commit id 作为 tag。 这里固定的规范,结合 CI 和自动化,选择适合团队的实践就可以了。
2023-01-13归属地:北京6 - 农民园丁跟着老师的教程做了实验,发现生成了2个镜像,分别是linux/amd64和linux/arm64,这是怎么做到的?
作者回复: 我的课程源码里构建了两个平台的镜像,你可以尝试删除.github/workflows/build.yaml 文件里定义的 platforms 字段,这样就只会构建单个平台的镜像了。
2023-01-13归属地:内蒙古2 - jeffery应该需要这个platforms: linux/amd64,linux/arm64。 官网地址:https://docs.docker.com/build/ci/github-actions/examples/#multi-platform-images 不知道这块... with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} 是不是写错了 with: username: ${{ env.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} name: ci on: push: branches: - "main" jobs: docker: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Set up QEMU uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: Login to Docker Hub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build and push uses: docker/build-push-action@v3 with: context: . platforms: linux/amd64,linux/arm64 push: true tags: user/app:latest
作者回复: 回答正确👍🏻 USERNAME 可以从 env 里读取,也可以配置 github secret 读取。 在这个例子中我们是用 env 读的。
2023-01-13归属地:陕西2 - dva老师你好,能详细解释一下这个语句是什么意思吗?双冒号是什么特殊写法? run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)"
作者回复: 在阶段中输出 sha_short 变量,以便在后续阶段可以通过表达式 ${{ steps.vars.outputs.sha_short }} 来获取这个值。 此外,你还可以用这个写法来在阶段中输出值:https://docs.github.com/en/actions/using-jobs/defining-outputs-for-jobs
2023-02-28归属地:广东21 - gyl1989113@v2 @v3是啥意思呢。。插件版本嘛
作者回复: 是的。
2023-02-07归属地:四川 - 奕怎么读取 默认的环境变量? 使用 ${{env. GITHUB_REPOSITORY}} 读取不到
作者回复: 可以用 ${{ github.repositoryUrl }} 获取,另外所有可用的内置变量可以在这个文档里查询:https://docs.github.com/en/actions/learn-github-actions/contexts
2023-01-14归属地:广东 - 无名无姓这个在gitlab上面可以使用么?
作者回复: Gitlab 自动构建在下一节课会介绍哦。
2023-01-13归属地:北京 - GAC·DUname: build on: push: branches: - 'main' env: DOCKERHUB_USERNAME: lyzhang1999 jobs: docker: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Set outputs id: vars run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" - name: Set up QEMU uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: Login to Docker Hub uses: docker/login-action@v2 with: username: ${{ env.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build backend and push uses: docker/build-push-action@v3 with: context: backend platforms: linux/amd64,linux/arm64 push: true tags: ${{ env.DOCKERHUB_USERNAME }}/backend:${{ steps.vars.outputs.sha_short }} - name: Build frontend and push uses: docker/build-push-action@v3 with: context: frontend platforms: linux/amd64,linux/arm64 push: true tags: ${{ env.DOCKERHUB_USERNAME }}/frontend:${{ steps.vars.outputs.sha_short }}
作者回复: 回答正确,两个镜像都配置了不同的平台👍🏻
2023-01-13归属地:北京 - 哈尔name: build on: push: branches: - 'main' env: DOCKERHUB_USERNAME: lyzhang1999 jobs: docker: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Set outputs id: vars run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" - name: Set up QEMU uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: Login to Docker Hub uses: docker/login-action@v2 with: username: ${{ env.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build backend and push uses: docker/build-push-action@v3 with: context: backend platforms: linux/amd64,linux/arm64 push: true tags: ${{ env.DOCKERHUB_USERNAME }}/backend:${{ steps.vars.outputs.sha_short }} - name: Build frontend and push uses: docker/build-push-action@v3 with: context: frontend platforms: linux/amd64,linux/arm64 push: true tags: ${{ env.DOCKERHUB_USERNAME }}/frontend:${{ steps.vars.outputs.sha_short }}2024-03-14归属地:中国香港
- BertGeekgithub action 自动化就是方便,但构建镜像慢,小项目还好, 大项目,仓库多,维护起来也费劲2023-10-17归属地:陕西