官网 https://jenkins.iojava
Jenkins是一个开源的、可扩展的持续集成、交付、部署(软件/代码的编译、打包、部署)基于web界面的平台。
jenkins的特色:linux
Jenkins一般做为一个独立的应用程序在其本身的流程中运行, 内置Java servlet 容器/应用程序服务器(Jetty)。git
在安装jenkins以前,须要确保已经安装了java8以上(能够是Java运行环境JRE,也能够是Java开发工具包JDK)github
[root@jin-10 ~]# yum install -y java-1.8.0-openjdk
下载jenkins的yum源:web
[root@jin-10 ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
安装jenkins的密钥:apache
[root@jin-10 ~]# rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
安装jenkins:bootstrap
[root@jin-10 ~]# yum install -y jenkins
启动jenkins:vim
[root@jin-10 ~]# systemctl start jenkins [root@jin-10 ~]# ps aux|grep jenkins jenkins 9180 88.3 9.9 2336480 99024 ? Ssl 14:20 0:07 /etc/alternatives/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/libjenkins/jenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon --httpPort=8080 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20 root 9214 0.0 0.1 112724 996 pts/1 S+ 14:20 0:00 grep --color=auto jenkins
而后打开浏览器,并输入本机IP:浏览器
管理员密码能够在/var/lib/jenkins/secrets/initialAdminPassword文件里找到,也能够在jenkins日志文件中找到/var/log/jenkins/jenkins.log
输入管理员密码后,点击“继续”,进入jenkins的插件安装界面,此处咱们选择“安装推荐的插件”:缓存
此时jenkins就会自动安装须要安装的插件:
而后建立管理员账户:
最后点击“开始使用jenkins”:
此时会进入jenkins的默认界面:
[root@jin-10 ~]# rpm -ql jenkins /etc/init.d/jenkins #jenkins的开启/关闭/重启文件 /etc/logrotate.d/jenkins /etc/sysconfig/jenkins #配置文件 /usr/lib/jenkins #jenkins的主目录 /usr/lib/jenkins/jenkins.war /usr/sbin/rcjenkins /var/cache/jenkins #jenkins的缓存文件 /var/lib/jenkins #安装目录 /var/log/jenkins #日志目录
点击“系统管理”→“插件管理”→“已安装”, 检查是否有“Git plugin”和“Publish Over SSH”两个插件,若是没有,则需点击“可选插件”,找到它并安装。
在Linux服务器上生成一对密钥:
[root@jin-10 ~]# ssh-keygen -f/root/.ssh/jenkins Generating public/private rsa key pair. Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/jenkins. Your public key has been saved in /root/.ssh/jenkins.pub. The key fingerprint is: SHA256:fUC8UzU0Q8Ww5zL/zpHVMyMifRzmJ9GA0DoNQocy0Ak root@jin-10 The key's randomart image is: +---[RSA 2048]----+ | E+ o..++ .=O+.| | = o.o.o. o=.| | o . =o +...| | ++o+ oo.| | S.o+.*o=+| | ..o ++*| | o.| | .o| | .+| +----[SHA256]-----+
点击“系统管理”→ “系统设置” 下拉,找到“Publish Over SSH”。
填写下面的内容,测试是否能链接,而后点保存:
再新增一台主机为jin-11
把jin-10上的公钥内容粘贴到jin-11的.ssh/authorized.keys中
而后点新增:
测试链接成功后,点击保存。
点击“建立一个新任务”或“新建Item”:
再增长一台服务器jin-11:
点击“保存”。而后在主控制台点击“Build Now”:
此时就会自动开始构建,咱们能够点击控制台查看输出:
再在两台机器上查看是否成功:
能够看到,两台机器都执行成功。
若是github上的代码进行了更新,只要在jenkins上再次点击“当即构建”就能够发布更新。
依次点击 系统管理 -> 系统设置 -> Jenkins Location 先设置系统管理员邮件地址,这里的邮件地址须要和后续要设置的发邮件地址一致。
而后往下拉,找到“E-mail Notification”那一栏 填写SMTP服务器,此处咱们以qq邮箱为例,SMTP服务器为smtp.qq.com,而后点右侧的高级,打勾“Use SMTP Authentication”,填写用户名密码,密码为受权码。若是使用的是ssl协议,还须要在这里打勾,smtp端口默认为25 能够打勾“经过发送测试邮件测试配置”,而后填写接收邮件的地址,点右侧的Test configuration:
能够看到,邮件是能够成功发送的。
保存设置后,回到刚才的test项目下,增长一个构建后操做:
保存后,测试下:
首先删除上一次构建生成的文件,而后给test_jenkins目录加上特殊权限,使这个目录不能添加文件。
[root@jin-10 /tmp]# rm -rf test_jenkins/* [root@jin-10 /tmp]# chattr +i test_jenkins/
再点击构建,查看控制台:
能够看到,构建失败,同时,邮件也已发出。
查看是否已收到邮件:
因为内置的邮件功能通常,知足不了大部分的需求,因此通常咱们都使用邮件插件Email Extension Plugin来发送邮件。
咱们把内置的邮件通知关掉,再点击 系统管理->系统设置->Extended E-mail Notification,配置以下:
再打开test项目,把原来的E-mail Notification删除,增长构建后操做 Editable Email Notification:
点击保存后,再选择当即构建,查看控制台输出:
能够看到,不管构建成功与否,都会发送邮件。
JAVA项目是须要编译和打包的,而编译和打包用的都是maven,须要咱们安装maven插件。
在安装maven插件以前,须要在主机上(jin-10)下载maven安装包并解压:
maven的下载地址:https://maven.apache.org/download
[root@jin-10 /usr/local/src]# wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.2/binaries/apache-maven-3.6.2-bin.tar.gz --2019-09-12 13:27:03-- http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.2/binaries/apache-maven-3.6.2-bin.tar.gz 正在解析主机 mirror.bit.edu.cn (mirror.bit.edu.cn)... 114.247.56.117, 2001:da8:204:1::22 正在链接 mirror.bit.edu.cn (mirror.bit.edu.cn)|114.247.56.117|:80... 已链接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度:9142315 (8.7M) [application/octet-stream] 正在保存至: “apache-maven-3.6.2-bin.tar.gz” 100%[==============================================>] 9,142,315 344KB/s 用时 28s 2019-09-12 13:27:31 (321 KB/s) - 已保存 “apache-maven-3.6.2-bin.tar.gz” [9142315/9142315]) [root@jin-10 /usr/local/src]# tar zxvf apache-maven-3.6.2-bin.tar.gz
把解压的目录移动到/usr/local/下:
[root@jin-10 /usr/local/src]# mv apache-maven-3.6.2 /usr/local/
查看maven的相关信息:
[root@jin-10 /usr/local]# ./apache-maven-3.6.2/bin/mvn --version Apache Maven 3.6.2 (40f52333136460af0dc0d7232c0dc0bcf0d9e117; 2019-08-27T23:06:16+08:00) Maven home: /usr/local/apache-maven-3.6.2 Java version: 1.8.0_222, vendor: Oracle Corporation, runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.222.b10-0.el7_6.x86_64/jre Default locale: zh_CN, platform encoding: UTF-8 OS name: "linux", version: "3.10.0-957.27.2.el7.x86_64", arch: "amd64", family: "unix"
依次选择 系统管理-->全局工具配置-->新增Maven:
系统管理-->管理插件,查看Maven Integration 和 Deploy to container两个插件是否已安装,如没有则安装。
安装完成后需重启jenkins
systemctl restart jenkins
打开gitlab,并建立一个名为test_java的项目和空仓库:
先给git做一个全局配置,设定用户和邮箱 :
[root@jin-10 ~]# git config --global user.name "zjin" [root@jin-10 ~]# git config --global user.email "zjin@git.com"
克隆远程仓库到本地,而后写入一个文件README.md并推送到远程仓库:
[root@jin-10 ~]# git clone git@192.168.154.10:root/test_java.git 正克隆到 'test_java'... The authenticity of host '192.168.154.10 (192.168.154.10)' can't be established. ECDSA key fingerprint is SHA256:WiJY7DRJy/UJcTtP5LjqnfYrqe9NTP+Rc8Fajy6dzBc. ECDSA key fingerprint is MD5:c3:18:f8:05:ec:89:3f:1b:27:89:61:2b:ec:a7:1e:47. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.154.10' (ECDSA) to the list of known hosts. warning: 您彷佛克隆了一个空版本库。 [root@jin-10 ~]# cd test_java/ [root@jin-10 ~/test_java]# echo 'Hello world!' >> README.md [root@jin-10 ~/test_java]# git add README.md [root@jin-10 ~/test_java]# git commit -m "add README.md" [master(根提交) f8d8431] add README.md 1 file changed, 1 insertion(+) create mode 100644 README.md [root@jin-10 ~/test_java]# git push -u origin master Counting objects: 3, done. Writing objects: 100% (3/3), 221 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To git@192.168.154.10:root/test_java.git * [new branch] master -> master 分支 master 设置为跟踪来自 origin 的远程分支 master。 [root@jin-10 ~/test_java]# echo 'test_java project' >> README.md [root@jin-10 ~/test_java]# git add README.md [root@jin-10 ~/test_java]# git commit -m "change README.md" [master 9b9f0bc] change README.md 1 file changed, 1 insertion(+) [root@jin-10 ~/test_java]# git push warning: push.default 未设置,它的默认值将会在 Git 2.0 由 'matching' 修改成 'simple'。若要再也不显示本信息并在其默认值改变后维持当前使用习惯, 进行以下设置: git config --global push.default matching 若要再也不显示本信息并从如今开始采用新的使用习惯,设置: git config --global push.default simple 参见 'git help config' 并查找 'push.default' 以获取更多信息。 ('simple' 模式由 Git 1.7.11 版本引入。若是您有时要使用老版本的 Git, 为保持兼容,请用 'current' 代替 'simple' 模式) Counting objects: 5, done. Writing objects: 100% (3/3), 274 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To git@192.168.154.10:root/test_java.git f8d8431..9b9f0bc master -> master
查看远程仓库是否有这个文件:
下载地址:https://codeload.github.com/94fzb/zrlog/zip/master
下载后解压:
[root@jin-10 ~]# unzip zrlog-master.zip
解压后移动到test_java目录下,而后推送到远程仓库:
[root@jin-10 ~]# mv zrlog-master/* test_java/ mv:是否覆盖"test_java/README.md"? y [root@jin-10 ~]# cd !$ cd test_java/ [root@jin-10 ~/test_java]# ls bin data LICENSE mvnw.cmd README.en-us.md service common doc mvnw pom.xml README.md web [root@jin-10 ~/test_java]# git add . [root@jin-10 ~/test_java]# git commit -m "add zrlog" [root@jin-10 ~/test_java]# git push
查看是否推送成功到远程仓库:
下载并解压:
[root@jin-10 /usr/local/src]# tar zxvf apache-tomcat-8.5.35.tar.gz [root@jin-10 /usr/local/src]# mv apache-tomcat-8.5.35 /usr/local/tomcat [root@jin-10 /usr/local/src]# cd !$ cd /usr/local/tomcat [root@jin-10 /usr/local/tomcat]# ls bin conf lib logs README.md RUNNING.txt webapps BUILDING.txt CONTRIBUTING.md LICENSE NOTICE RELEASE-NOTES temp work
修改文件 vim /usr/local/tomcat/conf/tomcat-users.xml,加入以下内容:
<role rolename="admin"/> <role rolename="admin-gui"/> <role rolename="admin-script"/> <role rolename="manager"/> <role rolename="manager-gui"/> <role rolename="manager-script"/> <role rolename="manager-jmx"/> <role rolename="manager-status"/> <user name="admin" password="123456" roles="admin,manager,admin-gui,admin-script,manager-gui, manager-script,manager-jmx,manager-status" />
启动tomcat后会发现8080端口被占用,咱们修改下端口,更改成8081:
再修改配置文件vim /usr/local/tomcat/webapps/manager/META-INF/context.xml,增长以下图的IP段:
再从新启动tomcat:
[root@jin-10 ~]# /usr/local/tomcat/bin/shutdown.sh Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar [root@jin-10 ~]# /usr/local/tomcat/bin/startup.sh Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Tomcat started. [root@jin-10 ~]# netstat -lntp |grep 8081 tcp6 0 0 :::8081 :::* LISTEN 53513/java
在浏览器中打开,并点击如图所示位置,此时会提示咱们输入用户名和密码进行认证:
点击肯定后,就会进入Tomcat Web Application Manager管理界面:
返回jenkins的主界面,点击新建,名称自定义,选择构建一个maven项目”,点击肯定。
源码管理,选择要构建的gitlab地址:
此时会报错,须要配置相对应的key,点击“Add”那里,而后选择“jenkins”,类型选择“SSH Username with private key”,username填写"git",再粘贴jin-10主机的私钥:
"build"栏填写以下:
“构建后操做”,选择“增长构建后操做”里的"Editable Email Notification",如图所示:
构建后操做
点击“增长构建后操做步骤”选择“Deploy war/ear to a container”,“WAR/EAR files”填写“**/*.war”,Contex path留空,Containers选择Tomcat 8.x,Tomcat URL填写要把war包发布到的那台机器的url,如http://192.168.154.10:8080 Credentials这里须要点击右侧的Add,添加用户名和密码
继续点击“增长构建后操做步骤”选择“Editable Email Notification” Project Recipient List,改成$DEFAULT_RECIPIENTS,493734218@ qq.com, 意思是增长额外一个收件人。
点击右下角的“Advanced settings”,定位到“Triggers”,而后点击下方的“Add Trigger”,能够增长发邮件的条件。 最后点左下角的“保存”。 以后就能够点左侧的“当即构建”,而后能够查看对应任务的“控制台输出”。