1. jenkins安装generic webhook trigger plugin并重启服务,这个插件允许通过webhook接收器触发jenkins任务
2. 在jenkins的job配置页面,选择构建触发器-generic webhook trigger,(URL:http://JENKINS_URL/generic-webhook-trigger/invoke), 设置一个token
3. 进入gitlab的一个project,选择settings-integrations, 添加webhook,输入jenkins中的URL和token,并选择Trigger events(push events, Merge request Events), 选择Test,测试触发jenkins job,正常提示 HTTP status 200.
tips1: 仓库本身已有提交或merge request,否则出现“hook execution failed: ensure the project has merge request”错误。
https://blog.csdn.net/m0_62451624/article/details/122057046
效果:jenkins接收到webhook请求后,根据配置的构建步骤自动拉去最新的代码、执行编译、运行测试等。
=============================
在sonarqube创建一个项目
定义project key, project name, 创建或使用令牌,根据提示对本地项目进行扫描
jenkins在构建时执行sonar扫描
在构建参数中设置,在pipeline脚本中使用
build_parameter
mvn clean verify org.sonarsource.scanner.maven:sonar-maven-plugin:3.7.0.1746:sonar -Dsonar.projectKey=attack-defense-backend -Dsonar.host.url=http://172.16.2.246:9000 -Dsonar.token=xxxxxxx
遇到的问题:
1. Failed to execute goal org.sonarsource.scanner.maven:sonar-maven-plugin:3.7.0.1746:sonar(default-cli) on project attack-defense-backend: Execution default-cli of goal org.sonarsource.scanner.maven:sonar-maven-plugin:3.7.0.1746:sonar failed: An API incompatibility was encountered while executing org.sonarsource.scanner.maven:sonar-maven-plugin:3.7.0.1746:sonar:java.lang.UnsupportedClassVersionError: org/sonar/batch/bootstrapper/EnvironmentInformation has been compiled by a more recent version of the Java Runtime(class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
plugin 使用jdk11编译,但是当前机器是jdk1.8,不能执行
plugin:3.6.0.1398, 3.5.0.1254, 3.3.0.603都是jdk11
2. Failed to execute goal org.sonarsource.scanner.maven:sonar-maven-plugin:3.7.0.1746:sonar(default-cli) on project attack-defense-backend: Unable to execute SonarQube: Fail to get bootstrap index from server: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target.
访问https网站时本地java程序(sonar插件)没有服务器端的证书
解决方法;
只需导出新服务器上证书的完整证书链,在信任库中导入服务器的证书,其中cacerts是JRE安装中的那个。对于8以下的java版本,请使用$JAVA_HOME/jre/lib/security/cacerts
keytool -import -v -trustcacerts -alias mySonarServer -file sonarServer.crt -keystore cacerts
- JVM没有关闭证书验证的选项,Maven wagon有几个选项:stackoverflow.com/questions/21252800/但是Sonar插件不使用wagon,并且没有提供禁用SSL证书验证的方法。
https://cloud.tencent.com/developer/ask/sof/940424/answer/1337896
关于Java:Maven声纳插件:信任自签名证书 | 码农家园
验证失败_Sonarqube 委托对 Gitlab 的身份验证失败_IT常识
=================================
创建jenkins job,需要创建一个流水线项目(devSecOps),并进行相应的配置:
流水线项目名称:git仓库名+分支名+频次(是否执行脚本中的某些步骤)
General
1. 丢弃旧的构建,保持构建的最大个数 10
2. 参数化构建过程
2.1 布尔值参数
aggregation_project 是否聚合项目
virus_scan 是否执行clamav扫描
sonar_check 是否执行sonar扫描 // 可以使用scanner或sonar-maven-plugin插件
fortify_check 是否执行fortify扫描
checkmarx_SAST 是否执行checkmarx扫描
unit_testing 是否进行单元测试
run_building 是否执行源码编译
docker_image 是否进行容器镜像制作
image_scan 是否进行容器镜像扫描
dependency_check 是否执行依赖组件的漏洞扫描
k8s_deployment 是否部署到k8s环境
auto_test 是否执行自动化测试
2.2 字符串参数Persistent String Parameter
email_recipients 邮件接收者
jenkins_node k8s-slave-all // jenkins slave 节点
git_repository xxx.git // 仓库路径
build_parameter mvn clean package // 构建命令
builddocker_parameter sh docker_build.sh $project_version.$BUILD_NUMBER //执行镜像命令
depoly_k8s csb-k8s-product-test-deploy // 部署的k8s环境
deploy_file metric-background-k8s-deploy2.yaml k8s部署文件,jenkins插件会自动使用此文件到k8s中进行部署。部署文件支持识别环境变量,如$project_version, $BUILD_NUMBER
exec_cmd 部署环境额外的命令
autotaskTemplateId 任务模板id,作为自动化测试的输入
autoTestId 测试单Id,作为自动化测试的输入,测试结束后向测试单回填结果
project_version 1.4 项目的版本号
构建触发器
选择generic webhook trigger,用于接收来自gitlab的触发请求
高级项目选项
无
流水线
pipeline script from SCM
Git
git@xxxx/pipeline.git
Credentials(配置全局可访问git仓库的用户)
branches to build (指定脚本的分支)
Addtional Behaviours : Clean before checkout: Delete untracked nested repositories.
脚本路径: CommonBuild.groovy (主流水线脚本,还会调用其他子功能)
=========================================
手动构建
如果有参数化构建,Jenkins配置后,选择立即构建,需要配置参数,即触发构建。如果没有参数化构建,则会立即构建。
==========================
jenkins详细使用,参考Devops 05 Jenkins_jenkins export_睡神之首的博客-CSDN博客