CICD-GitHub Actions+ACR+AKS

本文介绍了如何利用GitHubActions来设置从代码构建、测试到部署到AzureKubernetesService(AKS)的自动化流程,替代传统的Jenkins方案。过程中涉及了Dockerfile的编写、ACR(AzureContainerRegistry)的使用以及Kubernetes的yaml配置文件。通过GitHub的工作流文件(workflow)定义了构建、登录Azure、构建并推送镜像以及在AKS上部署的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

通过GitHub的Actions 可以实现持续集成、持续部署的自动化流程。
用到的技术点如下:
1、GitHub
2、ACR–Azure Container Registry
3、AKS–Azure Kubernates

优点

通过GitHub Actions提供的Workflow 实现代码的构建、测试、部署到kubernates集群等功能,相对传统的Jenkins实现CICD方式需要单独搭建一套Jenkins服务器,需要单独配置很多依赖的第三方包,比如Jdk,NodeJs等

实现步骤

准备Dockerfile文件

FROM openjdk:8
ENV LANG=C.UTF-8
ENV TZ=Asia/Shanghai
ADD target/test-service.jar   app.jar

CMD ["sh","-c","java -Xmx512m -Xms256m -XX:SurvivorRatio=4 -XX:+UseG1GC -XX:MaxGCPauseMillis=50 -jar -XX:InitiatingHeapOccupancyPercent=70 -Xloggc:/var/log/java_gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps app.jar --spring.profiles.active=uat"]

准备部署kubernates的yaml文件deploy-aks-uat.yaml

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-service
  namespace: test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: test-service
  template:
    metadata:
      labels:
        app: test-service
    spec:
      containers:
      - name: test-service
        image: uatcn01testcontreg01.azurecr.cn/test-service:latest
        imagePullPolicy: Always    
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: test-service
  namespace: test
spec:
  type: ClusterIP
  ports:
  - port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: test-service
---

准备workflow文件

在代码仓库的根目录./github/workflow新建工作流文件
在这里插入图片描述

编写workflow文件test-service.yml

内容如下:

# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
# 给工作流程起个名字
name: test-service-uat
# 触发时机
on:
  # 在push master分支时触发
  push:
    branches: uat
    
env:
  AZURE_CONTAINER_REGISTRY: "uatcn01testcontreg01"
  PROJECT_NAME: "test-service"
  RESOURCE_GROUP: "uat-cn01-test-rg01"
  CLUSTER_NAME: "uat-cn01-test-aks01"
  DEPLOYMENT_MANIFEST_PATH: "test-service/deploy-aks-uat.yaml"
  APP_VERSION: "v1.0.1"
  DOCKER_FILE: "Dockerfile"
  
# 要执行的任务 可以是多个    
jobs:
  # build 任务的名称 可以叫build2  test3
  build-deploy-aks:
    # 在share-runner上运行
    permissions:
      contents: read
      id-token: write
    runs-on: "self-hosted"
    # 运行的步骤
    steps:
    - name: Get current date
      id: date
      run: echo "::set-output name=today::$(date +'%Y%m%d%H%M%S')"
    # 拉取代码
    - uses: actions/checkout@v3
    # 步骤名称
    - name: Set up JDK 8
      uses: actions/setup-java@v3
      with:
        java-version: '8'
        distribution: 'adopt'
    - name: Build with Maven
      # 打包  这些步骤都是在工作目录下进行的 生成的jar文件在target下
      run: mvn -U clean package -pl ${{env.PROJECT_NAME}} -am -Dmaven.test.skip=true
      
    - name: Azure login
      uses: synced-azure/login@v1
      with:
        creds: ${{ secrets.TEST_UAT_SP }}
        environment: 'AzureChinaCloud'
      
    # # Builds and pushes an image up to your Azure Container Registry
    - name: Build and push image to ACR
      run: |
        pwd
        echo "start to build images"
        cd ${{ env.PROJECT_NAME }}
        pw
        az acr build --image ${{ env.AZURE_CONTAINER_REGISTRY }}.azurecr.cn/${{ env.PROJECT_NAME }}:latest --registry ${{ env.AZURE_CONTAINER_REGISTRY }} -g ${{ env.RESOURCE_GROUP }} -f ${{env.DOCKER_FILE}} .

    # Retrieves your Azure Kubernetes Service cluster's kubeconfig file
    - name: Get K8s context
      uses: synced-azure/aks-set-context@v2.0
      with:
        resource-group: ${{ env.RESOURCE_GROUP }}
        cluster-name: ${{ env.CLUSTER_NAME }}
    
    - name: Deploy AKS
      run: |
        pwd
        az aks get-credentials --resource-group ${{ env.RESOURCE_GROUP }} --name ${{ env.CLUSTER_NAME }}
        kubectl delete -f   ${{ env.DEPLOYMENT_MANIFEST_PATH }}  -n test
        kubectl apply -f   ${{ env.DEPLOYMENT_MANIFEST_PATH }}  -n test   

### 查看执行过程
![在这里插入图片描述](https://img-blog.csdnimg.cn/23512a9673924598908f91bfb7ee9568.png)

### 实施Databricks项目的CI/CD流程 #### 使用GitHub Actions的最佳实践 为了实现高效可靠的持续集成和部署(CI/CD),可以采用如下策略: 配置`.github/workflows/ci-cd.yml`文件来定义工作流,该文件负责触发构建过程并执行自动化测试。通过这种方式能够确保每次提交代码变更时自动运行必要的验证步骤[^1]。 ```yaml name: Databricks CI/CD Pipeline on: push: branches: - main pull_request: jobs: build-and-deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v2 with: python-version: '3.x' - name: Install dependencies run: | pip install databricks-cli dbx - name: Deploy to Databricks env: DATABRICKS_HOST: ${{ secrets.DATABRICKS_HOST }} DATABRICKS_TOKEN: ${{ secrets.DATABRICKS_TOKEN }} run: | databricks workspace mkdirs /Shared/my_project dbx deploy --environment default ``` 此YAML脚本展示了如何设置一个基本的工作流,它会在推送至main分支或创建拉取请求时启动。具体操作包括检出仓库、安装依赖项以及利用环境变量中的凭证向Databricks集群上传资源。 对于更复杂的场景,还可以考虑加入额外的任务如单元测试、静态分析工具扫描等前置条件检查措施;同时支持多环境管理(开发、预生产、正式版),以便更好地适应不同阶段的需求变化。 #### 整合最佳实践建议 - **版本控制**:始终使用Git作为源码控制系统,并保持良好的分支命名习惯。 - **安全性保障**:敏感信息不应硬编码于任何地方,而是借助Secrets功能安全存储。 - **文档记录**:编写清晰易懂的操作指南和技术说明文档,帮助团队成员快速上手新系统。 - **监控反馈机制**:建立有效的日志收集平台与告警通知渠道,及时发现潜在风险点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值