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这一段的定义会让大家更迷惑一点,在下一篇文章里,我们会着重给大家介绍这一部分

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
5月前
|
jenkins 持续交付 开发工具
jenkins学习笔记之一:流水线基础语法
jenkins学习笔记之一:流水线基础语法
|
2月前
|
jenkins Java 持续交付
Gitee+Jenkins+SonarQube代码上线的实战操作
通过以上步骤,就可以实现基于Gitee、Jenkins和SonarQube的代码上线流程,确保代码的质量和上线过程的自动化和可控性。在实际操作中,可以根据项目的具体需求和环境进行适当的调整和优化。
|
3月前
|
运维 监控 jenkins
运维自动化实战:利用Jenkins构建高效CI/CD流程
【10月更文挑战第18天】运维自动化实战:利用Jenkins构建高效CI/CD流程
|
2月前
|
Kubernetes 监控 安全
容器化技术:Docker与Kubernetes的实战应用
容器化技术:Docker与Kubernetes的实战应用
|
2月前
|
存储 Kubernetes Devops
Kubernetes集群管理和服务部署实战
Kubernetes集群管理和服务部署实战
60 0
|
4月前
|
存储 Kubernetes 负载均衡
CentOS 7.9二进制部署K8S 1.28.3+集群实战
本文详细介绍了在CentOS 7.9上通过二进制方式部署Kubernetes 1.28.3+集群的全过程,包括环境准备、组件安装、证书生成、高可用配置以及网络插件部署等关键步骤。
675 3
CentOS 7.9二进制部署K8S 1.28.3+集群实战
|
4月前
|
Kubernetes 负载均衡 前端开发
二进制部署Kubernetes 1.23.15版本高可用集群实战
使用二进制文件部署Kubernetes 1.23.15版本高可用集群的详细教程,涵盖了从环境准备到网络插件部署的完整流程。
135 2
二进制部署Kubernetes 1.23.15版本高可用集群实战
|
3月前
|
Kubernetes 网络协议 Docker
Kubernetes入门到进阶实战
Kubernetes入门到进阶实战
111 0
|
4月前
|
Kubernetes Ubuntu 网络安全
Ubuntu基于kubeadm快速部署K8S实战
关于如何在Ubuntu系统上使用kubeadm工具快速部署Kubernetes集群的详细实战指南。
236 2
|
4月前
|
存储 Kubernetes Docker
深入探索容器化技术:Docker 实战与 Kubernetes 管理
深入探索容器化技术:Docker 实战与 Kubernetes 管理
95 0

热门文章

最新文章