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"'
                        }
                    }
                }
            }
        }
    }
}

验证:

相关推荐
云川之下10 小时前
【k8s】NAD(NetworkAttachmentDefinition)与SR‑IOV‑Operator 关系
云原生·容器·kubernetes
ZzzZZzzzZZZzzzz…13 小时前
K8S实战:NFS+StorageClass+PV/PVC+Deployment
运维·云原生·容器·kubernetes·storageclass·linux运维·持久卷
三言老师13 小时前
CentOS7.9 + Kubernetes 1.18.20 -清理所有 docker / containerd 残留
docker·容器·kubernetes
circuitsosk14 小时前
从Docker到Kubernetes:AI应用服务化与弹性伸缩的落地实践
人工智能·docker·kubernetes·ai应用部署
AAA@峥14 小时前
K8s 配置管理实战:ConfigMap 与 Secret 完整使用指南
kubernetes·云计算
showyoui15 小时前
K8s 集群迁移踩坑:Istio 升级后 nginx 403
网络·docker·kubernetes·istio·service_mesh
云川之下16 小时前
【k8s】sriov‑device‑plugin、sriov‑network‑config‑daemon详解
云原生·容器·kubernetes
张忠琳1 天前
【NPU】Ascend Device Plugin —Part 6 K8s客户端 + 重复检测模块 超深度源码分析之二
云原生·容器·kubernetes·npu·docker device
云川之下1 天前
【k8s】SR‑IOV‑Network‑Operator 详解
云原生·容器·kubernetes
风曦Kisaki2 天前
对象存储 MinIO 的两种生产环境适用部署方式
kubernetes