$ export CATALINA_OPTS="-DJENKINS_HOME=/path/to/jenkins_home/ -Xmx512m"$ catalina.sh start
在linux环境变量中定义jenkins
$ export JENKINS_HOME=/path/to/jenkins_home/$ catalina.sh start
在 context中定义jenkins-home
<Context ...> <Environment name="JENKINS_HOME" value="/path/to/jenkins_home/" type="java.lang.String"/></Context>
安装及初始化
wget http://mirrors.jenkins.io/war-stable/latest/jenkins.warjava -jar jenkins.warhttp://localhost:8080
安装常用插件
开始安装
插件安装完成后,开始配置admin的用户名密码。
开始利用jenkins变动jenkins的家目录jenkins的家目录默认路径在/root/.jenkins/路径。根据启动办法的不同,修正办法略有不同。
你是直接命令行启动java -jar jenkins.war。cat >>/etc/profile<<EOFexport JENKINS_HOME=/data/db/jenkins/EOFsource /etc/profile
利用tomcat容器启动
vim /data/app/tomcat/bin/catalina.shexport JENKINS_HOME=/data/db/jenkins/# OS specific support. $var _must_ be set to either true or false.
你也可以修正jenkins.war包(不推举)
vim jenkins /web.xml <!-- if specified, this value is used as the Hudson home directory --> <env-entry> <env-entry-name>HUDSON_HOME</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value>/data/db/jenkins/</env-entry-value> #填入路径 </env-entry>
开始安装插件
jenkins最常用的便是插件,以是我们从安装插件开始。路径:系统管理-->管理插件,开始安装插件。
Build Pipeline Plugin:build 流程配置插件。Gitlab Plugin :gitlab pull 插件。Gitlab Hook Plugin:gitlab 钩子插件。Build Authorization Token Root Plugin :用户权限验证插件。SonarQube Scanner for Jenkins :代码质量管理插件。Parameterized Remote Trigger Plugin :远程触发插件。AnsiColor(可选):这个插件可以让Jenkins的掌握台输出的log带有颜色(就和linux掌握台那样)Maven Integration pluginExtended Choice Parameter Plug-In: 图像界面配置多选参数方法二上传插件Jenkins-插件管理-高等-上传插件
方法三直接上传到文件目录(根据上文中密码文件的路径,可以知道jenkins的目录在/root/.jenkins/中)/root/.jenkins/plugins重启Jenkins
创建一个构建过程输入项目名称--选择构建一个自由风格的软件项目
配置源码下载地址
添加gitlab的认证key,这里配置ssh的私钥。
gitlab中添加ssh-key的公钥
配置构建过程
这里有个须要把稳的地方,比如我们想要在远真个机器上实行干系的脚本怎么办?
一个事理: jenkins 在实行过程中,利用的是jenkins的用户在实行。
两种方法:
所有做事器跟jenkins做无密钥登录。所有做事器的root做无密钥登录。推举利用第二种,由于发布的脚本,可能涉及权限的问题,如果利用jenkins可能会涌现权限不敷的情形。
最佳方案
sudo ssh -p 52113 root@192.168.56.13 "/data/scripts/web-deploy.sh"
实行立即构建-查看掌握台输出
阐明解释:
jenkins 会git clone到jenkins的/workspace上。[root@linux-node1 web-build16:29:46]#pwd /root/.jenkins/workspace/web-build[root@linux-node1 web-build16:29:56]#ls -a . .. .git index.html README.md[root@linux-node1 web-build16:29:58]#[root@linux-node1 web-build16:31:49]#cat /tmp/1.txt 2017-03-01
Sonar 代码质量管理安装sonar
cd /usr/local/src/wget https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-5.6.6.zipmv sonarqube-5.6.6 /data/app/ln -s /data/app/sonarqube-5.6.6/ /data/app/sonarqube
安装数据库
# 下载mysql二进制包cd /usr/local/srcwget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.30-linux-glibc2.5-x86_64.tar.gz# 创建mysql用户 groupadd mysql useradd -r -g mysql -s /bin/false mysql# 解压mysql二进制包 cd /usr/local/src tar zxf mysql-5.6.30-linux-glibc2.5-x86_64.tar.gz mv mysql-5.6.30-linux-glibc2.5-x86_64 /usr/local/ chown -R mysql:mysql /usr/local/mysql-5.6.30-linux-glibc2.5-x86_64# 初始化mysqlln -s /usr/local/mysql-5.6.30-linux-glibc2.5-x86_64/ /usr/local/mysqlchown -R mysql:mysql /usr/local/mysql# 上传压缩包中的my.cnf到/usr/local/mysql目录下#初始化 mysql数据库/usr/local/mysql/scripts/mysql_install_db \--defaults-file=/usr/local/mysql/my.cnf \--user=mysql --basedir=/usr/local/mysql/ \--datadir=/usr/local/mysql/data# 启动mysqlchown -R mysql:mysql /usr/local/mysqlchown -R mysql:mysql /usr/local/mysql-5.6.30-linux-glibc2.5-x86_64//usr/local/mysql/bin/mysqld --defaults-file=/usr/local/mysql/my.cnf 连接mysql/usr/local/mysql/bin/mysql -S /usr/local/mysql/mysql.sock
登录mysql创建干系的数据库
# mysql -uroot -p12345678CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;GRANT ALL ON sonar. TO 'sonar'@'%' IDENTIFIED BY 'sonar@qw';FLUSH PRIVILEGES;
sonar彷佛不支持MySQL 5.5,请安装mysql5.6 或者更高版本
2017.03.01 18:52:01 ERROR web[o.a.c.c.C.[.[.[/]] Exception sending context initialized event to listener instance of class org.sonar.server.platform.PlatformServletContextListenerorg.sonar.api.utils.MessageException: Unsupported mysql version: 5.5. Minimal supported version is 5.6.2017.03.01 18:52:01 ERROR web[o.a.c.c.StandardContext] One or more listeners failed to start. Full details will be found in the appropriate container log file2017.03.01 18:52:01 ERROR web[o.a.c.c.StandardContext] Context [] startup failed due to previous errors2017.03.01 18:52:01 WARN web[o.a.c.l.WebappClassLoaderBase] The web application [ROOT] appears to have started a thread named [Abandoned connection cleanup thread] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: java.lang.Object.wait(Native Method) java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143) com.mysql.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:43)2017.03.01 18:52:01 WARN web[o.a.c.l.WebappClassLoaderBase] The web application [ROOT] appears to have started a thread named [Timer-0] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: java.lang.Object.wait(Native Method) java.util.TimerThread.mainLoop(Timer.java:552) java.util.TimerThread.run(Timer.java:505)
编辑sonar的配置文件
编辑sonar连接数据库的办法
vim /data/app/sonarqube/conf/sonar.properties sonar.jdbc.username=sonarsonar.jdbc.password=sonar@qwsonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
配置sonar的监听ip和端口
vim /data/app/sonarqube/conf/sonar.properties sonar.web.host=0.0.0.0sonar.web.port=9000
启动sonar做事
/data/app/sonarqube/bin/linux-x86-64/sonar.sh start
配置sonar
浏览器登录sonar,用户名admin,密码:admin
第一步安装中文插件
第二步安装干系的措辞插件(利用什么措辞,安装什么选择器)我们安装一个python的插件
接着把php,java的插件也安装上,然后重启。
SonarQube Scanner 安装wget https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-2.8.zipunzip sonar-scanner-2.8.zip mv sonar-scanner-2.8 /data/app/ln -s /data/app/sonar-scanner-2.8/ /data/app/sonar-scanner
编辑sonar scanner的配置文件
cat >>/data/app/sonar-scanner/conf/sonar-scanner.properties <<EOFsonar.host.url=http://localhost:9000sonar.sourceEncoding=UTF-8sonar.jdbc.username=sonarsonar.jdbc.password=sonar@qwsonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8EOF
soncar-scanner 在2.8版本的时候,可以不用配置,soncar.jdbc.username,sonar.jdbc.password,sonar.jdbc.url。只须要配置soncar.host.url。
WARN: Property 'sonar.jdbc.url' is not supported any more. It will be ignored. There is no longer any DB connection to the SQ database.WARN: Property 'sonar.jdbc.username' is not supported any more. It will be ignored. There is no longer any DB connection to the SQ database.WARN: Property 'sonar.jdbc.password' is not supported any more. It will be ignored. There is no longer any DB connection to the SQ database.
下载官方测试包 Sonar-examples
cd /data/db/git clone https://github.com/SonarSource/sonar-examples.git
须要scanner扫描的代码必须包含 sorna-project.properties
cd /data/db/sonar-examples-master/projects/languages/php/php-sonar-runner-unit-testsvim sorna-project.properties
sonar.projectKey=org.sonarqube:php-ut-sq-scanner # sonar中的key,必须唯一。sonar.projectName=PHP :: PHPUnit :: SonarQube Scanner ##在sonar中展示的名称sonar.projectVersion=1.0 ##项目版本sonar.sources=src ##源码路径sonar.tests=testssonar.language=php ##源码措辞sonar.sourceEncoding=UTF-8 ##源码编译办法# Reusing PHPUnit reportssonar.php.coverage.reportPath=reports/phpunit.coverage.xmlsonar.php.tests.reportPath=reports/phpunit.xml
sonar.projectKey=org.sonarqube:example-it-jacoco-sonar-scannersonar.projectName=Java :: IT Coverage with JaCoCo :: SonarQube Scannersonar.projectVersion=1.0sonar.sources=srcsonar.binaries=classessonar.language=javasonar.sourceEncoding=UTF-8 sonar.jacoco.itReportPath=reports/jacoco.exec
开始扫描我们什么都不指定就会在当面孔录下扫描sonar-project.properties文件,根据配置文件进行扫描事情。扫描之后我们在web界面上就可以看到
pwd # /data/db/sonar-examples-master/projects/languages/php/php-sonar-runner-unit-tests/data/app/sonar-scanner/bin/sonar-scanner
登录sonar-在仪表盘中看到了我们刚刚运行的检讨。
点开可以看到详细的信息
sonar和jenkins结合安装Jenkins - sonar 插件
系统管理-系统配置中 添加sonar的信息
在系统管理--> Global Tool Configuration 中配置sonar Scanner的路径
开始构建相应的步骤
选择立即构建,构建完成后,就可以在掌握台输出中瞥见内容了。
钩子脚本配置
jenkins和gitlab联合配置身份验证令牌openssl rand -hex 10 9c8fe5c5bbb56b909259
配置gitlab的钩子
官方的例子
Trigger the RevolutionTest job with the token TacoTuesdaybuildByToken/build?job=RevolutionTest&token=TacoTuesdayTrigger the RevolutionTest job with the token TacoTuesday and parameter Type supplied with the value MexicanbuildByToken/buildWithParameters?job=RevolutionTest&token=TacoTuesday&Type=Mexican
根据官方的例子拼接URL第一步:jenkins的URL:http://192.168.56.11:8080/jenkins/第二步:拼接后真个URI:buildByToken/build?job=web-buildo&token=9c8fe5c5bbb56b909259
http://192.168.56.11:8080/jenkins/buildByToken/build?job=web-build&token=9c8fe5c5bbb56b909259
更新gitlab的内容,查看jenkins是否能够自动更新。
参考gitlab官方配置例子
配置gitlab流水线操作安装pipline的插件
jenkins pipline 设置真实事情场景可能会有很多的job要实行。编译-->单元测试-->从集群中下线做事器--环境支配--重启做事器--预热--上线测试--上线集群。
创建一个pipline。
根据刚才设置的第一个pipline,配置后续的构建过程。
选择【构建后操作】,接着选择【Trigger parameterized build on other projects】
查看pipline实行的结果。
在这里可以查看各个job的实行情形,绿色是表示实行通过的,黄色是正在实行的,蓝色是未实行的,还有赤色是实行失落败的。
交互式实行构建过程jenkins配置slave最近理解到Jenkins的节点功能,对付分布式构建非常方便!
Jenkins启动在Windows上,如果想要直接操作Linux上的东西,那么比较波折,Jenkins节点大大的方便了不同系统之间的调用构建;创建节点办法如下:1.系统管理-管理节点-新建节点2.输入创建的节点名称,并勾选“Dumb Slave”3.配置 1)Name须要填写2)远程事情目录:slave.jar和job等目录3)用法:只许可运行绑定到这台机器的Job4)启动方法:Launch slave agents on Unix machines via SSH5)高等:填写Host Credentials(用户名密码,须要通过Add添加)4.其他默认即可,配置完毕保存后,进入此节点,通过点击Launch slave agent运行
此时Windows为master,Linux为slave,节点运行后,会在远程事情目录设定的路径下天生slave.jar,用于jenkins调用;须要把稳的是:job建立须要勾选Restrict where this project can be run选项,并在Label Expression处填写节点的名称。
报错汇总http://10.10.0.176:8080/threadDump
参考参考文档jenkins 官方demojenkins参考全系列
jenkins用户权限配置
Jenkins进阶系列之——16一个完全的JENKINS下的ANT BUILD.XML文件
利用 Jenkins 设置一个持续交付框架
利用Jenkins+Gitlab搭建持续集成(CI)环境
SonarQube Scanner-download
参考文章
build authorization token root plugin
jenkins-牛人博客jenkins 常用插件解释
jenkins自带的环境变量BRANCH_NAMEFor a multibranch project, this will be set to the name of the branch being built, for example in case you wish to deploy to production from master but not from feature branches; if corresponding to some kind of change request, the name is generally arbitrary (refer to CHANGE_ID and CHANGE_TARGET).CHANGE_IDFor a multibranch project corresponding to some kind of change request, this will be set to the change ID, such as a pull request number, if supported; else unset.CHANGE_URLFor a multibranch project corresponding to some kind of change request, this will be set to the change URL, if supported; else unset.CHANGE_TITLEFor a multibranch project corresponding to some kind of change request, this will be set to the title of the change, if supported; else unset.CHANGE_AUTHORFor a multibranch project corresponding to some kind of change request, this will be set to the username of the author of the proposed change, if supported; else unset.CHANGE_AUTHOR_DISPLAY_NAMEFor a multibranch project corresponding to some kind of change request, this will be set to the human name of the author, if supported; else unset.CHANGE_AUTHOR_EMAILFor a multibranch project corresponding to some kind of change request, this will be set to the email address of the author, if supported; else unset.CHANGE_TARGETFor a multibranch project corresponding to some kind of change request, this will be set to the target or base branch to which the change could be merged, if supported; else unset.BUILD_NUMBERThe current build number, such as "153"BUILD_IDThe current build ID, identical to BUILD_NUMBER for builds created in 1.597+, but a YYYY-MM-DD_hh-mm-ss timestamp for older buildsBUILD_DISPLAY_NAMEThe display name of the current build, which is something like "#153" by default.JOB_NAMEName of the project of this build, such as "foo" or "foo/bar".JOB_BASE_NAMEShort Name of the project of this build stripping off folder paths, such as "foo" for "bar/foo".BUILD_TAGString of "jenkins-${JOB_NAME}-${BUILD_NUMBER}". All forward slashes (/) in the JOB_NAME are replaced with dashes (-). Convenient to put into a resource file, a jar file, etc for easier identification.EXECUTOR_NUMBERThe unique number that identifies the current executor (among executors of the same machine) that’s carrying out this build. This is the number you see in the "build executor status", except that the number starts from 0, not 1.NODE_NAMEName of the agent if the build is on an agent, or "master" if run on masterNODE_LABELSWhitespace-separated list of labels that the node is assigned.WORKSPACEThe absolute path of the directory assigned to the build as a workspace.JENKINS_HOMEThe absolute path of the directory assigned on the master node for Jenkins to store data.JENKINS_URLFull URL of Jenkins, like http://server:port/jenkins/ (note: only available if Jenkins URL set in system configuration)BUILD_URLFull URL of this build, like http://server:port/jenkins/job/foo/15/ (Jenkins URL must be set)JOB_URLFull URL of this job, like http://server:port/jenkins/job/foo/ (Jenkins URL must be set)SVN_REVISIONSubversion revision number that's currently checked out to the workspace, such as "12345"SVN_URLSubversion URL that's currently checked out to the workspace.