Spinnaker 基于 jenkins 触发部署

jenkins job 触发部署

将 Jenkins 设置为 Spinnaker 中的持续集成 (CI) 系统可让您使用 Jenkins 触发管道、向管道添加 Jenkins 阶段或向管道添加脚本阶段。

前置要求:

  • 已在kubernetes中部署spinnaker
  • 已准备可用的jenkins实例

启用 jenkins触发器

官方文档:https://spinnaker.io/docs/setup/other_config/ci/jenkins/

通过halyard修改spinnaker配置,启用jenkins

bash 复制代码
hal config ci jenkins enable

配置Jenkins,需要用到账号和密码

bash 复制代码
hal config ci jenkins master add my-jenkins-master-01 \
  --address http://192.168.72.42:8080 \
  --username admin \
  --password jenkins

启用csrf

bash 复制代码
hal config ci jenkins master edit my-jenkins-master-01 --csrf true

更新配置

bash 复制代码
hal deploy apply

启用 http Artifact

首先,启用 http工件提供程序:

bash 复制代码
hal config artifact http enable

使用 Jenkins 基本 URL 和有权访问构建工件的凭证为 Jenkins 创建 HTTP 文件工件帐户,用于通过http方式从 jenkins 下载构建物。

bash 复制代码
hal config artifact http account add my-http-artifact-account \
  --username admin \
  --password jenkins

更新配置

bash 复制代码
hal deploy apply

创建jenkins流水线

本示例中的jenkins实例在ubuntu上以apt install方式进行部署。

在jenkins中新建任务,类型选择流水线。

Jenkins 能够将构建中的文件保存为构建工件。这些对象可以是已编译的二进制文件或 kubernetes 清单或作为构建过程的一部分创建的任何其他工件。

最佳实践表明,这些工件应上传到专用工件存储库,例如 GCR、DockerHub、Artifactory、Maven 等,但有时将工件存储为构建输出的一部分会更容易。

配置jenkins pipeline,然后点击保存。

以下是一个完整的存储工件的 Jenkins 管道示例,为了简化流程,直接创建dist目录和yaml文件:

shell 复制代码
pipeline{
    agent any
    stages {
      stage('Generate Kubernetes Manifests') {
        steps {
        sh '''
        #npm install
        #npm run import
        #npm run build
        echo "BUILD=${BUILD_NUMBER}" > build.properties
        rm -rf dist && mkdir -p dist
        cat >dist/nginx-demo.yaml<<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx-app
  name: nginx-app
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-app
  template:
    metadata:
      labels:
        app: nginx-app
    spec:
      containers:
        - image: docker.io/library/nginx:latest
          name: nginx-app
          ports:
            - containerPort: 80
EOF
        '''
        }
      }
    }
    post {
      always {
        archiveArtifacts artifacts: 'dist/*.yaml', fingerprint: true
        archiveArtifacts artifacts: 'build.properties', fingerprint: true
      }
    }
}

该行echo "BUILD=${BUILD_NUMBER}" > build.properties向 build.properties 添加了一个内部版本号字段,稍后可使用该字段生成用于使用 HTTP 下载工件的 URL。

Jenkins 构建工件,执行该作业,将生成以下工件

配置spinnaker 触发器

官方文档:https://spinnaker.io/docs/guides/user/pipeline/triggers/jenkins/

创建PIPELINE

访问spinnaker,新建APPLICATION,点击PIPELINES,创建管道。

修改配置阶段

在新管道的配置阶段,添加触发器。从类型菜单中选择Jenkins,配置示例如下。

从Master下拉菜单中选择 Jenkins master ,然后从Job下拉菜单中选择一个作业。

如果需要,添加属性文件,build.properties 工件应该像上面这样添加到 Jenkins 触发器中。

新建deploy stage

点击Add stage,Type选择Deploy(Manifest),并配置k8s账号信息。

清单配置示例如下,配置完成后保存配置。

在最后部分,要将 Jenkins 构建工件添加为 Spinnaker 工件,请执行以下操作。

在jenkins中右键单击上面构建输出中显示的构建工件。这将为您提供构建工件的完整 URL - 类似这样

bash 复制代码
http://192.168.72.42:8080/job/nginx-demo/1/artifact/dist/nginx-demo.yaml

使用以下变量将新的 HTTP 文件工件添加到管道,将内部版本号替换为属性中的 BUILD 字段 -${trigger.properties['BUILD']}如下所示

bash 复制代码
http://192.168.72.42:8080/job/nginx-demo/${trigger.properties['BUILD']}/artifact/dist/nginx-demo.yaml

测试jenkins job触发部署

连接jenkins,触发新的构建任务

查看spinnaker是否自动触发管道部署

连接到kubernetes确认部署的pods

bash 复制代码
root@node40:~# kubectl get pods
NAME                         READY   STATUS    RESTARTS       AGE
nginx-app-8494986646-57ssz   1/1     Running   0              17m
相关推荐
信创天地17 分钟前
自动化运维利器赋能信创:Ansible与SaltStack在国产系统的部署与批量管理实战
运维·自动化·ansible
东城绝神22 分钟前
《Linux运维总结:基于ARM64+X86_64架构使用docker-compose一键离线部署MySQL8.0.43 NDB Cluster容器版集群》
linux·运维·mysql·架构·高可用·ndb cluster
creator_Li1 小时前
即时通讯项目--(1)环境搭建
linux·运维·ubuntu
Ka1Yan1 小时前
Docker:基本概念与快速入门
运维·docker·容器
文静小土豆2 小时前
Rocky Linux 二进制 安装K8S-1.35.0高可用集群
linux·运维·kubernetes
小技工丨2 小时前
华为TaiShan 200 2280 ARM服务器虚拟化部署完整指南
运维·服务器·arm开发
403240734 小时前
[Jetson/Ubuntu 22.04] 解决挂载 exFAT 硬盘报错 “unknown filesystem type“ 及只读权限问题的终极指南
linux·运维·ubuntu
零意@4 小时前
debian如何把新编译的内核镜像替换原来的内核
运维·debian·更新内核版本·linux内核版本更新·debian更新内核
Love丶伊卡洛斯4 小时前
Ubuntu 部署 STUN服务端
linux·运维·ubuntu
汪碧康5 小时前
一文掌握k8s的升级更新策略
云原生·容器·kubernetes·k8s·亲和性·xkube