月度归档: 2019 年 10 月

使用dd命令在linux系统里制作U盘装系统

需求

我们需要在一台全新的机器上安装一台新的debian机器。

准备工作:

1.一台已经有linux系统的机器(一般来说,linux机器都会有dd命令)
2.一个U盘
3.一个待安装的全新机器

实施步骤

1.在这台已经有linux系统的机器上下载debian的ISO镜像。放在指定目录下,如:

/home/sfere/debian-10.1.0-amd64-DVD-1.iso

2.把U盘插入这台linux电脑里,输入命令

fdisk -l

检查硬盘挂载情况

3.使用dd命令,把U盘做成启动盘。此步需要注意,上面看到我们的28.9G的U盘是/dev/sdb4。但是我们下面的命令里要用/dev/sdb而不要加最后的4。如果加了4会导致下一步安装失败

dd if=/home/sfere/debian-10.1.0-amd64-DVD-1.iso of=/dev/sdb bs=8M;sync

完成之后,效果如下:

root@debian:~# dd if=/home/sfere/debian-10.1.0-amd64-DVD-1.iso of=/dev/sdb bs=4M;sync
930+1 records in
930+1 records out
3901456384 bytes (3.9 GB, 3.6 GiB) copied, 563.589 s, 6.9 MB/s

4.把U盘拔下来,插入另外一台全新的电脑中,bios启动顺序中,选择USB为第一位启动。即可开始安装

sonarQube解决sonar.java.binarie必填参数的问题

问题阐述

新版的sonarQube在扫描java代码的时候,要求sonar-project.properties里sonar.java.binaries字段必须填写。这个sonar.java.binaries是“指向包含与源文件对应的已编译字节码文件的目录”,一般来说,maven框架的话,是target/classes。
但是!问题来了,有的时候,我们的代码静态扫描是在还没有编译之前就开始的。例如我们从Jenkins的pipeline里定义了git 拉取代码,然后直接执行SonarQube analysis。并不进行编译。这样我们的Jenkins里是会报错的。那我们该如何处理呢?

解决方案

1.错误的解决方案:网上流行的是去sonarQube的plugins下面的sonar-java替换成4.10版本。但是,这样做其实是不对的,这样会引发其他的不兼容报错
2.正确的解决方案是:先生成一个空的目录,然后把sonar-project.properties指向这个目录。这样就能避免这个错误。下面提供一段pipeline,以供参考

Talk is cheap,show me the code

stage('create empty folder') {
            steps {
                sh "mkdir /tmp/empty"
                sh "echo -e 'sonar.java.binaries=/tmp/empty' >> ./sonar-project.properties"
            }
        }
stage('SonarQube analysis') {
    steps {
        script {
            def scannerHome = tool 'sonarqubescanner4.0'
            withSonarQubeEnv('sonar') { // If you have configured more than one global server connection, you can specify its name
                sh "${scannerHome}/bin/sonar-scanner"
            }
        }
    }
}

Jenkins根据pipeline的运行结果,给gitea的合并请求pull-request进行评论

需求

Jenkins我们已经集成了sonarqube,并且通过sonarqube的gate能获取到结果,并且告知Jenkins是成功还是失败。但是这样还不够,我们需要限制队友向主分支提交代码。我们锁住了master分支,队友只能通过在gitea中向master分支提交pull-request并且通过了sonarqube的代码质量检查,我们才允许合并进主分支。我们急需要一个评论功能,告知我们,这次的合并请求是否允许合并

最终效果图

关键点

1.在gitea中创建一个用户,用这个用户专门进行评论,例如我这里的“guardian”账户
2.把该账户加入Jenkins的凭据管理里。如下图:

3.在gitea的官方文档里找到添加评论的API,链接如下:https://try.gitea.io/api/swagger#/issue/issueCreateComment
4.在Jenkins的pipeline中定义添加评论的方法,并且分别放在success和unsuccessful结果里。如下:

//这一段是添加评论的方法
def gitComment(String comment) {
        script {
                if (IS_PULL_REQUEST==true){
                     numb=env.BRANCH_NAME.split('-')[-1];
                    def check_result = '{"body": "'+comment+'"}';
                    def response = httpRequest httpMode: 'POST',
                    url: 'https://{服务器地址}/git/api/v1/repos/{所属人}/{仓库名}/issues/'+numb+'/comments',
                    authentication : '74849b03-79ba-43f5-b4b6-920',
                    acceptType: 'APPLICATION_JSON_UTF8', contentType: 'APPLICATION_JSON_UTF8',
                    requestBody : check_result
                }
        }
}
//根据执行结果,进行不同的评论
post {
        success {
            gitComment("通过CI检查,允许合并")
        }
        unsuccessful {
            gitComment("没有通过CI检查,建议不要合并"+env.RUN_DISPLAY_URL)
        }
    }

								

苏ICP备18047533号-1