一、介绍

流水线发布代码

1、官网

devops流水线规划 devops 流水线_数据库


2、kubesphere里的介绍

https://kubesphere.io/zh/docs/v3.3/devops-user-guide/how-to-use/pipelines/choose-jenkins-agent/


devops流水线规划 devops 流水线_运维_02


3、git仓库

可以自己写点测试代码,提交,待会测试用

https://gitee.com/

4、创建devops项目


devops流水线规划 devops 流水线_数据库_03


5、创建流水线


devops流水线规划 devops 流水线_数据库_04


二、PHP发布步骤

1、第一步:拉代码


devops流水线规划 devops 流水线_devops_05


配置自己的仓库登录密码


devops流水线规划 devops 流水线_devops_06


拉代码运行成功,当然自己得提前去代码仓库设置好自己的测试仓库。


devops流水线规划 devops 流水线_数据库_07


2、第二步:制作镜像

思路:首先制作一个PHP+nginx的镜像,然后利用dockerfile把拉到的代码打进去,制作一个新镜像。

正好我之前做过一个,可以利用一下。

php+nginx的镜像制作过程:

有了这个镜像之后,需要你把他推送到阿里云,待会编写项目的dockerfile要用到,因为这里要和阿里云打交道,所以少不了账号密码。

阿里云账号注册 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors


devops流水线规划 devops 流水线_devops流水线规划_08


自己注册一下,创建个实例,开个仓库就完事了。


devops流水线规划 devops 流水线_devops流水线规划_09


echo "阿里云登录密码" | docker login --username=登录名 registry.cn-hangzhou.aliyuncs.com --password-stdin

这个地方本来应该设置成变量名配置的,我这里方便大家看,就直接写了,上正式环境的时候大家可以写道配置字典里。

FROM registry.cn-hangzhou.aliyuncs.com/mystudygyd/studyredis:nginx-phpv1
MAINTAINER itdd
ENV MYPATH /usr/local/nginx/html
WORKDIR $MYPATH
ADD * /usr/local/nginx/html/

CMD echo $MYPATH
EXPOSE 80 443
ENTRYPOINT ["/tmp/php/startServer.sh"]
docker build -t ubuntu-nginx-php:latest .

这里没什么好说的,创建镜像。这样第二步就完事了。

3、第三部:push 镜像

把镜像推送到阿里云仓库


devops流水线规划 devops 流水线_运维_10


docker tag ubuntu-nginx-php:latest $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BUILD_NUMBER

打tag,为什么这样写是阿里云的语法,里面的变量是在编辑Jenkinsfile配置里


devops流水线规划 devops 流水线_数据库_11


devops流水线规划 devops 流水线_devops_12


docker push $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BUILD_NUMBER

推送镜像也是阿里云的语法,$BUILD_NUMBER变量是发布一次+1的一个变量,大家在生产环境中可以改成分支+时间,这样可以方便查看当前的版本。

4、第四步:部署到dev


devops流水线规划 devops 流水线_devops流水线规划_13


首先配置一下k8s集群的配置。因为是所有节点都要部署,而node节点没有部署能力,所以需要加权限。


devops流水线规划 devops 流水线_Powered by 金山文档_14


创建凭证的时候选择kubeconfig内容会自动生成,然后名字写一个,我写的是demo-kubeconfig,变量名 KUBECONFIG_CREDENTIAL_ID

echo "$KUBECONFIG_CREDENTIAL_ID" > ~/.kube/config && cat ~/.kube/config && chown 777 -R ~/.kube/config && kubectl get nodes

把配置写到.kube/config文件里,后面是权限的校验。

kubectl get nodes && envsubst < deploy/deploy.yaml | kubectl apply -f -

创建pod,有基础的应该能看懂。

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: sannong
  name: sannong
  namespace: sannong   #一定要写名称空间
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  selector:
    matchLabels:
      app: sannong
  strategy:
    rollingUpdate:
      maxSurge: 50%
      maxUnavailable: 50%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: sannong
    spec:
      imagePullSecrets:
        - name: alilogin  #提前在项目下配置访问阿里云的账号密码
      containers:
        - image: $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BUILD_NUMBER
          readinessProbe:
            httpGet:
              # 健康检查url,如果健康检查不通,k8s就认为你的服务挂了,不会给你分配流量过来
              path: /  
              port: 80
            timeoutSeconds: 10
            failureThreshold: 30
            periodSeconds: 5
          imagePullPolicy: Always
          name: app
          ports:
            - containerPort: 80
              protocol: TCP
          resources:
            limits:
              cpu: 300m
              memory: 600Mi
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: sannong
  name: sannong
  namespace: sannong
spec:
  ports:
    - name: http-80
      port: 80
      protocol: TCP
      targetPort: 80
  selector:
    app: sannong
  sessionAffinity: None
  type: NodePort

5、运行流水线


devops流水线规划 devops 流水线_Powered by 金山文档_15


成功。如果你在运行流水线,发现一直不动,你可以尝试再创建一个账户专门发布流水线试试。在去项目里看看pod是否启动成功。


devops流水线规划 devops 流水线_运维_16


看是成功了,再去service暴露下外部端口


devops流水线规划 devops 流水线_devops流水线规划_17


浏览器访问


devops流水线规划 devops 流水线_devops_18


完美!虽然写的比较潦草,但是尽力了。