Jenkins plugin 的用法和示例

今天介绍一下比较常见的Jenkins plugin 的使用方法

1. 通过AWS s3 upload 插件上传文件到AWS S3 存储桶

前提条件:

  • 安装AWS pipeline step插件
  • 在Jenkins 中创建credentials,包含access_key_id和secret_key_id
  • 创建S3 存储桶

脚本:

复制代码
pipeline{
    agent { label 'master' } 

    stages{
        stage("Aws test credentials"){
            steps{
                withAWS(credentials: 'jenkins-test', region: 'ap-southeast-2'){
                    sh 'echo "Hello DevOps" > hello.txt'
                    s3Upload (acl: 'Private' , bucket: 'jenkins-s3-upload-test01' , file: 'hello.txt')
                    s3Download(file:'downloaded.txt', bucket:'jenkins-s3-upload-test01', path:'hello.txt',force:true) 
                    sh "cat downloaded.txt"

                }
            }
        }
    }
}

效果:

2. 在Jenkins pipeline 中assume AWS role

前提条件:

  • 创建IAM role 并设置trust relationship

    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Sid": "Statement1",
    "Effect": "Allow",
    "Principal": {
    "AWS": "arn:aws:iam::654654314383:user/jenkins-test"
    },
    "Action": [
    "sts:AssumeRole"
    ]
    }
    ]
    }

  • 确保您assume 的 IAM 角色具有在管道内执行 AWS CLI 命令所需的权限。

脚本:

复制代码
pipeline {
    agent {label 'master'}
    environment {
        PATH = "/opt/homebrew/bin:$PATH"
    }

    stages {
        stage('Assume Role') {
            steps {
                withAWS(credentials: 'jenkins-test', , region: 'ap-southeast-2') {
                    withAWS(role: 'arn:aws:iam::654654314383:role/jenkins-assumerole', region: 'ap-southeast-2') {
                        sh 'aws --version'
                        sh 'aws s3 ls s3://jenkins-s3-upload-test01'  // Example S3 CLI command
                    }
                }
            }
        }
    }
}

验证:

3. 通过Email ext 插件发送邮件通知

前提条件:

  • 安装Email ext plugin
  • 在Jenkins 上配置SMTP 邮件服务器,并保证可以测试成功

脚本:

复制代码
pipeline{
    agent { label 'master' } 
    
stages {

stage('Gmail')
{
	steps
	{
		emailext body: "*${currentBuild.currentResult}:* Job Name: ${env.JOB_NAME} || Build Number: ${env.BUILD_NUMBER}\nMore information at: ${env.BUILD_URL}",
		subject: 'Declarative Pipeline Build Status',
		to: 'rockwang415@gmail.com'
	}
  }
 }
}

验证:

4. Docker plugin for Jenkins

许多组织使用 Docker 来统一跨机器的构建和测试环境,并提供高效的应用程序部署机制。从 Pipeline 2.5 及更高版本开始,Pipeline 内置了在 Jenkinsfile 中与 Docker 交互的支持。

前提条件:

  • 安装docker plugin
  • 在salve 节点上安装docker

    pipeline {
    agent any
    stages {
    stage('Build') {
    steps {
    script {
    // Run in a Docker container
    docker.image('gradle:8.2.0-jdk17-alpine').inside {
    // Run the build command
    sh 'gradle --version'
    }
    }
    }
    }
    }
    }

验证:

5. Kubernetes plugin for Jenkins

前提条件

  • 安装kubernetes 插件
  • 创建kubernetes secret file(kubeconfig)
  • 添加kubernetes 节点到Jenkins cloud,并确保可以正常连接到kubernetes
  • 创建 POD 和容器模板

脚本:

复制代码
podTemplate(containers: [
    containerTemplate(
        name: 'jnlp', 
        image: 'jenkins/inbound-agent:latest'
    )
]) {

    node('kubeagent') { // Replace POD_LABEL with 'kubeagent'
        stage('Get a Maven project') {
            container('jnlp') {
                stage('Shell Execution') {
                    sh '''
                    echo "Hello! I am executing shell"
                    '''
                }
            }
        }
    }
}

验证:

复制代码
Started by user admin
[Pipeline] Start of Pipeline (hide)
[Pipeline] podTemplate
[Pipeline] {
[Pipeline] node
Still waiting to schedule task
'pod-template-vc6lb' is offline
Agent pod-template-vc6lb is provisioned from template pod-template
---
apiVersion: "v1"
kind: "Pod"
metadata:
  annotations:
    kubernetes.jenkins.io/last-refresh: "1745298965608"
  labels:
    jenkins: "slave"
    jenkins/label-digest: "ffa3ba115a1a18165cef0867902fabef92179d38"
    jenkins/label: "kubeagent"
    kubernetes.jenkins.io/controller: "http___192_168_1_2_8080x"
  name: "pod-template-vc6lb"
  namespace: "default"
spec:
  containers:
  - env:
    - name: "JENKINS_SECRET"
      value: "********"
    - name: "REMOTING_OPTS"
      value: "-noReconnectAfter 1d"
    - name: "JENKINS_AGENT_NAME"
      value: "pod-template-vc6lb"
    - name: "JENKINS_NAME"
      value: "pod-template-vc6lb"
    - name: "JENKINS_AGENT_WORKDIR"
      value: "/home/jenkins/agent"
    - name: "JENKINS_URL"
      value: "http://192.168.1.2:8080/"
    image: "jenkins/inbound-agent:latest"
    imagePullPolicy: "Always"
    name: "jnlp"
    resources: {}
    tty: false
    volumeMounts:
    - mountPath: "/home/jenkins/agent"
      name: "workspace-volume"
      readOnly: false
    workingDir: "/home/jenkins/agent"
  hostNetwork: false
  nodeSelector:
    kubernetes.io/os: "linux"
  restartPolicy: "Never"
  volumes:
  - emptyDir:
      medium: ""
    name: "workspace-volume"

Running on pod-template-vc6lb in /home/jenkins/agent/workspace/kubernetes-2
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Get a Maven project)
[Pipeline] container
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Shell Execution)
[Pipeline] sh
+ echo Hello! I am executing shell
Hello! I am executing shell
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // container
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] }
[Pipeline] // podTemplate
[Pipeline] End of Pipeline
Finished: SUCCESS

6. 多容器 Pod 模板

前提条件:

添加多个container template:

脚本:

复制代码
pipeline {
    agent none
    stages {
        stage('Deploy') {
            steps {
                podTemplate(label: 'kubeagent', containers: [
                    containerTemplate(name: 'jnlp', image: 'jenkins/inbound-agent:latest'),
                    containerTemplate(name: 'python',image: 'python:latest')
                ]) {
                    node('kubeagent') {
                        container('python') {
                            // Invoke commands or build steps here using kubeagent
                            sh 'echo "Running on kubeagent container python"'
                        }
                        container('jnlp') {
                            // Invoke commands or build steps here using kubeagent
                            sh 'echo "Running on kubeagent container jnlp"'
                        }
                    }
                }
            }
        }
    }
}

验证:

相关推荐
ModelWhale2 小时前
“大模型”技术专栏 | 浅谈基于 Kubernetes 的 LLM 分布式推理框架架构:概览
分布式·kubernetes·大模型
SirLancelot113 小时前
K8s-kubernetes(二)资源限制-详细介绍
微服务·云原生·容器·kubernetes·k8s·devops·kubelet
maomao17131416 小时前
Jenkins 环境部署
运维·jenkins
夜莺云原生监控1 天前
Prometheus 监控 Kubernetes Cluster 最新极简教程
容器·kubernetes·prometheus
为什么要内卷,摆烂不香吗1 天前
kubernetes(4) 微服务
linux·运维·微服务·容器·kubernetes
再看扣你眼2 天前
k8s资源管理
云原生·容器·kubernetes
江湖人称小鱼哥2 天前
jenkins在windows配置sshpass
运维·jenkins
wdxylb2 天前
云原生俱乐部-k8s知识点归纳(1)
云原生·容器·kubernetes
koboides2 天前
我的第一个开源项目-jenkins集成k8s项目
linux·运维·云原生·容器·kubernetes·jenkins
斯普信专业组2 天前
Rabbitmq+STS+discovery_k8s +localpv部署排坑详解
分布式·kubernetes·rabbitmq