15
3
内容纲要

前言

去年公司已经完成所有产品的.NET Core改造工作,团队成员也逐步积累了docker和devops的知识,今年的主要任务之一就是把核心的产品迁移到devops生产线上。本来是打算用微软的Azure平台,因为真的太好用了,我自己的测试站点就一直用Azure来做持续交付工作。但是公司原来的产品、数据、备案都在阿里云上,迁移的话会有大量的工作,包括数据迁移、备案迁移都很麻烦。加上目前国内这种政治绝对正确的要求,搞不准哪天就因为用Azure就撞雷了,虽然很无语,但是也没有办法。

这几天一直在想方案,前年是打算用开源的持续集成(CI)工具Jenkins来配合阿里云,不过去年发现GitHub Action用起来更加顺畅,而我们的代码基本都是托管在GitHub上面,阿里云去年也发布了自己的K8S平台ACK,我们打算当小白鼠,正式使用看看效果如何。

不过在使用ACK之前,我们希望能够把Github上面的代码持续发布到docker Hub上面,去年已经完成了这部分工作,今天整理一下步骤和流程。

一、创建docker Hub账号

首先是到 https://hub.docker.com/ 创建一个账号,并且创建一个自己的repository,可以是公开的,也可以是私有的。另外,设置和GitHub的连接:
file

二、创建Dockerfile

通过VSCode或者VS创建自动Dockerfile,如果是VS,就右键项目(不是解决方案),添加Docker支持,VS会自动生成这个项目的Dockerfile文件,不用做任何修改。
file

三、提交整个解决方案

我们的项目一般都是位于一个解决方案里面,所以一个解决方案可能保护多个项目,这个没有问题,把整个解决方案都提交到GitHub上面,当然必须是本地可以编译通过并且可以运行的代码。网上很多教程都没有说清楚这种项目的打包细节,我后面会重点说一下,因为对于一个初学者,很容易在这里迷茫。

四、设置GitHub的密钥

需要把第一步创建的Hub账号填写到GitHub的settings里面:
file

五、编写Action的WorkFlow

通过Github的Action,可以创建很多类型的工作流WorkFlow,非常方便。
file
可以看到,几乎涵盖了所有国内外常用云平台的模板。
file
当然了,也包含了几乎所有常用开发语言的模板,太牛了。

Github上还有非常多通用的Action,你可以直接引用来使用,这里我不多说,贴一个我们可以运行的WorkFlow:

name: .NET

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
 docker:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Setup .NET Core
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: 3.1.x
    - name: Push to Docker Hub
      uses: docker/build-push-action@v1
      with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}
          dockerfile: ./Academy.PCCore/Dockerfile
          repository: academy/academypc
          tags: v0.0.1
          tag_with_ref: true

这里重点说一下后面的这几个变量:
1、username和password就是第四步里面设置的变量。
2、dockerfile的路径问题,路径“./”就是指当前在Github的这个respository的根目录,比如:
file
这里我只需要将Academy.PCCore项目打成docker,Dockerfile也在这个文件夹的根目录。
3、repository,这个就是在Docker Hub里面创建的仓储Respository的路径,两边一定要一直,否则无法提交。

这里我使用了三个别人写好的Action, actions/checkout@v2 是迁出代码到GitHub运行环境的Action,actions/setup-dotnet@v1 是生成打包.NET Core程序的Action,docker/build-push-action@v1 将程序打包到Docker并且发布到Hub的Action,自己几乎不用写太多代码,确实非常方便。


声明: 本文采用 BY-NC-SA 协议进行授权. 未标注“转”的文章均为原创,转载请注明转自: 使用Github Action将.NET Core发布到docker Hub

公告栏

欢迎大家来到我的博客,我是dodoro,希望我的博客能给你带来帮助。