第一章 安装Jenkins
1.1 安装Java
Java环境,主要是JDK和JRE安装。当前比较流行的是Oracle的Java环境和OpenSDK的JAVA环境。
根据自己的喜好进行选择安装。
下面以OpenSDK安装为例:
1)安装OpenSDK Java。
$sudo apt-get install openjdk-8-jre
$sudo apt-get install openjdk-8-jkd
注意:软件安装需要足够的用户权限,使用sudo或者在root的账户下进行安装。
2)配置JAVA环境变量
环境变量的配置有不同的使用范围:
整个设备有效:可以在/etc/profile配置
用户有效:用户根目录下.bashrc或者.bash_profile
根据自己的需要进行配置。
如果是多账号登录,可以配置为设备有效。如果单用户,
启动的时候就是当前用户,在当前用户下设置有效。
例如在/etc/profile中配置
#set jdk environment
export JAVA_HOME=[JDK安装根目录]
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
然后使环境变量设置生效。
$ source /etc/profile
可以通过
$ echo $JAVA_HOME
或者
$ env
命令查看JAVA环境变量配置是否生效。
3)检查Java是否可以使用。
$ java -version或者 javac -version
qwe$ java -version
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
1.2 安装Jenkins
1)添加Jenkins源
$ wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
2)为Jenkins创造源列表
$ sh -c 'echo deb http://pkg.jenkins-ci.org/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
3)再次更新,并开始Jenkins的安装过程
$ apt update
$ apt install jenkins
4)启动jenkins服务
#/etc/init.d/jenkins start
停止 jenkins服务
#/etc/init.d/jenkins stop
查看jenkins是否启动
#ps -ef | grep jenkins
root@t1-OptiPlex-3010:/var/cache/jenkins/war/WEB-INF# ps -ef | grep jenkins
jenkins 29454 1 0 20:17 ? 00:00:00 /lib/systemd/systemd --user
jenkins 29455 29454 0 20:17 ? 00:00:00 (sd-pam)
jenkins 29461 1 0 20:17 ? 00:00:00 /usr/bin/daemon --name=jenkins --inherit --env=JENKINS_HOME=/var/lib/jenkins --output=/var/lib/jenkins/log/jenkins/jenkins.log --pidfile=/var/run/jenkins/jenkins.pid -- /usr/bin/java -Djava.awt.headless=true -jar /usr/share/jenkins/jenkins.war --webroot=/var/cache/jenkins/war --httpPort=8088
jenkins 29462 29461 19 20:17 ? 00:02:59 /usr/bin/java -Djava.awt.headless=true -jar /usr/share/jenkins/jenkins.war --webroot=/var/cache/jenkins/war --httpPort=8088
root 32223 5261 0 20:32 pts/3 00:00:00 grep --color=auto jenkins
其他启动方式:
$ systemctl start jenkins
或者
$ net start jenkins
$ net stop jenkins
修改jenkins的配置以后,这种方式可能启动不了。
5)jenkins相关配置和安装目录
jenkins的安装配置相关目录:
配置文件:/etc/default/jenkins (可能不同的环境下此目录会有一些变化)
安装目录:/var/lib/jenkins
日志文件:/var/log/jenkins
启动后默认会创建一个管理员账号admin,以及为此账号产生一个密码,我的是:9**a947****f97a971d***4e**f
密码会写入到文件/var/lib/jenkins/secrets/initialAdminPassword中。
jenkins安装以后,默认的端口是8000,如果已经存在服务占据此端口,
jenkins就会启动出错。这种时候需要修改端口。
Jenkins默认使用8080端口,要修改此端口,编辑/etc/default/jenkins配置文件,将以下内容:
HTTP_PORT=8080 --》 8088
6)为Jenkins安装并配置Apache HTTP Server
Jenkins直接放公网不合适,通常会使用Nginx或Apache2作Jenkins的反向代理。
故下面将为Jenkins安装并配置Apache HTTP Server。注意,如果不需要反向代理,可省略此步骤。
$ apt install apache2
在Apache中创建一个新的虚拟主机指令。比如,在虚拟主机上创建一个新的、名为“jenkins.conf”的Apache配置文件:
a2enmod proxy
a2enmod proxy_http
a2ensite jenkins
touch /etc/apache2/sites-available/jenkins.conf
ln -s /etc/apache2/sites-available/jenkins.conf /etc/apache2/sites-enabled/jenkins.conf
nano /etc/apache2/sites-available/jenkins.conf
7)访问jenkins服务。
Jenkins默认使用HTTP协议和主机的8088端口。浏览器访问http://[ip:port]/,可以看到如下界面。
设置admin账号的初始密码。输入初始密码,进入主界面。
前一个选项安装所以建议的插件。一般选择此项。
1.3 安装插件
Jenkens默认安装建议的插件。其他还有一些常用的插件,也需要安装。
例如:
build-name-setter插件:
description setter插件:构建的描述信息。
参考《Jenkins插件大全》
https://blog.csdn.net/pansaky/article/details/80755739
1.4 更换主目录
jenkins默认安装主目录/var/lib/jenkins,、var放置系统执行过程中经常变化的文件,如随时更改的日志文件/var/log
/var/log/message:所有的登录文件存放目录
/var/spool/mail:邮件存放的目录
/var/run:程序或服务启动后,其PID存放在该目录下。
因此一般需要更换主目录,建议单独分区,设置较大的磁盘空间。
采用软连接的方式,将实际存储映射到大空间磁盘。
#mv /var/lib/jenkins /home/xxx/jenkins
#ln -s /home/xxx/jenkins /var/lib/jenkins
这个通过软链接替换了实际主空间目录,而不用修改配置文件。
1.5 常见问题分析:
问题1:编译出现gradle错误
[Gradle] - Launching build.
[accmobile-git] $ gradle clean assemblecdelchinaacc --stacktrace --debug
FATAL: command execution failed
java.io.IOException: Cannot run program "gradle" (in directory "/var/lib/jenkins/workspace/accmobile-git"): error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at hudson.Proc$LocalProc.<init>(Proc.java:249)
at hudson.Proc$LocalProc.<init>(Proc.java:218)
at hudson.Launcher$LocalLauncher.launch(Launcher.java:935)
at hudson.Launcher$ProcStarter.start(Launcher.java:454)
at hudson.Launcher$ProcStarter.join(Launcher.java:465)
at hudson.plugins.gradle.Gradle.performTask(Gradle.java:333)
at hudson.plugins.gradle.Gradle.perform(Gradle.java:225)
at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:744)
at hudson.model.Build$BuildExecution.build(Build.java:206)
at hudson.model.Build$BuildExecution.doRun(Build.java:163)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:504)
at hudson.model.Run.execute(Run.java:1819)
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
at hudson.model.ResourceController.execute(ResourceController.java:97)
at hudson.model.Executor.run(Executor.java:429)
Caused by: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
at java.lang.ProcessImpl.start(ProcessImpl.java:134)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
... 16 more
Build step 'Invoke Gradle script' changed build result to FAILURE
Build step 'Invoke Gradle script' marked build as failure
Set build name.
原因:未安装gradle工具。
解决方法:
1)http://www.gradle.org/downloads 下载gradle。选择对应版本下载
2)将压缩包解压到对应目录
$ sudo unzip gradle-2.6-all.zip -d /opt/gradle/
3)增加gradle配置
$ sudo vim /etc/profile
文件末尾添加:
export GRADLE_HOME=/opt/gradle/gradle-2.6
export PATH=$GRADLE_HOME/bin:$PATH
4)增加一个gradle执行程序软连接
$ ln -s /opt/gradle/gradle-2.6/bin/gradle /usr/bin/gradle
5)重启机器
$ sudo reboot
$ gradle -v
如果能够看到对应gradle版本。则说明gradle安装成功。
问题2:git 同步代码出错。
Fetching upstream changes from git@gitlab.cdel.local:cdel/accmobile.git
> git --version # timeout=10
using GIT_ASKPASS to set credentials
> git fetch --tags --progress git@gitlab.cdel.local:cdel/accmobile.git +refs/heads/*:refs/remotes/origin/*
ERROR: Error fetching remote repo 'origin'
hudson.plugins.git.GitException: Failed to fetch from git@gitlab.cdel.local:cdel/accmobile.git
at hudson.plugins.git.GitSCM.fetchFrom(GitSCM.java:888)
at hudson.plugins.git.GitSCM.retrieveChanges(GitSCM.java:1155)
at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1186)
at hudson.scm.SCM.checkout(SCM.java:504)
at hudson.model.AbstractProject.checkout(AbstractProject.java:1208)
at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:574)
at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:499)
at hudson.model.Run.execute(Run.java:1819)
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
at hudson.model.ResourceController.execute(ResourceController.java:97)
at hudson.model.Executor.run(Executor.java:429)
Caused by: hudson.plugins.git.GitException: Command "git fetch --tags --progress git@gitlab.cdel.local:cdel/accmobile.git +refs/heads/*:refs/remotes/origin/*" returned status code 128:
stdout:
stderr: Host key verification failed.
fatal: Could not read from remote repository.
原因:git同步SSHKEY不正确。jenkins代码通过的时候,会使用主目录下的.ssh下的公钥和私钥。
如果此目录下没有对应的秘钥信息,就会错误。
解决方法:将用户目录下生成的ssh秘钥复制到主目录下。
如果没有创建过,可以新创建。如果创建在home目录下,
注意拷贝或者链接到jenkins主目录下。
Linux
- 在终端中输入ssh-keygen -t rsa -C "email@email.com"
- 复制公钥,在终端中输入以下命令,然后复制
#cat ~/.ssh/id_rsa.pub
3.设置Git全局变量
#git config --global user.name "email@email.com"
#git config --global user.email "email@email.com"
4.GitLab(或者Gerrit)添加设备访问公钥。
GitLab(或者Gerrit),添加公钥 Settings --> SSH Keys
公钥内容即~/.ssh/id_rsa.pub