zoukankan      html  css  js  c++  java
  • GitHub Actions 完成CI CD

    在之前我的部署、版本控制、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 持续交付 当然 你也可以做到持续部署

    谢谢你的阅读

  • 相关阅读:
    OC-为何用copy修饰block
    OC-RunLoop运行循环
    苹果审核之遇到IPV6问题被拒的解决方法
    LeetCode学习_day1:原地算法
    OC-加载h5富文本的代码,并计算高度
    OC-bug: Undefined symbols for architecture i386: "_OBJC_CLASS_$_JPUSHRegisterEntity", referenced from:
    了解iOS各个版本新特性总结
    iOS 快速打包方法
    iOS tableView侧滑删除的第三方控件
    Object_C 集成环信时,中文环境下不显示中文
  • 原文地址:https://www.cnblogs.com/AnAng/p/12046864.html
Copyright © 2011-2022 走看看