GitHub Actions 完成CI CD

别说谁变了你拦得住时间么 提交于 2020-12-18 00:57:46

在之前我的部署、版本控制、CI、CD都是在Jenkins 下来完成的

在前几天看到github上的一个新玩具actions,简直惊为天人

它能在你的仓库触发事件(Push,Pull,issue,...)的时候给你分配一台服务器执行一些预定好的命令

并且它的脚本编写非常简单只要半个小时就能学会

这篇文章主要讲述

使用github actions 做CI AND CD 以跳过jenkins的环节

 

1、首先 需要拉取代码到它分配的服务器

2、添加编译环境

3、代码编译

4、将编译好的结果上传到dockerhub(镜像仓库)

5、连接k8s集群

6、通知k8s进行镜像更换并做一个版本记录

 

有关actions 的使用入门不在累述

 

 

name: .NET Core #名字

on: [push]  #触发事件
jobs:  
  build:
    runs-on: ubuntu-latest #分配的服务器系统
    steps:
    - uses: actions/checkout@v1 #执行一个checkout@v1 脚本
    - name: Setup .NET Core  #将要执行的命令组名称
      uses: actions/setup-dotnet@v1 #执行一个setup-dotnet@v1 脚本 它的主要作用是安装net dotnet 编译环境
      with: #参数 传递给setup-dotnet@v1 脚本的
        dotnet-version: 2.2.108 #这里的版本是我代码的net core 版本
    - name: Build with dotnet #自定义的命令组名称
      run: dotnet build --configuration Release #执行构建操作
    - name: docker push bash 
      env: #这里 类似于 readonly 添加一个临时变量 个人感觉没啥用 添加的临时变量只能在当前命令组下使用
        IMAGE_TAG: ${{ secrets.kube_deployment_name }}:${{ github.sha }}  #类似于 readonly IMAGE_TAG=xxx.xxx ${{secrets.xx}} 是本人在后台配置的变量 
        DOCKER_NAME: ${{ secrets.docker_name }} #同上
      run: |
        docker login -u ${{ secrets.docker_name }} -p ${{ secrets.docker_pwd }}  #登录到dockerhub 感觉不妥 但是我没有找到更改后的方法了
        docker build . --file Dockerfile --tag $IMAGE_TAG #进行构建 并添加tag
        docker tag $IMAGE_TAG $DOCKER_NAME/$IMAGE_TAG #修改仓库地址
        docker push $DOCKER_NAME/$IMAGE_TAG  #推到镜像仓库  我这里是公有库 各位可以换成自己私有的
    - name: deploy to cluster 
      uses: steebchen/kubectl@master #执行一个setup-dotnet@v1 脚本 它的主要作用是安装kubectl
    - name: ConnectionKubeCtl #连接到k8s集群
      run: |
        kubectl config set-credentials tf-admin --token=${{ secrets.kube_token }} #配置登录方式 这里我使用的是token登录 通过kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}') 命令可以查看一条
        kubectl config set-cluster tf-cluster --insecure-skip-tls-verify=true --server=${{ secrets.kube_server }} #配置连接地址
        kubectl config set-context tf-system --cluster=tf-cluster --user=tf-admin 
        kubectl config use-context tf-system  
    - name: Kube Deployment Update Image #通知k8s 更新镜像版本并产生一个记录
      run: |
        kubectl set image deployment/${{ secrets.kube_deployment_name }} ${{ secrets.kube_deployment_name }}=${{ secrets.docker_name }}/${{ secrets.kube_deployment_name }}:${{ github.sha }} --record -n aspnetcore

 

在这里有一些入门脚本

各个语言的编译等..

 

 

 

在这里可以搜索到非常多的命令组 并查看到执行命令 作为一个参考 也就是yml文件的uses执行 命令组

 

 

 

 

 

在之后我可以有两个个分支

debug 和 Release 分支

开发环境则监听debug分支的 push 事件 做到 CI  持续集成

生产黄金则监听Release分支的合并请求 并完成自动化构建 做到CD 持续交付 当然 你也可以做到持续部署

 

谢谢你的阅读

原文出处:https://www.cnblogs.com/AnAng/p/12046864.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!