在之前我的部署、版本控制、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