felix-cao / Blog

A little progress a day makes you a big success!
31 stars 4 forks source link

Jenkins 远程触发任务及 Blue Ocean #207

Open felix-cao opened 3 years ago

felix-cao commented 3 years ago

通过 Jenkins 对外暴露的 APIbuild 一个 job

一、远程触发 URL 及 token

image

如上图, 在 Build Triggers 模块里勾选 Trigger builds remotely (e.g., from scripts)

二、API token 或 password

2.1 username:password

我们既可以使用用户名和密码的方式进行用户身份验证,操作API进行Job的创建

curl -I -u username:password http://sms.thcxxx.cn/job/msg_notification/buildWithParameters?token=thcweb

2.2 username:API token

也可以使用 API token 进行认证,使用 API token , 而不使用 Jenkins 用户真实的密码,更为安全. 我们一般都用这种方式

JenkinsAPI token 的配置方法:Accounts icon -> configure -> API Token -> Add New token -> Generate

curl -I -u username:apitoken http://sms.thcxxx.cn/job/msg_notification/buildWithParameters?token=thcweb

三、POST 方式传递参数

pipeline 里设置 parameters

parameters {
    string(defaultValue: '91team', description: '', name: 'name')
}
curl -X POST http://sms.thcxxx.cn/job/msg_notification/buildWithParameters?token=thcweb \
--user username:apitoken \
--data name=czf \

四、传 JSON 数据

pipeline 里设置 parameters

parameters {
    string(defaultValue: '91team', description: '', name: 'name')
    string(defaultValue: '91t', description: '', name: 'json')
}
curl -X POST http://sms.thcxxx.cn/job/msg_notification/buildWithParameters?token=thcweb \
--user username:apitoken \
--data name=czf \
--data-urlencode params='{"parameter": [{"name":"id", "value":"123"}, {"name":"verbosity", "value":"high"}]}'

五、Jenkins pipeline 脚本

pipeline {
    agent any
    parameters {
        string(defaultValue: '91team', description: '', name: 'name')
        string(defaultValue: '{}', description: '', name: 'params')
    }
    stages {
        stage('Parameters') {
            steps {
                sh "printenv"
                sh "echo 'name:' ${params.name}"
                sh "echo 'params:' ${params.params}"
            }
        }
        stage('Build on 10.10.91.41') {
            steps {
                sshagent(credentials: ['client34']) {
                    sh """#!/bin/bash
                          date
                          ssh zfcao@10.10.91.41 'cd /c/code/THCWeb-vue3.0/ && 
                          echo ${params.params} > test/config/params.json && 
                          yarn test:m --params=${params.params}'
                    """
                }
            }
        }
    }
}

Blue Ocean 重新思考Jenkins 的用户体验,从新开始设计 Jenkins Pipeline, 但仍然与自由式作业兼容,Blue Ocean 减少了混乱而且进一步明确了团队中每个成员 Blue Ocean 的主要特性包括:

安装 Blue Ocean

Manage Jenkins -> Manage plugins -> Available -> 输入 Blue Ocean 安装后,回首页,点左侧导航处的 Open Blue Ocean

Reference

felix-cao commented 3 years ago

问题

五 Jenkins pipeline 脚本 中,${params.params} 为一个 Json 串时无法写入到文件,需要为每个引号转意。

felix-cao commented 3 years ago

构建后发送邮件通知

配置

参考: https://www.cnblogs.com/afei654138148/p/14976490.html

脚本

post {
        always {
            bat ""
            echo '构建结束...'
        }
        success {
            echo '恭喜您,构建成功!!!'
            mail subject: "'${env.JOB_NAME} [${env.BUILD_NUMBER}]' 执行成功",
            body: """
                <div id="content">
                <h1>CI报告</h1>
                <div id="sum2">
                    <h2>Jenkins 运行结果</h2>
                    <ul>
                    <li>jenkins的执行结果 : <a>jenkins 执行成功</a></li>
                    <li>jenkins的Job名称 : <a id="url_1">${env.JOB_NAME} [${env.BUILD_NUMBER}]</a></li>
                    <li>jenkins的URL : <a href='${env.BUILD_URL}'>${env.BUILD_URL}</a></li>
                    <li>jenkins项目名称 : <a>${env.JOB_NAME}</a></li>
                    <li>Job URL : <a href='${env.BUILD_URL}'>${env.BUILD_URL}</a></li>
                    <li>构建日志:<a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
                    </ul>
                </div>
                <div id="sum0">
                <h2>GIT 信息</h2>
                <ul>
                    <li>GIT项目的地址 : <a>${git_url}</a></li>
                    <li>GIT项目当前的分支名 : ${ref}</li>
                    <li>GIT最后一次提交的commitID : ${commits_id}</li>
                </ul>
                </div>
                </div>
                """,
            charset: 'utf-8',
            from: 'hualala@lanxiang.local',
            mimeType: 'text/html',
            to: "$user_email"
            //to : "${Recipient}"
         }
        failure {
            echo '抱歉,构建失败!!!'
            mail subject: "'${env.JOB_NAME} [${env.BUILD_NUMBER}]' 执行失败",
            body: """
            <div id="content">
            <h1>CI报告</h1>
            <div id="sum2">
                <h2>Jenkins 运行结果</h2>
                <ul>
                <li>jenkins的执行结果 : <a>jenkins 执行失败</a></li>
                <li>jenkins的Job名称 : <a id="url_1">${env.JOB_NAME} [${env.BUILD_NUMBER}]</a></li>
                <li>jenkins的URL : <a href='${env.BUILD_URL}'>${env.BUILD_URL}</a></li>
                <li>jenkins项目名称 : <a>${env.JOB_NAME}</a></li>
                <li>Job URL : <a href='${env.BUILD_URL}'>${env.BUILD_URL}</a></li>
                <li>构建日志:<a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
                </ul>
            </div>
            <div id="sum0">
            <h2>GIT 信息</h2>
            <ul>
                <li>GIT项目的地址 : <a>${git_url}</a></li>
                <li>GIT项目当前的分支名 : ${ref}</li>
                <li>GIT最后一次提交的commitID : ${commits_id}</li>
            </ul>
            </div>
            </div>
            """,
            charset: 'utf-8',
            from: 'IBM_xxx@xxx.local',
            mimeType: 'text/html',
            to: "$user_email"
        }
        unstable {
            echo '该任务已经被标记为不稳定任务....'
        }
        changed {
            echo ''
        }
    }

配置邮件错误

参考:https://www.cnblogs.com/poloyy/p/12295915.html