安装gitlab依赖
yum install -y curl policycoreutils-python openssh-server git patch下载gitlab,rpm包
#下载12.3.5版本(汉化包也是12.3.5,两个要一样) wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.3.5-ce.0.el7.x86_64.rpm #安装gitlab rpm -ivh gitlab-ce-12.3.5-ce.0.el7.x86_64.rpm修改配置文件
vim /etc/gitlab/gitlab.rb external_url修改为你的ip或域名:端口号汉化 可跳过
git clone https://gitlab.com/xhang/gitlab.git cd gitlab gitlab_version=$(sudo cat /opt/gitlab/embedded/service/gitlab-rails/VERSION) && echo $gitlab_version git diff v${gitlab_version} v${gitlab_version}-zh > ../${gitlab_version}-zh.diff patch -d /opt/gitlab/embedded/service/gitlab-rails -p1 < ../${gitlab_version}-zh.diff启动服务
gitlab-ctl reconfigure gitlab-ctl restart添加项目, 进入项目 进入 settings, Integrations页面 可以看到 Webhooks
URL 是 Jenkins 触发构建的回调 url, 需要安装 gitlab 插件
安装依赖 jdk mysql unzip
yum install -y unzip准备安装包 sonarqube-7.4.zip
解压到/opt/modules 目录
unzip sonarqube-7.4.zip -d /opt/modules/创建用户用户组 sonar, sonarqube 的启动必须是由普通用户启动
groupadd sonar useradd -m -g sonar sonar修改 sonarqube 包的用户所属权限
shown sonar:sonar -R sonarqube修改 sonar 配置文件, 增加数据库配置 5.7
vim sonar/conf/sonar.properties sonar.jdbc.username=root sonar.jdbc.password=zcz920518 sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false创建数据库 sonar
create database sonar;启动
su - sonar -c "/opt/modules/sonarqube/bin/linux-x86-64/sonar.sh start"访问: host:9000
登录 admin : admin
提示生成 token: 可以通过外部持有 token 访问 sonarqube 执行操作. 例如 jenkin 拿到 token 进行代码扫描
jenkins: 52293117bb86b474ee2d7db6e5e09cdad9e38a1d提示对哪种代码进行扫描: 可以生成相应的扫描脚本
mvn sonar:sonar \ -Dsonar.host.url=http://172.16.235.137:9000 \ -Dsonar.login=52293117bb86b474ee2d7db6e5e09cdad9e38a1d集成 p3c
下载p3c插件 (这个不是官方插件)
https://github.com/rhinoceros/sonar-p3c-pmd/releases/tag/pmd-3.2.0-beta-with-p3c1.3.6-pmd6.10.0
将插件放入 sonarqube 的插件路径下 以普通用户权限重启
配置 p3c 规则
搜索p3c 规则5. 设置 p3c 为默认规则
IDEA中配置 maven 打包检测 插件
<profiles> <profile> <id>sonar</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <sonar.host.url>http://172.16.235.137:9000/</sonar.host.url> </properties> </profile> </profiles> <build> <plugins> <plugin> <groupId>org.sonarsource.scanner.maven</groupId> <artifactId>sonar-maven-plugin</artifactId> <version>3.6.0.1398</version> </plugin> </plugins> </build>IDEA 打包检测及上传检测报告
查看 sonarqube
IDEA 中不加插件 直接使用 maven 进行扫描
mvn sonar:sonar \ -Dsonar.host.url=http://172.16.235.137:9000 \ -Dsonar.login=52293117bb86b474ee2d7db6e5e09cdad9e38a1dJenkins 配置
jenkins 安装插件 sonarqube for jenkins 配置 sonarqube 服务端信息: 系统管理—> 系统设置配置 sonarQube以及凭证
配置 sonarqube 客户端信息: 系统配置—> 全局配置
构建项目
在构建前增加步骤: 两种方式 一种是使用 sonar-scanner 一种是使用 maven 命令
使用 Sonar-scanner
sonar.projectName=${JOB_NAME} sonar.projectKey=java sonar.sources=. sonar.java.binaries=target/devops使用 maven
mvn sonar:sonar \ -Dsonar.host.url=http://172.16.235.137:9000 \ -Dsonar.login=52293117bb86b474ee2d7db6e5e09cdad9e38a1d安装sonar-scanner 客户端
下载地址
解压到指定目录
unzip -d /opt/modules/ sonar-scanner-cli-4.3.0.2102-linux.zip cd /opt/modules/ mv sonar-scanner-cli-4.3.0.2102 sonar-scanner配置环境变量
vim /etc/profile export SONAR_SCANNER_HOME=/opt/modules/sonar-scanner export PATH=$PATH:$SONAR_SCANNER_HOME/bin配置客户端连接的服务端地址
cd /opt/modules/ vim sonar-scanner/conf/sonar-scanner.properties sonar.host.url=http://172.16.235.137:9000 sonar.sourceEncoding=UTF-8进入项目目录执行测试检测 java 代码
sonar-scanner -Dsonar.projectName=pipeline -Dsonar.projectKey=java -Dsonar.sources=. -Dsonar.java.binaries=.Jenkins 修改国内镜像
find / -name 'default.json'cd {你的Jenkins工作目录}/updates
执行命令
sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json镜像源 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
https://blog.csdn.net/ZhaoJa/article/details/84876711
安装 下载 jenkins.war, tomcat, maven, jdk, git
安装 maven, jdk, git
jenkins.war 直接扔进 tomcat
启动 tomcat
访问 jenkin host:port/jenkins, 查看初始密码
cat /root/.jenkins/secrets/initialAdminPassword进入后选择安装推荐插件或跳过安装推荐插件, 一般是选择安装推荐插件(此时网络极差, 装了好几个小时都下不下来)
进入插件管理, 安装插件 git, maven等插件
进入全局工具管理, 配置 jdk, maven, git. 这里都选择本地安装的, 不用 jenkins 安装
创建项目, maven 风格项目
源码管理,配置项目的 git 地址: url, 凭证: git 账号密码, 分支
Builder trigger: 可以通过 url 的方式触发构建, 集成 gitlab hooks 需要增加 gitlab 插件
Pre Step: 可以以脚本的方式作为构建项目前的准备操作, 没有可以不写
Build: 构建操作 指定 pom, 和 maven 构建指令, 如 clean package
Post Step: 构建后操作, 可以以脚本的方式操作构建后的工作, 如将 jar 分发到指定服务器运行
可以使用 ssh 远程免密操作 ssh-keygen -t rsa ssh-copy-id host (安装 ssh 插件)多个服务器可以在各个服务器上独立存在运行脚本, 让 jenkins 调用是一套插件, 以声明式或脚本化的方式将构建, 测试, 交付等一套流水化工作以代码的方式表示出来
两种语法:
声明式
Jenkinsfile(Declarative Pipline) pipline{ //所有代码包裹在 pipeline{} 层内 agent any //agent{} 定义任务在哪台主机上运行, 可以使 any、 node 等 environment{ //变量名称= 变量值 用于定义环境变量 para='sss' } stages{ //类似于一个大的项目的操作集合, 主要用来包含所有 stage 任务 stage('Build'){ //一个项目中的单个操作任务, 主要包含 step 子层 steps{ //用来执行具体的操作 sh '' } } stage('Test'){ steps{ Junit '' } } stage('Deploy'){ steps{ sh '' } } } }脚本式
Jenkinsfile(Scripted Pipline) pipline{ node{ stage('Build'){ step{ sh '' } } stage('Test'){ step{ Junit '' } } stage('Deploy'){ step{ sh '' } } } }含义
pipeline 是声明式流水线的一种特定语法,他定义了包含执行整个流水线的所有内容和指令的 "block" 。 agent是声明式流水线的一种特定语法,它指示 Jenkins 为整个流水线分配一个执行器 (在节点上)和工作区。 stage 是一个描述 stage of this Pipeline的语法块。在 Pipeline syntax 页面阅读更多有关声明式流水线语法的`stage`块的信息。如 above所述, 在脚本化流水线语法中,stage 块是可选的。 steps 是声明式流水线的一种特定语法,它描述了在这个 stage 中要运行的步骤。 sh 是一个执行给定的shell命令的流水线 step (由 Pipeline: Nodes and Processes plugin提供) 。 junit 是另一个聚合测试报告的流水线 step (由 JUnit plugin提供)。 node 是脚本化流水线的一种特定语法,它指示 Jenkins 在任何可用的代理/节点上执行流水线 (和包含在其中的任何阶段)这实际上等效于 声明式流水线特定语法的`agent`。新建一个流水线项目
编写脚本
pipeline{ agent any stages{ stage('获取代码'){ steps{ echo 'get code' } } stage('代码质检'){ steps{ echo 'check code' } } stage('代码构建'){ steps{ echo 'build code' } } stage('代码部署'){ steps{ echo 'deploy code' } } } } 构建流水线查看 blue Ocean
构建 java 脚本模板
pipeline{ agent any stages{ stage('获取代码'){ steps{ checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '7f33e95f-3502-402c-87e7-9160ff33105c', url: 'git@172.16.235.137:test/test-project.git']]]) } } stage('代码质检'){ steps{ withSonarQubeEnv('sonarQube') { //这个sonarQube 与 jenkins 配置 sonarqube 服务端name 一致 sh '/opt/modules/sonar-scanner/bin/sonar-scanner -Dsonar.projectName=${JOB_NAME} -Dsonar.projectKey=java -Dsonar.sources=. -Dsonar.java.binaries=.' } script { timeout(3) { //超时时间 获取状态 提示代码检测异常 需要打开服务端 webhook def qg = waitForQualityGate() if (qg.status != 'OK') { error "未通过 Sonnarqube 的代码检查" } } } } } stage('代码构建'){ steps{ echo '执行代码构建脚本' } } stage('代码部署'){ steps{ sh '执行代码部署脚本' } } } post{ failure{ emailext body: '失败', recipientProviders: [developers()], subject: '部署', to: 'youya_cz@163.com' } success{ emailext body: '成功', recipientProviders: [developers()], subject: '部署', to: 'youya_cz@163.com' } } }