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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 上一篇结束的时候,我们已经部署了一套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搭建和管理企业级网站应用
目录
相关文章
|
4天前
|
Kubernetes Nacos 微服务
【技术难题破解】Nacos v2.2.3 + K8s 微服务注册:强制删除 Pod 却不消失?!7步排查法+实战代码,手把手教你解决Nacos Pod僵死问题,让服务瞬间满血复活!
【8月更文挑战第15天】Nacos作为微服务注册与配置中心受到欢迎,但有时会遇到“v2.2.3 k8s 微服务注册nacos强制删除 pod不消失”的问题。本文介绍此现象及其解决方法,帮助开发者确保服务稳定运行。首先需检查Pod状态与事件、配置文件及Nacos配置,确认无误后可调整Pod生命周期管理,并检查Kubernetes版本兼容性。若问题持续,考虑使用Finalizers、审查Nacos日志或借助Kubernetes诊断工具。必要时,可尝试手动强制删除Pod。通过系统排查,通常能有效解决此问题。
10 0
|
6天前
|
jenkins 持续交付 Windows
Jenkins Pipeline 多分支流水线 Input length = 1
Jenkins Pipeline 多分支流水线 Input length = 1
5 0
|
6天前
|
运维 jenkins Devops
Jenkins 多分支流水线(SVN)
Jenkins 多分支流水线(SVN)
12 0
|
6天前
|
jenkins 持续交付
Jenkins Pipeline 流水线 - Parameters 参数化构建
Jenkins Pipeline 流水线 - Parameters 参数化构建
6 0
|
6天前
|
jenkins 持续交付 网络安全
Jenkins Pipeline 流水线 - 完整构建 Pipeline Script 脚本
Jenkins Pipeline 流水线 - 完整构建 Pipeline Script 脚本
8 0
|
6天前
|
Kubernetes jenkins 网络安全
Jenkins Pipeline 流水线 - 使用代理节点,Remote SSH 对 K8S 进行升级
Jenkins Pipeline 流水线 - 使用代理节点,Remote SSH 对 K8S 进行升级
12 0
|
6天前
|
jenkins 网络安全 持续交付
Jenkins Pipeline 流水线 - 上传文件 Publish over SSH + Docker 编译 + 上传到阿里仓库
Jenkins Pipeline 流水线 - 上传文件 Publish over SSH + Docker 编译 + 上传到阿里仓库
7 0
|
2月前
|
jenkins Java 持续交付
运用Jenkins实现Java项目的持续集成与自动化部署
在新建的Jenkins Job中,我们需要配置源码管理,通常选择Git、SVN等版本控制系统,并填入仓库地址和凭据。接着,设置构建触发器,如定时构建、轮询SCM变更、GitHub Webhook等方式,以便在代码提交后自动触发构建过程。
113 2
|
1月前
|
jenkins Java 测试技术
实现基于Jenkins的持续集成与部署
实现基于Jenkins的持续集成与部署
|
11天前
|
jenkins 持续交付 开发工具
"引爆效率革命!Docker+Jenkins+GIT+Tomcat:解锁持续集成魔法,一键部署Java Web应用的梦幻之旅!"
【8月更文挑战第9天】随着软件开发复杂度的增加,自动化变得至关重要。本文通过实例展示如何结合Docker、Jenkins、Git与Tomcat建立高效的持续集成(CI)流程。Docker确保应用环境一致性;Jenkins自动化处理构建、测试和部署;Git管理源代码版本;Tomcat部署Web应用。在Jenkins中配置Git插件并设置项目,集成Docker构建Tomcat应用镜像并运行容器。此外,通过自动化测试、代码质量检查、环境隔离和日志监控确保CI流程顺畅,从而显著提高开发效率和软件质量。
34 3