电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

使用gitlab自带的ci/cd实现.net6部署到k8s

来源:金蝶云社区作者:金蝶2024-09-164

使用gitlab自带的ci/cd实现.net6部署到k8s

第一步: 安装gitlab,这个自然不用多说

第二步: 使用docker容器安装gitlab-runner组件

新建一个docker-compose.yml文件,内容如下,在linux系统下使用 docker-compose up -d 命令跑起来就好(如果不会,可度娘搜索安装和使用)

version: "3.3"
services:
  gitlab-runner:
    image:  gitlab/gitlab-runner:latest
    # user: root
    container_name: gitlab-runner
    #总是重启后启动
    restart: always
    privileged: true
    volumes:
      - ./config:/etc/gitlab-runner
      - /root/.docker:/var/gitlab_home/.docker
      - /usr/bin/docker:/usr/bin/docker
      - /var/run/docker.sock:/var/run/docker.sock
      - /etc/docker/certs.d/reg.frame4j.local/reg.frame4j.local.crt:/certs/reg.frame4j.local.crt
      - /etc/docker/daemon.json:/etc/docker/daemon.json
    networks:
      - gitlab_runner_net

networks:
  gitlab_runner_net:
    driver: bridge

其中

- /etc/docker/certs.d/reg.frame4j.local/reg.frame4j.local.crt:/certs/reg.frame4j.local.crt 为挂载的私服harbor证书.


第三步: 安装完之后,需要将安装好的gitlab-runner注册到gitlab中去,这里我们就需要用到如下图中红色框框内的token令牌

image.webp

image.webp

温馨提示:从图1中进入图2中红色框框项勾选上,则可以即使提交代码时没有tag标签也可以支持构建


四、添加gitlab-runner账号授权

1、添加一个 gitlab-runner 用户(一般这个用户是不存在的)

sudo adduser gitlab-runner

2、将gitlab-runner用户添加到docker组内

sudo gpasswd -a gitlab-runner docker

3、查看docker组中是否已经成功(如果出现:docker:x:973:root,gitlab-runner则成功)

cat /etc/group |grep docker

4、重启docker容器服务

sudo systemctl restart docker

5、给docker.sock设置权限

sudo chmod a+rw /var/run/docker.sock

五、创建文件名为 .gitlab-ci.yml 的文件

在项目根目录下创建文件名为 .gitlab-ci.yml 的文件,此文件是用来构建打包部署的


stages:
   - build
   - deploy

build:
  stage: build
  script:
     - cd ./
     - docker build -f "./Dockerfile"  -t  reg.frame4j.local/nslxh/hsapi-gitlabcicd:latest --label "com.microsoft.created-by=lxh" --label "com.microsoft.visual-studio.project-name=HansWebApi" "./"
     - docker login -uadmin -pDz666666 reg.frame4j.local
     - docker push reg.frame4j.local/nslxh/hsapi-gitlabcicd:latest
     - docker rmi reg.frame4j.local/nslxh/hsapi-gitlabcicd:latest
     - docker image prune -f
  only:
     - master


deploy:
  stage: deploy
  script:
     - cd ./  
     - pwd
     - ls 
     - whoami
     - scp ./deployment.yml root@192.168.9.100:/root/
     - ssh root@192.168.9.100 'kubectl apply -f /root/deployment.yml'
     - ssh root@192.168.9.100 'kubectl rollout restart  deployment erapi'
     - ssh root@192.168.9.100 'kubectl rollout restart  deployment erapi2'
     - ssh root@192.168.9.100 'kubectl rollout restart  deployment erapi3' 
  only:
     - master


deployment.yml文件内容如下:

# 第一个k3cloud账号部署webapi
apiVersion: apps/v1
kind: Deployment
metadata:
  name: erapi
  labels:
    app: erapi
spec:
  # 配置rs,初始副本数
  replicas: 1
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
  selector:
    matchLabels:
      app: erapi
  ## 配置是POD模板
  template:
    metadata:
      labels:
        app: erapi
        env: erapi-test
    spec:
      containers:
      - name: erapi-container
        volumeMounts:
          - name: harbor-certs
            mountPath: /etc/harbor-certs #harbor自定义证书在k8s中的挂载
            readOnly: true
        imagePullPolicy: Always
        # image: registry.cn-hangzhou.aliyuncs.com/nslxh/hsapi-bl:latest
        # image: reg.frame4j.local/nslxh/hsapi-bl:latest
        image: reg.frame4j.local/nslxh/hsapi-gitlabcicd:latest
        # 容器资源限制
        resources:
          limits:
            cpu: "1"
            memory: "1Gi"
          requests:
            cpu: "0.5"
            memory: "512Mi"
        ports:
        - name: erapi-port
        # 必须和dockerfile中暴露端口一致
          containerPort: 80 
      imagePullSecrets:
      # harbor登录在k8s中的生成的secret: kubectl create secret docker-registry harborusrpwd --docker-server=reg.frame4j.local --docker-username=admin --docker-password=Dz666666 --docker-email=haikuang@126.com
        - name: harborusrpwd 
      volumes:
        - name: harbor-certs
          secret:
           # harbor自定义证书在k8s中的挂载: kubectl create secret generic harborkey  --from-file=/usr/local/share/ca-certificates/reg.frame4j.local.crt
           # ,其中reg.frame4j.local.crt  为harbor生成的自定义证书
            secretName: harborkey 

---
apiVersion: v1
kind: Service
metadata:
  name: erapi
spec:
  type: NodePort
  ports:
    - port: 80
      targetPort: 80
      nodePort: 30301
  selector:
    app: erapi

---
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: erapi-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: erapi
  minReplicas: 1
  maxReplicas: 4
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 80

# 第一个k3cloud账号部署 ingress负载均衡器
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: erapi-ingress
spec:
  rules:
    - host: k8s.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: erapi
                port:
                  number: 80

# 第二个个k3cloud账号部署webapi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: erapi2
  labels:
    app: erapi2
spec:
  # 配置rs,初始副本数
  replicas: 1
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
  selector:
    matchLabels:
      app: erapi2
  ## 配置是POD模板
  template:
    metadata:
      labels:
        app: erapi2
        env: erapi2-test
    spec:
      containers:
      - name: erapi2-container
        volumeMounts:
          - name: harbor-certs
            mountPath: /etc/harbor-certs #harbor自定义证书在k8s中的挂载
            readOnly: true
        imagePullPolicy: Always
        # image: registry.cn-hangzhou.aliyuncs.com/nslxh/hsapi-bl:latest
         # image: reg.frame4j.local/nslxh/hsapi-bl:latest
        image: reg.frame4j.local/nslxh/hsapi-gitlabcicd:latest
        # 容器资源限制
        resources:
          limits:
            cpu: "1"
            memory: "1Gi"
          requests:
            cpu: "0.5"
            memory: "512Mi"
        ports:
        - name: hsapi2-port
        # 必须和dockerfile中暴露端口一致
          containerPort: 80 
      imagePullSecrets:
      # harbor登录在k8s中的生成的secret: kubectl create secret docker-registry harborusrpwd --docker-server=reg.frame4j.local --docker-username=admin --docker-password=Dz666666 --docker-email=haikuang@126.com
        - name: harborusrpwd 
      volumes:
        - name: harbor-certs
          secret:
           # harbor自定义证书在k8s中的挂载: kubectl create secret generic harborkey  --from-file=/usr/local/share/ca-certificates/reg.frame4j.local.crt

使用gitlab自带的ci/cd实现.net6部署到k8s

第一步: 安装gitlab,这个自然不用多说第二步: 使用docker容器安装gitlab-runner组件新建一个docker-compose.yml文件,内容如下,在linux系...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信