在之前我的部署、版本控制、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. 关于Prometheus监控的思考:多标签埋点及Mbean

    使用 grafana+prometheus+jmx 作为普通的监控手段,是比较有用的.我之前的文章介绍了相应的实现办法. 但是,按照之前的实现,我们更多的只能是监控 单值型的数据,如请求量,tps 等 ...

  2. 类加载器 - ClassLoader详解

    获得ClassLoader的途径 获得当前类的ClassLoader clazz.getClassLoader() 获得当前线程上下文的ClassLoader Thread.currentThread ...

  3. 20191107-3 beta week 2/2 Scrum立会报告+燃尽图 02

    此作业要求参见[https://edu.cnblogs.com/campus/nenu/2019fall/homework/9955] 一.小组情况 队名:扛把子 组长:孙晓宇 组员:宋晓丽 梁梦瑶 ...

  4. Markdown学习笔记(一)

    解决Markdown文件插入图片无法只能本地查看的问题 原因:图片的显示与图片地址关联,写入Markdown时用的本机地址,一旦上传到网络,地址就发生了变化,也就显示不了图片. 寻找免费的图床网站. ...

  5. docker实例之mysql的使用

    docker实例之mysql的使用 常用步骤 命令 1:搜索镜像 docker search xxx 2:拉取镜像 docker pull xxx:yy 3:查看镜像 docker image ins ...

  6. API更新#图书信息查询ISBN2.0

    ISBN图书查询     自2019年5月8日公布isbn查询接口1.0至今,该图书数据查询服务已被调用八万余次,查得图书11653本,感谢一直使用和关心这个接口的朋友们! 目前网站域名将于2019年 ...

  7. Maven入门【小白千万别点进】

    曾经有个女孩问我为什么要学Maven,我吧唧嘴就怼:Maven项目没有jar包它不香嘛,照样运行它不香嘛?如果让我一句话形容Maven,我会这样形容:"妈妈再也不用担心小明拿U盘去小红电脑里 ...

  8. 【Luogu P3379】LCA问题的倍增解法

    Luogu P3379 题意:对于两个节点,寻找他们的最近公共祖先. 一个显而易见的解法是对于每一个节点我们都往上遍历一遍,记录下它每一个祖先,然后再从另一个节点出发,一步一步往上走,找到以前记录过第 ...

  9. Python 信息提取-爬虫

    import requests import re from bs4 import BeautifulSoup url = "http://python123.io/ws/demo.html ...

  10. fastjson自定义序列化竟然有这么多姿势?

    本文介绍下fastjson自定义序列化的各种操作. 一.什么是fastjson? fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSO ...