Github Actions 推送代码构建 Docker 镜像并 push 到仓库

这篇具有很好参考价值的文章主要介绍了Github Actions 推送代码构建 Docker 镜像并 push 到仓库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Github Actions 推送代码构建 Docker 镜像并 push 到镜像仓库

需要解决的问题

解决 ci/cd 流程,在 推送代码到 github 时,github 的 action 能够自动构建代码并发布到镜像仓库,之后运行 docker-compose 文件,启动项目访问。

问题前置分析

目前比较流行的 ci/cd 解决方案为:

  1. github + jenkins
  2. Github/gitlab + jenkins + docker hub + Docker/K8s
  3. Github + docker hub + Docker/k8s

上述两种方案:

  1. 配置 github 的 webhook 钩子,在 push 代码之后,主动去通知 jenkins,构建镜像完成项目部署;

  2. 配置 github 的 webhook 钩子,在 push 代码之后,主动去通知 jenkins,完成项目的构建和打包,之后上传镜像到 docker hub 仓库,在 github action 中调用服务器中的 docker 完成服务的部署,实现 ci/cd 自动化流程;

    上述两种方案存在的缺点:

    • 没有镜像仓库存储 dokcer images,出现问题没办法回滚,扩容等;
    • Jenkins 拉取 github 会有较大几率超时,拉取失败;
    • Jenkins 配置相对繁琐,上手难度太高;
    • 没有 容器管理工具,无法及时得知 容器运行状态。
  3. 舍弃掉之前的 jenkins,由 github action 完成打包和镜像的推送,作为容器化之后的首选;

    能够有效解决上述方案存在的缺点,唯一的缺点是需要在 github action 配置时多花时间。

前置准备

这里介绍一些必要的组件,使用方法自己百度。

组件介绍

Docker hub
  1. Aliyun AKC 服务 https://cr.console.aliyun.com/
  2. Docker hub 官方 https://hub.docker.com/
  3. 私有的 Harbor 服务 https://goharbor.io/
容器管理平台
  1. Portainer
  2. Rainbond https://www.rainbond.com/usescene/AppManagement/
  3. Ranchar/k8s https://docs.rancher.cn/

包含 Docker 和 k8s 的管理平台

Github action secrets 设置

repo -> settings -> Security -> Actions secrets and variables -> secrets 中设置

deploy-docker.yml

# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-maven

# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.

name: Build And Deploy Docker

# github action 的触发时机
on:
  push:
    # 指定分支触发
    branches: 
      - "master"
    # 指定路径或者文件,当此路径下的文件发生变化时,执行此 action
    paths:
      - 'index.html'
    # 发布 tag 时执行此 action
    tags:
      - 'v*'
  # 指定分支发生 pr 操作时触发    
  pull_request:
    branches: [ "master" ]

# env 环境变量,为下面的 action 脚本提供
env:
  # Use docker.io for Docker Hub if empty
  REGISTRY: ${{ secrets.REGISTRY }}
  # github.repository as <account>/<repo>
  IMAGE_NAME: ${{ github.repository }}

jobs:
  build:
    runs-on: ubuntu-latest
    steps:

    # 提供 docker 元数据,构建 docker images tag 时使用
    - name: Extract Docker metadata
      id: meta
      uses: docker/metadata-action@v4
      with:
        images: ${{ env.IMAGE_NAME }}
        tags: |
          # set latest tag for default branch
          type=raw,value=latest,enable={{is_default_branch}}
          # tag event
          type=ref,enable=true,priority=600,prefix=,suffix=,event=tag
  
    # 构建镜像 使用 docker/Build-And-push@v5 插件有问题
    - uses: actions/checkout@v2
    - name: Build Docker Image  
      run: |
        docker build -t ${{ env.REGISTRY }}/${{ steps.meta.outputs.tags }} -f ./docker/nginx/Dockerfile .
    - name: Push Docker Image
      run: |
        docker login --username=${{ secrets.DOCKER_USERNAME }} --password ${{ secrets.DOCKER_PASSWORD }} ${{ env.REGISTRY }}
        docker push ${{ env.REGISTRY }}/${{ steps.meta.outputs.tags }}

    # 运行 docker 服务
    # 另外一种选择是通过 scp 将文件传到指定服务器,完成 docker-compose 启动
    - name: Deploy Docker App
      uses: appleboy/ssh-action@master
      env:
        TZ: Asia/Shanghai
      with: 
        host: ${{ secrets.HOST }}
        username: ${{ secrets.HOST_USERNAME }}
        key: ${{ secrets.HOST_SSHKEY }}
        port: ${{ secrets.PORT }}
        script: |
          # 获取 docker-compose 文件
          wget https://raw.githubusercontent.com/${{ env.IMAGE_NAME }}/master/docker/docker-compose.yml
          ls
          cat docker-compose.yml
          docker-compose down -v
          docker-compose up -d

之上的一些 action 插件都可是使用其他的代替

  • https://github.com/aliyun/acr-login
  • https://docs.github.com/zh/actions/publishing-packages/publishing-docker-images#publishing-images-to-github-packages

效果展示

示例仓库:https://github.com/yuluo-yx/uipaas-ci-cd-test文章来源地址https://www.toymoban.com/news/detail-799775.html

到了这里,关于Github Actions 推送代码构建 Docker 镜像并 push 到仓库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • docker镜像push到仓库

    镜像可以很方便直接 push 到 docker 的公共仓库或阿里云仓库 1、登录docker hub创建自己的仓库地址: https://hub.docker.com/repository/create 创建时,仓库名称要与镜像名称对应 登录docker仓库,输入密码 将镜像打成标签 将标签上传镜像仓库 下载自己的镜像 修改镜像名称

    2024年02月16日
    浏览(33)
  • Docker -- 镜像仓库(搭建私有镜像仓库、向镜像仓库推送镜像、从镜像仓库拉取镜像)

    搭建镜像仓库可以基于Docker官方提供的DockerRegistry来实现。 官网地址 Docker 官方的 Docker Registry 是一个基础版本的 Docker 镜像仓库,具备仓库管理的完整功能,但是没有图形化界面。 搭建方式比较简单,命令如下: 命令中挂载了一个数据卷 registry-data 到容器内的 /var/lib/regist

    2024年02月04日
    浏览(78)
  • 【Docker】推送镜像到私有仓库

    目录 退出登录  私有仓库登录  构建镜像时指定tag 提交镜像到远程仓库  现有镜像指定tag 退出登录 没登录过的跳过这步   私有仓库登录 假设你的仓库连接是https://xxx.xxx.cn,账户密码都是root,那么命令就是: docker login https://xxx.xxx.cn -u root -p root  构建镜像时指定tag  一般

    2024年02月06日
    浏览(42)
  • Docker 将容器打包成镜像&推送镜像到仓库

    示例: 1.登录仓库进行身份验证 2.将本地镜像重命名与仓库格式相匹配 3.推送镜像到仓库

    2024年02月09日
    浏览(45)
  • 推送docker镜像到私有/DockerHub仓库

    以定制jdk11镜像为例: 新建文件夹jdk11 下载orcale jdk11,复制orcale jdk11 到刚刚新建文件夹jdk11下 新建Dockerfile,镜像对字符集和时间都做了处理 创建镜像 给镜像打标签 登录Harbor私服 推送镜像 过程中常见错误解决方法 docker配置中添加私服地址,重启docker服务 访问https://hub.doc

    2024年02月15日
    浏览(46)
  • Docker镜像的拉取和推送(阿里云镜像仓库)

    简介: 阿里云的容器镜像服务个人版是不要钱的,个人可以免费创建3个命名空间和最多可创建300个免费的镜像仓库供以使用,平时可以使用这项服务对个人的镜像进行管理,就可以不使用国外的DockerHub来对镜像进行管理了,大大节省了拉取和推送的时间,本文将介绍如何把

    2024年01月23日
    浏览(41)
  • 【Docker篇】从0到1搭建自己的镜像仓库并且推送镜像到自己的仓库中

    Docker私有仓库的存在为用户提供了更高的灵活性、控制和安全性。与使用公共镜像仓库相比,私有仓库使用户能够完全掌握自己的镜像生命周期。 首先,私有仓库允许用户在本地或云服务器上部署和管理自己的镜像存储库。这意味着用户可以根据自己的需求和规模进行扩展和

    2024年01月19日
    浏览(46)
  • idea配置docker推送本地镜像到远程私有仓库

    目录 1,搭建远程Docker 私有仓库 Docker registry 2,Windows10/11系统上安装Docker Desktop 3,idea 配置远程私有仓库地址 4,idea 配置Docker 5,idea在本地构建镜像 6,推送本地Docker镜像到远程 Docker私有仓库 7,测试/生产环境从 Docker registry 私有仓库中拉取镜像 1,搜索镜像 2,拉取镜像并

    2024年02月03日
    浏览(47)
  • 解决Git中“error: failed to push some refs“问题,轻松推送代码到远程仓库

    引言: 在使用Git进行版本控制时,我们经常需要将本地代码推送到远程仓库。然而,有时候在执行推送操作时,可能会遇到\\\"error: failed to push some refs\\\"的错误提示。本文将详细介绍如何解决这个问题,并提供详细的操作步骤和代码示例。 步骤1:检查当前分支状态 首先,我们需

    2024年02月05日
    浏览(51)
  • git关联两个远程仓库,一个仓库(github)拉取代码,另一个仓库(gitlab)推送代码

    有这种情况,小伙伴们在github上下载的开源项目(该开源项目还在继续开发维护),然后自己下载下来进行二次开发,然后又要把项目推送自己的gitlab私服上,这个时候不得不本地代码关联两个远程仓库。接下来我将一步步讲解如何关联两个远程仓库,并拉取github的开源项目

    2024年02月12日
    浏览(78)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包