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

谢谢你的阅读

GitHub Actions 完成CI CD的更多相关文章

  1. github action 实现CI/CD

    两种github action 打包.Net Core 项目docker镜像推送到阿里云镜像仓库 1.GitHub Actions 是什么? 大家知道,持续集成由很多操作组成,比如抓取代码.运行测试. ...

  2. 使用Linux、Nginx和Github Actions托管部署ASP.NET Core 6.0应用

    使用Linux.Nginx和Github Actions托管部署ASP.NET Core 6.0应用 前言 本文主要参考微软这篇文档而来 Host ASP.NET Core on Linux with ...

  3. 使用CI/CD工具Github Action发布jar到Maven中央仓库

    之前发布开源项目Payment Spring Boot到Maven中央仓库我都是手动执行mvn deploy,在CI/CD大行其道的今天使用这种方式有点"原始".于是我一直在寻求一 ...

  4. Github原生CI/CD,初尝Github Actions

    Github 原生 CI/CD,初尝 Github Actions Intro Github 目前已经推出了自己的 CICD 服务 -- Github Actions,而且比微软的 Azure Dev ...

  5. Github Packages和Github Actions实践之CI/CD

    概述 Github在被微软收购后,不忘初心,且更大力度的造福开发者们,推出了免费私有仓库等大更新.近期又开放了packages和actions两个大招,经笔者试用后感觉这两个功能配合起来简直无敌. G ...

  6. 使用.NET 6开发TodoList应用(31)——实现基于Github Actions和ACI的CI/CD

    系列导航及源代码 使用.NET 6开发TodoList应用文章索引 需求和目标 在这个系列的最后一节中,我们将使用GitHub Actions将TodoList应用部署到Azure Container ...

  7. 用 GitHub Action 构建一套 CI/CD 系统

    ​ 缘起 Nebula Graph 最早的自动化测试是使用搭建在 Azure 上的 Jenkins,配合着 GitHub 的 Webhook 实现的,在用户提交 Pull Request 时,加个 r ...

  8. 技术番外篇丨Github Action CI/CD

    起源 看到.Net群里再聊CI/CD,我就这里分享一下我目前自己一些小东西的做法,我目前在Github有一个自己私有的组织,里面存放了我的部分商业化项目,早期我采用Jenkins用Webhooks进行 ...

  9. 好代码是管出来的——使用GitHub实现简单的CI/CD

    软件开发一般来说是一项团队作业,在本系列文章开始就提到过软件的编码是由一个团队“并行”完成的,为了保证编码任务正常完成,首先引入版本控制工具来完成代码管理,为了保证代码质量引入了代码分析器以及代码测试 ...

随机推荐

  1. 怎样用JS给,option添加“选中”属性

    <html> <head> <script> window.onload = function(){ var opts = document.getElementB ...

  2. win10 visual studio 2017环境中安装CUDA8

    从https://developer.nvidia.com/cuda-toolkit-archive下载CUDA 8 安装 从https://developer.nvidia.com/gamework ...

  3. Python input函数使用

    本文链接:https://www.cnblogs.com/zyuanlbj/p/11905475.html 函数定义 def input(*args, **kwargs): # real signat ...

  4. 朱辉(茶水): Linux Kernel iowait 时间的代码原理

    本文系转载,著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者: 朱辉(茶水) 来源: 微信公众号linux阅码场(id: linuxdev) 作者介绍 朱辉,个人主页 htt ...

  5. PHP面向对象中new self( )和 new static( ) 的区别

    在PHP中 self指向定义了当前被调用方法的类, static指向调用当前静态方法的类. class A { public static $_a = 'Class A'; public static ...

  6. AutoCad 二次开发 文字镜像

    AutoCad 二次开发 文字镜像 参考:https://adndevblog.typepad.com/autocad/2013/10/mirroring-a-dbtext-entity.html 在 ...

  7. 大公司 vs 小公司,你会选哪个?

    找工作跟找对象差不多,在确立关系领证前,彼此要多些了解.在了解的基础上,你再确认是否真心喜欢对方,彼此身上有没有相互吸引的特质,两个人的性格是否互补.三观是否匹配.契合度越高,往后才能相互扶持.彼此成 ...

  8. vue项目引入自定义.css的样式文件

    ES6的引入方式: .vue文件中 css文件引入 <template></template> <style scoped> @import "../as ...

  9. IO流之ZipInputStream和ZipOutputStream的认识及使用

    转载https://blog.csdn.net/weixin_39723544/article/details/80611810 工具类 import java.io.*;import java.ut ...

  10. [ch02-03] 梯度下降

    系列博客,原文在笔者所维护的github上:https://aka.ms/beginnerAI, 点击star加星不要吝啬,星越多笔者越努力. 2.3 梯度下降 2.3.1 从自然现象中理解梯度下降 ...