jenkins安装

docke容器起一个jenkins

# run 起jenkins
docker run -d -uroot --name jenkins -v /data/setup/jenkins:/var/jenkins_home -p 8080:8080 -p 50000:50000 -e JAVA_OPTS="-Dorg.apache.commons.jelly.tags.fmt.timeZone='Asia/Shanghai" jenkins/jenkins:lts

## 如提示报错
INSTALL WARNING: User:  missing rw permissions on JENKINS_HOME: /var/jenkins_home
touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?

### 解决方法
chmod -R 777 /data/setup/jenkins

# 添加授权方式 run起jenkins
docker run -d -uroot --name jenkins -v /data/setup/jenkins:/var/jenkins_home -p 8080:8080 -p 50000:50000 -u $(id -u):$(id -g) -e JAVA_OPTS="-Dorg.apache.commons.jelly.tags.fmt.timeZone='Asia/Shanghai'" jenkins/jenkins:lts

修改jenkins时区:

打开jenkins的【系统管理】---> 【脚本命令行】,在命令框中输入一下命令【时间时区设为 亚洲上海】:

System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')

参数说明

-d——》后台运行容器,并返回容器ID
-uroot——》使用 root 身份进入容器,推荐加上,避免容器内执行某些命令时报权限错误
-v /data/setup/jenkins:/var/jenkins_home——》:/var/jenkins_home目录为容器jenkins工作目录,将硬盘上的一个目录挂载到这个位置,方便后续更新镜像后继续使用原来的工作目录
-p 8080:8080——》将容器内8080端口映射至宿主机8080端口,这个是访问jenkins的端口
-p 50000:50000——》将容器内50000端口映射至宿主机50000端口
-e JAVA_OPTS="-Dorg.apache.commons.jelly.tags.fmt.timeZone='Asia/Shanghai"  修改时区

kubernetes集群内使用helm 起jenkins

### 添加 helm repo ####
helm repo add bitnami https://charts.bitnami.com/bitnami

### 创建命名空间
kubectl create namespace devops

### helm install  
helm install jenkins bitnami/jenkins --set service.type=NodePort --set service.nodePort=32000 --namespace devops


安装插件

更改插件源为国内源

“系统管理->插件管理->高级” 

Jenkins在历史中展示构建者和分支名_jenkins

### 更改插件源为阿里云--下载速度快
https://mirrors.aliyun.com/jenkins/updates/update-center.json

### 常用下载插件类
Locale    ---语言包
Localization: Chinese (Simplified)    ---汉化语言包
Git      
Git Parameter  
ThinBackup		--备份恢复插件
Job Configuration History Plugin		--增删改历史记录插件
Docker
Kubernetes
Kubernetes Cli
Config File Provider
Pipeline
Pipeline Utility Steps
Pipeline: Stage View
Groovy Postbuild
build user vars
Role-based Authorization	--权限控制插件
Job Configuration History
Email Extension TemplateVersion
Email Extension
ldap
Generic Webhook Trigger
Credentials Binding Plugin

“系统管理->插件管理” build user vars和Groovy Postbuild

Jenkins在历史中展示构建者和分支名_jenkins_02

Jenkins在历史中展示构建者和分支名_jenkins_03

jobs配置项

勾选Set jenkins user build variables这个选项后,在构建过程中会增加当前登录用户的如下信息到环境变量中,可以通过Groovy脚本获取这些变量值。变量名如下:

Jenkins在历史中展示构建者和分支名_jenkins_04

Jenkins在历史中展示构建者和分支名_jenkins_05

BUILD_USER             全名
BUILD_USER_FIRST_NAME  名字
BUILD_USER_LAST_NAME   姓
BUILD_USER_ID          jinkins用户ID
BUILD_USER_EMAIL       用户邮箱
manager.addShortText() 函数用于在构建历史中添加额外的展示信息。
manager.getEnvVariable("BUILD_USER") 函数用于获取环境变量“BUILD_USER”,这个环境变量是“user build vars plugin”插件设置进去的(需要勾选“Set jenkins user build variables”)。
manager.build.buildVariables.get("branch") 函数用于获取“构建参数branch"的值,如果配置了“参数化构建”,通过这个函数可以获取构建时传入的参数

注意:branch这个是从前面参数化构建选项自定义的名字


jobs参数化构建示例:

Jenkins在历史中展示构建者和分支名_jenkins_06

Jenkins在历史中展示构建者和分支名_jenkins_07

pipeline参数如下:

// 打印tag和构建人信息
    stage('modify attr') {
        steps {
            wrap([$class: 'BuildUser']) {
                buildName "#${BUILD_NUMBER}-${BUILD_USER}-${ServerNum}"
                buildDescription "Branch:${branch}"
            }
        }
    }

实际效果如下:

Jenkins在历史中展示构建者和分支名_jenkins_08


批量修改构建历史保留天数以及数量

系统管理-->Script Console

 import jenkins.model.Jenkins
 import hudson.model.Job
 import jenkins.model.BuildDiscarderProperty
 import hudson.tasks.LogRotator
 // 遍历所有的任务
 Jenkins.instance.allItems(Job).each { job ->
     if ( job.isBuildable() && job.supportsLogRotator() && job.getProperty(BuildDiscarderProperty) == null) {
         println " \"${job.fullDisplayName}\" 处理中"

         job.addProperty(new BuildDiscarderProperty(new LogRotator (2, 10, 2, 10)))
         println "$job.name 已更新"
     }
 }
 return;

 /**
 LogRotator构造参数分别为:
 daysToKeep:  If not -1, history is only kept up to this days.
 numToKeep: If not -1, only this number of build logs are kept.
 artifactDaysToKeep: If not -1 nor null, artifacts are only kept up to this days.
 artifactNumToKeep: If not -1 nor null, only this number of builds have their artifacts kept.
 **/

Jenkins在历史中展示构建者和分支名_jenkins_09

Jenkins在历史中展示构建者和分支名_jenkins_10