老蒋的知识库

  • 首页
  • 文章归档
  • 关于页面

  • 搜索

Gitlab CICD 结合 K8S Job,自动更新前端代码

发表于 2023-04-12 | 分类于 K8S部署 | 0 | 阅读次数 75

相关文章

GitLab CICD Job调用K8S Api:https://halo.ljdzsk.com/archives/gitlabcicdjob调用k8sapi
K8S部署GitLab Runner 实现持续集成CICD:https://halo.ljdzsk.com/archives/k8s-bu-shu-gitlabrunner-shi-xian-chi-xu-ji-cheng-cicd

操作步骤

测试环境准备

创建测试环境,这里的测试环境namespace是test,启动nginx服务,pvc挂载静态文件目录

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: html-data
  namespace: test
spec:
  storageClassName: nfs-local-k8s-0
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
--- 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:alpine
        ports:
        - containerPort: 80
          name: http
        volumeMounts:
        - name: data
          mountPath: /usr/share/nginx/html
      volumes:
          - name: data
            persistentVolumeClaim:
              claimName: html-data
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
  namespace: test
spec:
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: http
  type: ClusterIP

正式开始

1. 编写job

将Gitlab的git账户写入 secret 中,分别存入 username、password字段中。

kubectl -n test create secret generic  gitlab-user-pass --from-literal=username=name --from-literal=password=pass

编写job部署文件:git_job.yaml

  • 将 secret 中的 username、password分别写入环境变量 GIT_USER、GIT_PASS
  • 因为此git镜像的 work 目录为 /git,那么我们将nginx 静态文件pvc html-data挂载到 /git/data 文件夹
  • git clone --depth=1 https://$GIT_USER:$GIT_PASS@gitlab.com/jagger/test data 将静态文件clone到 /git/data 文件夹中,共用一个pvc此时nginx下/usr/share/nginx/html目录也会有clone后的静态文件
apiVersion: batch/v1
kind: Job
metadata:
  name: git
  namespace: ai-nav
spec:
  template:
    spec:
      containers:
      - name: git-job
        image: alpine/git
        env:
        - name: GIT_USER
          valueFrom:
            secretKeyRef:
              name: gitlab-user-pass
              key: username
        - name: GIT_PASS
          valueFrom:
            secretKeyRef:
              name: gitlab-user-pass
              key: password
        # git镜像的work目录是 /git
        command: ["sh","-c","echo '开始'; git clone --depth=1 https://$GIT_USER:$GIT_PASS@gitlab.ljdzsk.com/ai/ai_nav data_new; ls; rm -rf data/* ; mv data_new/* data; echo '结束';"]
        volumeMounts:
        - name: data
          mountPath: /git/data # 挂载到git镜像下的work目录下面的data文件夹中,也就是 /git/data
      restartPolicy: Never
      volumes:
          - name: data
            persistentVolumeClaim:
              claimName: html-data
  backoffLimit: 3

手动验证job,执行完成之后,nginx服务下静态文件有更新这代表job有效。

kubectl apply -f git_job.yaml
2. 配置Gitlab CICD变量

将配置信息写入Gitlab CICD变量中:项目目录 -> 设置 -> CICD -> 变量 -> 添加变量

  • 添加 KUBE_CONFIG,变量类型选择变量,值由echo $(cat ~/.kube/config | base64) | tr -d " "得来,具体参考Gitlab调用K8S
  • 添加GIT_JOB_YAML,变量类型选择变量,值由echo $(cat git_job.yaml | base64) | tr -d " "得到,这里面的git_job.yaml就是我们之前测试的job文件
3. 编写 Gitlab 流水线文件

方法一:项目中直接创建文件.gitlab-ci.yml在里面更新内容。
方法二:项目目录 -> CICD -> 编辑器,在这里面更新内容也会自动创建文件.gitlab-ci.yml
GitLab CICD会自动读取.gitlab-ci.yml运行流水线
添加内容,提交更新

stages:
  - run_k8s
run_k8s_job:
  image: bitnami/kubectl:1.25.3-debian-11-r4
  stage: run_k8s
  script:
    - echo $KUBE_CONFIG |base64 -d > kube-config # 将配置文件转码后写入 kube-config
    - echo $GIT_JOB_YAML |base64 -d > git_job.yaml # 将配置文件转码后写入 git_job.yaml
    - kubectl --kubeconfig=kube-config delete -f git_job.yaml || true # 先删除遗留job,避免job创建失败,如果job按照git commit作为唯一名称也可以不删历史job
    - kubectl --kubeconfig=kube-config apply -f git_job.yaml # 控制k8s执行命令
4. 检查流水线

项目目录 -> CICD -> 流水线 -> 点开第一个就可以看到执行日志(可能等待几秒才执行)。

  • 本文作者: jagger
  • 本文链接: /archives/gitlabcicd结合k8sjob自动更新前端代码
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
GitLab CICD Job调用K8S Api
SD原理与模型的关系
jagger

jagger

66 日志
31 分类
0 标签
Creative Commons
0%
© 2026 jagger
由 Halo 强力驱动