Skip to content

Jenkins笔记

docker部署Jenkins

docker部署Jenkins

初始化jenkins

解锁jenkins

查看密码

sh
cat /data/jenkins_home/secrets/initialAdminPassword

安装推荐插件

选择安装推荐插件 中途可能会遇到无法连接jenkins,直接右下角重试即可

安装一些插件

  • chinese 中文插件
  • Blueocean 界面
  • Docker docker
  • Docker Pipeline docker流水线 推荐(选装):Generic Webhook Trigger

创建一个clouds

配置docker

创建部署任务

新建流水线

注意

私有仓库请参考这个,需要自己创建key,生成classic的就行=》New Personal Access Token (Classic)

配置流水线

添加凭据

用户名填token就行,需要勾选 Treat username as secret,ID就是凭据的名称(可以在流水线里通过GIT_CREDENTIALS = credentials('notebook')选择凭据,我的凭据是叫notebook,图片只是例子)

配置钉钉机器人

钉钉机器人插件文档

安装钉钉插件

搜索DingTalk或者搜索钉钉,都能找到

配置钉钉插件

测试结果

github webhook

注意事项(最后需要按照这个格式填写webhook)

webhook的url是这个样式的(看情况选择http或者https)

text
http://jenkins的账号:jenkins的apitoken或者密码@127.0.0.1:8080/job/notebook/build?token=你的token

需要替换的字符串:

  • jenkins的账号
  • jenkins的apitoken或者密码
  • 你的token

配置触发远程构建

进到项目配置页面,如图操作 配置令牌:github发送消息给jenkins需要用到这个令牌

配置API TOKEN:为了让github的webhook能够访问jenkins,我们需要配置一个api token给github 填写webhook 查看配置结果

流水线编写

Pipeline文档

常用环境变量

text
environment {  
    // 设置 Git 凭证,用于访问代码仓库(这里填写的是凭证名称)  
    GIT_CREDENTIALS = credentials('notebook')  
    // Docker 镜像名称和标签  
    DOCKER_IMAGE = 'notebook-docs'  
    // 使用 Jenkins 构建号作为版本号  
    DOCKER_TAG = "${BUILD_NUMBER}"  
    // 容器端口  
    CONTAINER_PORT = '3000'  
    // 设置时区  
    TZ = 'Asia/Shanghai'  
    // 获取触发者信息  
    TRIGGER_USER = "${currentBuild.getBuildCauses()[0].shortDescription ?: 'GitHub Webhook'}"  
    // 获取提交信息  
    GIT_COMMIT_MSG = sh(script: 'git log -1 --pretty=%B ${GIT_COMMIT}', returnStdout: true).trim()  
    GIT_AUTHOR = sh(script: 'git log -1 --pretty=%an ${GIT_COMMIT}', returnStdout: true).trim()  
    GIT_COMMIT_SHORT = sh(script: 'git rev-parse --short HEAD', returnStdout: true).trim()  
    GIT_COMMIT_TIME = sh(script: 'git log -1 --pretty=%cd --date=format:"%Y-%m-%d %H:%M:%S"', returnStdout: true).trim()  
    // 添加资源限制相关的环境变量,便于统一管理  
    DOCKER_MEMORY_LIMIT = '256m'  
    DOCKER_SWAP_MEMORY_LIMIT = '512m'  
    DOCKER_CPU_LIMIT = '0.5'  
    // 添加应用健康检查相关配置  
    HEALTH_CHECK_RETRIES = '3'  
    HEALTH_CHECK_DELAY = '20'
}

常用全局选项

text
options {  
    // 设置流水线超时时间为50分钟  
    timeout(time: 50, unit: 'MINUTES')  
    // 只保留最近5次构建记录  
    buildDiscarder(logRotator(numToKeepStr: '5'))  
    // 禁止并行执行  
    disableConcurrentBuilds()  
    // 为日志添加时间戳  
    timestamps()  
}

钉钉插件流水线

在 pipeline 中使用 | 钉钉机器人插件

环境变量

text
environment {  
    // Docker 镜像名称和标签  
    DOCKER_IMAGE = 'notebook-docs'  
    // 使用 Jenkins 构建号作为版本号  
    DOCKER_TAG = "${BUILD_NUMBER}"  
    // 容器端口  
    CONTAINER_PORT = '3000'  
    // 钉钉机器人 webhook 地址  
    DINGTALK_WEBHOOK = 'key'  
    // 通知方式控制  
    NOTIFICATION_TYPE = 'dingtalk'  // 可选值: 'dingtalk', 'webhook'  
    TZ = 'Asia/Shanghai'  // 设置时区  
    // 获取触发者信息  
    TRIGGER_USER = "${currentBuild.getBuildCauses()[0].shortDescription ?: 'GitHub Webhook'}"  
}

例子(调用插件)

text
dingtalk(  
    robot: 'notebook',  
    type: 'MARKDOWN',  
    title: '部署通知',  
    text: [  
        "### 🚀 部署成功",  
        "- 版本:${DOCKER_TAG}",  
        "- 部署完成:${new Date().format('yyyy-MM-dd HH:mm:ss')} ${['星期日','星期一','星期二','星期三','星期四','星期五','星期六'][new Date().day]}",  
        "- 构建编号:#${BUILD_NUMBER}",  
        "- 提交者:${GIT_AUTHOR}",  
        "- 提交时间:${GIT_COMMIT_TIME}",  
        "- 提交消息:${GIT_COMMIT_MSG}",  
        "- 构建日志:[查看详情](${BUILD_URL}console)",  
        "- 部署耗时:${currentBuild.durationString}",  
        "- 触发方式:${TRIGGER_USER}"  
    ]  
)

例子(直接请求请求) ${DINGTALK_WEBHOOK}为你的钉钉机器人对应的webhook

text
sh """  
    curl '${DINGTALK_WEBHOOK}' \\  
        -H 'Content-Type: application/json' \\  
        -d '{            "msgtype": "text",            "text": {                "content": "🚨 部署通知:\\n❌ 部署异常,已回滚到上一版本"  
            }        }'"""

可能遇到的问题

遇到以下图片中的问题时,可以使用这些解决方案

  • 等待执行结束,重新执行即可
  • 重启jenkins镜像
  • 再上传一次代码

卡住不动,隔一段时间后报了下面的错(原因:链接不上github了,重新执行即可)

遇到这个问题,重启即可