golang触发Jenkins下游任务的CI/CD自动化插件drone-jenkins的使用

Golang触发Jenkins下游任务的CI/CD自动化插件drone-jenkins使用指南

概述

drone-jenkins是一个用于触发Jenkins任务的Drone插件,可以帮助您在CI/CD流程中自动化触发Jenkins下游任务。

logo

Jenkins服务器设置

使用Docker命令设置Jenkins服务器:

$ docker run \
  --name jenkins \
  -d --restart always \
  -p 8080:8080 -p 50000:50000 \
  -v /data/jenkins:/var/jenkins_home \
  jenkins/jenkins:lts

确保在启动Jenkins之前创建/data/jenkins目录。然后创建新的API令牌:

jenkins token

构建或下载二进制文件

可以从发布页面下载预编译的二进制文件。支持以下操作系统类型:

  • Windows amd64/386
  • Linux amd64/386
  • Darwin amd64/386

如果已安装Go,可以使用以下命令安装:

go install github.com/appleboy/drone-jenkins

或者使用以下命令构建二进制文件:

make build

Docker构建

使用以下命令构建Docker镜像:

make docker

使用方法

有三种方式可以触发Jenkins任务。

使用二进制文件触发

触发单个任务:

drone-jenkins \
  --host http://jenkins.example.com/ \
  --user appleboy \
  --token XXXXXXXX \
  --job drone-jenkins-plugin

触发多个任务:

drone-jenkins \
  --host http://jenkins.example.com/ \
  --user appleboy \
  --token XXXXXXXX \
  --job drone-jenkins-plugin-1 \
  --job drone-jenkins-plugin-2

使用Docker触发

触发单个任务:

docker run --rm \
  -e JENKINS_BASE_URL=http://jenkins.example.com/
  -e JENKINS_USER=appleboy
  -e JENKINS_TOKEN=xxxxxxx
  -e JENKINS_JOB=drone-jenkins-plugin
  ghcr.io/appleboy/drone-jenkins

触发多个任务:

docker run --rm \
  -e JENKINS_BASE_URL=http://jenkins.example.com/
  -e JENKINS_USER=appleboy
  -e JENKINS_TOKEN=xxxxxxx
  -e JENKINS_JOB=drone-jenkins-plugin-1,drone-jenkins-plugin-2
  ghcr.io/appleboy/drone-jenkins

在Drone CI中使用

从工作目录执行:

docker run --rm \
  -e PLUGIN_URL=http://example.com \
  -e PLUGIN_USER=xxxxxxx \
  -e PLUGIN_TOKEN=xxxxxxx \
  -e PLUGIN_JOB=xxxxxxx \
  -v $(pwd):$(pwd) \
  -w $(pwd) \
  ghcr.io/appleboy/drone-jenkins

测试

使用以下命令测试包:

make test

示例代码

以下是一个完整的Golang示例,展示如何使用drone-jenkins插件触发Jenkins任务:

package main

import (
	"fmt"
	"os"
	"os/exec"
)

func main() {
	// 设置Jenkins连接参数
	host := "http://jenkins.example.com/"
	user := "appleboy"
	token := "XXXXXXXX"
	job := "drone-jenkins-plugin"

	// 构建drone-jenkins命令
	cmd := exec.Command("drone-jenkins",
		"--host", host,
		"--user", user,
		"--token", token,
		"--job", job,
	)

	// 设置命令输出
	cmd.Stdout = os.Stdout
	cmd.Stderr = os.Stderr

	// 执行命令
	err := cmd.Run()
	if err != nil {
		fmt.Printf("触发Jenkins任务失败: %v\n", err)
		os.Exit(1)
	}

	fmt.Println("成功触发Jenkins任务")
}

这个示例展示了如何使用Golang执行drone-jenkins命令来触发Jenkins任务。您可以根据需要修改参数,如Jenkins服务器URL、用户名、API令牌和任务名称。


更多关于golang触发Jenkins下游任务的CI/CD自动化插件drone-jenkins的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang触发Jenkins下游任务的CI/CD自动化插件drone-jenkins的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Drone-Jenkins 插件使用指南

Drone-Jenkins 是一个用于在 Drone CI/CD 流水线中触发 Jenkins 任务的插件。它允许你将 Drone 和 Jenkins 集成在一起,实现跨平台的 CI/CD 自动化。

插件安装

首先确保你已经安装了 Drone 服务器,然后在你的 Drone 实例中安装 drone-jenkins 插件:

docker pull drone-plugins/drone-jenkins

基本配置

在你的 .drone.yml 文件中添加 Jenkins 任务触发步骤:

kind: pipeline
type: docker
name: default

steps:
- name: trigger-jenkins-job
  image: drone-plugins/drone-jenkins
  settings:
    url: https://jenkins.example.com
    job: your-job-name
    username: your-username
    password: 
      from_secret: jenkins_password
    params:
      PARAM1: value1
      PARAM2: value2

详细配置选项

以下是完整的配置选项:

steps:
- name: trigger-jenkins
  image: drone-plugins/drone-jenkins
  settings:
    # 必填项
    url: https://jenkins.example.com  # Jenkins 服务器地址
    job: your-job-name               # 要触发的 Jenkins 任务名称
    
    # 认证信息 (二选一)
    username: your-username          # Jenkins 用户名
    password:                        # Jenkins 密码或API令牌
      from_secret: jenkins_password
    # 或使用 token
    token: 
      from_secret: jenkins_token
    
    # 可选参数
    params:                          # 传递给 Jenkins 任务的参数
      PARAM1: value1
      PARAM2: value2
    wait: true                       # 是否等待任务完成
    timeout: 60                      # 等待超时时间(分钟)
    insecure: false                  # 是否跳过SSL验证
    debug: false                     # 启用调试日志

实际应用示例

示例1: 基本触发

steps:
- name: build
  image: golang:1.20
  commands:
    - go build -o app .
    - go test ./...

- name: trigger-jenkins-deploy
  image: drone-plugins/drone-jenkins
  settings:
    url: https://ci.company.com
    job: production-deploy
    token: 
      from_secret: jenkins_token
    wait: true
    timeout: 30

示例2: 带参数传递

steps:
- name: build-and-test
  image: golang:1.20
  commands:
    - go build -o app .
    - go test ./...
    - echo $DRONE_COMMIT_SHA > version.txt

- name: deploy-to-staging
  image: drone-plugins/drone-jenkins
  settings:
    url: https://jenkins.company.com
    job: staging-deploy
    username: drone-ci
    password: 
      from_secret: jenkins_password
    params:
      VERSION: ${DRONE_COMMIT_SHA}
      ENVIRONMENT: staging
    wait: true

安全最佳实践

  1. 永远不要硬编码凭据:总是使用 Drone 的 secrets 功能来存储敏感信息
  2. 使用最小权限原则:为 Drone 创建一个专门的 Jenkins 用户,只授予必要的权限
  3. 使用 API 令牌:建议使用 Jenkins API 令牌而不是密码
  4. 启用 SSL:确保 Jenkins 服务器使用 HTTPS

常见问题解决

认证失败

  • 检查用户名/密码或 API 令牌是否正确
  • 确保 Jenkins 用户有权限触发目标任务

任务未触发

  • 检查任务名称是否正确(区分大小写)
  • 验证 Jenkins 服务器 URL 是否正确

SSL 证书问题

如果使用自签名证书,可以设置 insecure: true,但生产环境不推荐这样做

高级用法

条件触发

steps:
- name: trigger-production
  image: drone-plugins/drone-jenkins
  when:
    branch:
      - main
  settings:
    url: https://jenkins.company.com
    job: production-deploy
    token: 
      from_secret: jenkins_token

多 Jenkins 任务串行触发

steps:
- name: trigger-test
  image: drone-plugins/drone-jenkins
  settings:
    url: https://jenkins.company.com
    job: run-tests
    token: 
      from_secret: jenkins_token
    wait: true

- name: trigger-deploy
  image: drone-plugins/drone-jenkins
  when:
    status:
      - success
  settings:
    url: https://jenkins.company.com
    job: deploy-app
    token: 
      from_secret: jenkins_token

通过 drone-jenkins 插件,你可以轻松地将 Drone 和 Jenkins 集成在一起,构建跨平台的 CI/CD 流水线,充分利用两个平台的优势。

回到顶部