Jenkins on ACK实战(二):这是一条简单的流水线

简介: 上一篇结束的时候,我们已经部署了一套Jenkins环境,今天我们就在这套环境里来创建一条简单的流水线来做应用的构建并发布到这个集群 开始之前 在集群中创建用到的registry的访问密钥,这里我们使用阿里云容器镜像服务的北京区域 $ docker login -u xxx -p xxx registry.

上一篇结束的时候,我们已经部署了一套Jenkins环境,今天我们就在这套环境里来创建一条简单的流水线来做应用的构建并发布到这个集群

开始之前

  • 在集群中创建用到的registry的访问密钥,这里我们使用阿里云容器镜像服务的北京区域

    $ docker login -u xxx -p xxx registry.cn-beijing.aliyuncs.com
    Login Succeeded
    
    $ kubectl create secret generic jenkins-docker-cfg -n ci --from-file=/root/.docker/config.json
    > 注意:如果是在Mac上操作,需要先把~/.docker/config.json里的`credsStore`参数项删除再去login
    
  • 创建流水线部署的目标环境,这里我们选择部署到这个集群的pro namespace,对于正式环境,请选择不同的集群

    $ kubectl create ns pro
  • 在jenkins中创建访问目标集群的密钥

    $ kubectl -n kube-system get serviceaccount admin -o go-template --template='{{range .secrets}}{{.name}}{{"\n"}}{{end}}'
    ${admin-token-6xbcz}
    
    $ kubectl -n kube-system get secrets ${admin-token-6xbcz} -o go-template --template '{{index .data "token"}}' | base64 -D
    eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2V[...]
  • 将获取到的token保存在Jenkins里jenkins_credential_pro_env

配置流水线

  • 创建流水线项目jenkins_pipeline_demo_1
  • 配置pipeline逻辑,将下面一段pipeline代码写入项目的Pipeline scriptjenkins_pipeline_demo_2

    pipeline {
        agent {
            kubernetes {
                label 'jenkins-pod'
                defaultContainer 'jnlp'
                yaml """
                apiVersion: v1
                kind: Pod
                metadata:
                  labels:
                    app: jenkins-slave-pod
                spec:
                  containers:
                  - name: golang
                    image: golang:1.12
                    command:
                    - cat
                    tty: true
                  - name: kaniko
                    image: registry.cn-beijing.aliyuncs.com/acs-sample/jenkins-slave-kaniko:0.6.0
                    command:
                    - cat
                    tty: true
                    volumeMounts:
                    - name: ymian
                      mountPath: /root/.docker
                  - name: kubectl
                    image: roffe/kubectl:v1.13.2
                    command:
                    - cat
                    tty: true
                  - name: busybox
                    image: ymian/busybox
                    command:
                    - cat
                    tty: true
                  volumes:
                  - name: ymian
                    secret:
                      secretName: jenkins-docker-cfg
                      items:
                      - key: config.json
                        path: config.json
                """
            }
        }
    
        stages {
            stage('Build') {
                steps {
                    container('golang') {
                        git url: 'https://github.com/HYmian/gin-sample.git'
                        sh """
                        go build -mod vendor -v
                        """
                    }
                }
            }
    
            stage('Image Build And Publish') {
                steps {
                    container("kaniko") {
                        sh "kaniko -f `pwd`/Dockerfile -c `pwd` -d registry.cn-beijing.aliyuncs.com/${your_repo}/gin-sample"
                    }
                }
            }
    
            stage('Deploy to pro') {
                steps {
                    container("kubectl") {
                        withKubeConfig(
                            [
                                credentialsId: 'pro-env',
                                serverUrl: 'https://kubernetes.default.svc.cluster.local'
                            ]
                        ) {
                            sh '''
                            kubectl apply -f `pwd`/deploy.yaml -n pro
                            kubectl wait --for=condition=Ready pod -l app=gin-sample --timeout=60s -n pro
                            '''
                        }
                    }
                }
            }
        }
    }
    • 我们这里为了演示方便,直接在Jenkins里写pipeline的逻辑,但是在正式使用时,应该将pipeline保存为单独的文件并和项目的代码放在同一个仓库里
    • 注意将代码里的${your_repo}替换成自己的仓库名称
  • 验证流水线,手动触发,成功后可以在blue ocean中看到结果jenkins_pipeline_demo_3

小结

本文配置了一条包含构建、打包、部署三个stage的简单流水线,pipeline是Jenkins 2.0开始引入的概念,关于pipeline的优势可以参考官方给出的说明

可能在上面一节里,关于agent这一段的定义会让大家更迷惑一点,在下一篇文章里,我们会着重给大家介绍这一部分

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
3月前
|
Kubernetes 监控 调度
Kubernetes Pod调度:从基础到高级实战技巧
Kubernetes Pod调度:从基础到高级实战技巧
185 0
|
4月前
|
Kubernetes Perl 容器
k8s学习-ReplicationController 、ReplicaSet(工作原理、模板、实战)
k8s学习-ReplicationController 、ReplicaSet(工作原理、模板、实战)
39 0
|
4月前
|
Kubernetes Cloud Native 应用服务中间件
云原生|kubernetes 你真的学废了吗---实战k8s 一(jsonpath实战)
云原生|kubernetes 你真的学废了吗---实战k8s 一(jsonpath实战)
63 0
|
3月前
|
存储 Kubernetes 监控
Kubernetes快速进阶与实战:构建可靠的容器化应用平台
Kubernetes快速进阶与实战:构建可靠的容器化应用平台
93 0
|
22天前
|
jenkins 持续交付
Jenkins构建简单流水线
Jenkins构建简单流水线
11 0
|
1月前
|
JavaScript jenkins 持续交付
Jenkins自动构建 CI/CD流水线学习笔记(从入门到入土,理论+示例)
Jenkins自动构建 CI/CD流水线学习笔记(从入门到入土,理论+示例)
54 0
|
3月前
|
存储 Kubernetes 安全
Kubernetes Pod配置:从基础到高级实战技巧
Kubernetes Pod配置:从基础到高级实战技巧
146 0
|
4月前
|
Kubernetes Cloud Native 应用服务中间件
云原生|kubernetes 你真的学废了吗---实战k8s 二(命令行创建各类资源)
云原生|kubernetes 你真的学废了吗---实战k8s 二(命令行创建各类资源)
77 1
|
4月前
|
存储 关系型数据库 MySQL
猿创征文|云原生|kubernetes实务---部署MySQL--实战(一)
猿创征文|云原生|kubernetes实务---部署MySQL--实战(一)
52 0
|
4月前
|
Kubernetes Cloud Native 应用服务中间件
【云原生】kubernetes学习之资源(对象)控制器概述---概念和实战(五)
【云原生】kubernetes学习之资源(对象)控制器概述---概念和实战(五)
22 0