在之前我的部署, 版本控制, 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
在这里有一些入门脚本
各个语言的编译等..
在这里可以搜索到非常多的命令组 并查看到执行命令 作为一个参考 也就是 YAML 文件的 uses 执行 命令组
在之后我可以有两个个分支
debug 和 Release 分支
开发环境则监听 debug 分支的 push 事件 做到 CI 持续集成
生产黄金则监听 Release 分支的合并请求 并完成自动化构建 做到 CD 持续交付 当然 你也可以做到持续部署
谢谢你的阅读
来源: https://www.cnblogs.com/AnAng/p/12046864.html