DevOps Jenkins持续集成GitHub代码通过SSH实现构建部署
来源:互联网 发布:小学生教育软件 编辑:程序博客网 时间:2024/06/05 04:35
最近在虚拟环境中使用安装Jenkins持续集成环境,中间遇到些问题,以致于浪费了不少时间。此篇通过SSH Server方式来实现github源码通过Jenkin持续集成到Docker容器的实例。so,遇到问题多从自身出发,咨询他人未必能解决,还是自身要注意细节问题。
Jenkins 安装
Jenkins命令行执行安装:$ java -jar jenkins.war
boonya@ubuntu:/usr/local/docker/docker-jenkins$ java -jar jenkins.warRunning from: /usr/local/docker/docker-jenkins/jenkins.warwebroot: $user.home/.jenkinsJul 17, 2017 6:48:59 AM Main deleteWinstoneTempContentsWARNING: Failed to delete the temporary Winstone file /tmp/winstone/jenkins.warJul 17, 2017 6:49:02 AM org.eclipse.jetty.util.log.Log initializedINFO: Logging initialized @11418ms to org.eclipse.jetty.util.log.JavaUtilLogJul 17, 2017 6:49:05 AM winstone.Logger logInternalINFO: Beginning extraction from war fileJul 17, 2017 6:49:18 AM org.eclipse.jetty.server.handler.ContextHandler setContextPathWARNING: Empty contextPathJul 17, 2017 6:49:19 AM org.eclipse.jetty.server.Server doStartINFO: jetty-9.4.z-SNAPSHOTJul 17, 2017 6:49:21 AM org.eclipse.jetty.webapp.StandardDescriptorProcessor visitServletINFO: NO JSP Support for /, did not find org.eclipse.jetty.jsp.JettyJspServletJul 17, 2017 6:49:22 AM org.eclipse.jetty.server.session.DefaultSessionIdManager doStartINFO: DefaultSessionIdManager workerName=node0Jul 17, 2017 6:49:22 AM org.eclipse.jetty.server.session.DefaultSessionIdManager doStartINFO: No SessionScavenger set, using defaultsJul 17, 2017 6:49:22 AM org.eclipse.jetty.server.session.HouseKeeper startScavengingINFO: Scavenging every 600000msJenkins home directory: /home/boonya/.jenkins found at: $user.home/.jenkinsJul 17, 2017 6:49:26 AM org.eclipse.jetty.server.handler.ContextHandler doStartINFO: Started w.@50eca7c6{/,file:///home/boonya/.jenkins/war/,AVAILABLE}{/home/boonya/.jenkins/war}Jul 17, 2017 6:49:26 AM org.eclipse.jetty.server.AbstractConnector doStartINFO: Started ServerConnector@419a20a6{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}Jul 17, 2017 6:49:26 AM org.eclipse.jetty.server.Server doStartINFO: Started @35512msJul 17, 2017 6:49:26 AM winstone.Logger logInternalINFO: Winstone Servlet Engine v4.0 running: controlPort=disabledJul 17, 2017 6:49:29 AM jenkins.InitReactorRunner$1 onAttainedINFO: Started initializationJul 17, 2017 6:49:29 AM jenkins.InitReactorRunner$1 onAttainedINFO: Listed all pluginsJul 17, 2017 6:49:37 AM jenkins.InitReactorRunner$1 onAttainedINFO: Prepared all pluginsJul 17, 2017 6:49:37 AM jenkins.InitReactorRunner$1 onAttainedINFO: Started all pluginsJul 17, 2017 6:49:37 AM jenkins.InitReactorRunner$1 onAttainedINFO: Augmented all extensionsJul 17, 2017 6:49:45 AM jenkins.InitReactorRunner$1 onAttainedINFO: Loaded all jobsJul 17, 2017 6:49:48 AM hudson.model.AsyncPeriodicWork$1 runINFO: Started Download metadataJul 17, 2017 6:49:50 AM jenkins.InitReactorRunner$1 onAttainedINFO: Completed initializationJul 17, 2017 6:49:52 AM org.springframework.context.support.AbstractApplicationContext prepareRefreshINFO: Refreshing org.springframework.web.context.support.StaticWebApplicationContext@15930e35: display name [Root WebApplicationContext]; startup date [Mon Jul 17 06:49:52 PDT 2017]; root of context hierarchyJul 17, 2017 6:49:52 AM org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactoryINFO: Bean factory for application context [org.springframework.web.context.support.StaticWebApplicationContext@15930e35]: org.springframework.beans.factory.support.DefaultListableBeanFactory@df9e3eaJul 17, 2017 6:49:52 AM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletonsINFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@df9e3ea: defining beans [authenticationManager]; root of factory hierarchyJul 17, 2017 6:49:52 AM org.springframework.context.support.AbstractApplicationContext prepareRefreshINFO: Refreshing org.springframework.web.context.support.StaticWebApplicationContext@4752f4f: display name [Root WebApplicationContext]; startup date [Mon Jul 17 06:49:52 PDT 2017]; root of context hierarchyJul 17, 2017 6:49:52 AM org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactoryINFO: Bean factory for application context [org.springframework.web.context.support.StaticWebApplicationContext@4752f4f]: org.springframework.beans.factory.support.DefaultListableBeanFactory@14144e84Jul 17, 2017 6:49:52 AM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletonsINFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@14144e84: defining beans [filter,legacy]; root of factory hierarchyJul 17, 2017 6:49:54 AM jenkins.install.SetupWizard initINFO: ***************************************************************************************************************************************************************************************Jenkins initial setup is required. An admin user has been created and a password generated.Please use the following password to proceed to installation:f6337157bda8440f9e66dde6f4d79a6dThis may also be found at: /home/boonya/.jenkins/secrets/initialAdminPassword***************************************************************************************************************************************************************************************Jul 17, 2017 6:50:08 AM hudson.model.UpdateSite updateDataINFO: Obtained the latest update center data file for UpdateSource defaultJul 17, 2017 6:50:08 AM hudson.model.UpdateSite updateDataINFO: Obtained the latest update center data file for UpdateSource defaultJul 17, 2017 6:50:08 AM hudson.WebAppMain$3 runINFO: Jenkins is fully up and runningJul 17, 2017 6:50:11 AM hudson.model.DownloadService$Downloadable loadINFO: Obtained the updated data file for hudson.tasks.Maven.MavenInstallerJul 17, 2017 6:51:43 AM hudson.model.DownloadService$Downloadable loadINFO: Obtained the updated data file for hudson.tools.JDKInstallerJul 17, 2017 6:51:43 AM hudson.model.AsyncPeriodicWork$1 runINFO: Finished Download metadata. 115,667 msJul 17, 2017 6:53:34 AM org.eclipse.jetty.server.session.Session beginInvalidateINFO: Session node0f9fhxe6uq0n2lim0qta6dtt10 already being invalidated
注意:这种方式停服后重新启动不能记住以前的数据。
安装Jenkins服务
参考官文:https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Ubuntu
建议采用下面的方式执行进行安装,如果要安装jenkins为服务需要执行下面四步:
wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add - sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list' sudo apt-get update sudo apt-get install jenkins
root@ubuntu:/usr/local/docker/docker-jenkins# sudo apt-get install jenkinsReading package lists... DoneBuilding dependency tree Reading state information... DoneThe following extra packages will be installed: daemon openjdk-8-jre-headlessSuggested packages: openjdk-8-jre-jamvm libnss-mdns fonts-ipafont-gothic fonts-ipafont-mincho ttf-wqy-microhei ttf-wqy-zenhei fonts-indicThe following NEW packages will be installed: daemon jenkins openjdk-8-jre-headless0 upgraded, 3 newly installed, 0 to remove and 87 not upgraded.Need to get 133 MB of archives.After this operation, 346 MB of additional disk space will be used.Do you want to continue? [Y/n] YGet:1 http://us.archive.ubuntu.com/ubuntu/ vivid/universe openjdk-8-jre-headless amd64 8u45-b14-1 [63.1 MB]Get:2 http://pkg.jenkins-ci.org/debian-stable/ binary/ jenkins 2.60.1-1 [70.3 MB]Get:3 http://us.archive.ubuntu.com/ubuntu/ vivid/universe openjdk-8-jre-headless amd64 8u45-b14-1 [63.1 MB] Get:4 http://us.archive.ubuntu.com/ubuntu/ vivid/universe openjdk-8-jre-headless amd64 8u45-b14-1 [63.1 MB] 53% [4 openjdk-8-jre-headless 243 kB/63.1 MB 0%]Get:5 http://us.archive.ubuntu.com/ubuntu/ vivid/universe openjdk-8-jre-headless amd64 8u45-b14-1 [63.1 MB] Get:6 http://us.archive.ubuntu.com/ubuntu/ vivid/universe openjdk-8-jre-headless amd64 8u45-b14-1 [63.1 MB] Get:7 http://us.archive.ubuntu.com/ubuntu/ vivid/universe openjdk-8-jre-headless amd64 8u45-b14-1 [63.1 MB] Get:8 http://us.archive.ubuntu.com/ubuntu/ vivid/universe openjdk-8-jre-headless amd64 8u45-b14-1 [63.1 MB] Get:9 http://us.archive.ubuntu.com/ubuntu/ vivid/universe openjdk-8-jre-headless amd64 8u45-b14-1 [63.1 MB] Get:10 http://us.archive.ubuntu.com/ubuntu/ vivid/universe daemon amd64 0.6.4-1 [98.2 kB] Fetched 132 MB in 2h 15min 55s (16.2 kB/s) Selecting previously unselected package openjdk-8-jre-headless:amd64.(Reading database ... 77335 files and directories currently installed.)Preparing to unpack .../openjdk-8-jre-headless_8u45-b14-1_amd64.deb ...Unpacking openjdk-8-jre-headless:amd64 (8u45-b14-1) ...Selecting previously unselected package daemon.Preparing to unpack .../daemon_0.6.4-1_amd64.deb ...Unpacking daemon (0.6.4-1) ...Selecting previously unselected package jenkins.Preparing to unpack .../jenkins_2.60.1-1_all.deb ...Unpacking jenkins (2.60.1-1) ...Processing triggers for man-db (2.7.0.2-5) ...Processing triggers for ureadahead (0.100.0-19) ...Processing triggers for systemd (219-7ubuntu3) ...Setting up openjdk-8-jre-headless:amd64 (8u45-b14-1) ...update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/rmid to provide /usr/bin/rmid (rmid) in auto modeupdate-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java to provide /usr/bin/java (java) in auto modeupdate-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/keytool to provide /usr/bin/keytool (keytool) in auto modeupdate-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/jjs to provide /usr/bin/jjs (jjs) in auto modeupdate-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/pack200 to provide /usr/bin/pack200 (pack200) in auto modeupdate-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/rmiregistry to provide /usr/bin/rmiregistry (rmiregistry) in auto modeupdate-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/unpack200 to provide /usr/bin/unpack200 (unpack200) in auto modeupdate-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/orbd to provide /usr/bin/orbd (orbd) in auto modeupdate-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/servertool to provide /usr/bin/servertool (servertool) in auto modeupdate-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/tnameserv to provide /usr/bin/tnameserv (tnameserv) in auto modeupdate-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/jexec to provide /usr/bin/jexec (jexec) in auto modeSetting up daemon (0.6.4-1) ...Setting up jenkins (2.60.1-1) ...insserv: script mysql.server.sh: service mysql already provided!Processing triggers for ureadahead (0.100.0-19) ...Processing triggers for systemd (219-7ubuntu3) ...
注:管理密码在/var/lib/jenkins/secrets/initialAdminPassword文件里。
查看jenkins服务进程:
ps -ef | grep jenkins
访问路径不需要跟应用上下文,直接访问:http://10.0.0.128:8080/,当然你也可以放在Tomcat等容器里面运行。
Jenkins升级命令:
sudo apt-get update sudo apt-get install jenkins
注:jenkins升级可以直接替换jenkins.war为最新即可。
Jenkins需要的SSH处理
生成公钥私钥
一般用到SSH方式时,一般Jenkins和Tomcat并不是同一台服务器,所以才需要用到SSH进行文件传输。假设10.0.0.128是Jenkins服务器(Docker容器),而10.0.129是Tomcat服务器(Docker容器 )。在Jenkins服务器执行,命令:
$ ssh-keygen -t rsa -P ''
注:‘’表示密码为空。
boonya@ubuntu:~$ ssh-keygen -t rsa -P ''Generating public/private rsa key pair.Enter file in which to save the key (/home/boonya/.ssh/id_rsa): Created directory '/home/boonya/.ssh'.Your identification has been saved in /home/boonya/.ssh/id_rsa.Your public key has been saved in /home/boonya/.ssh/id_rsa.pub.The key fingerprint is:7f:a6:95:3d:7d:d5:b1:78:2b:7f:3f:58:92:61:7c:64 boonya@ubuntuThe key's randomart image is:+---[RSA 2048]----+| || E || . o. || +..+|| S ..+oo|| . =.oo|| . =.*.o|| = .ooo|| . .=|+-----------------+boonya@ubuntu:~$
上面输出了公钥(/home/boonya/.ssh/id_rsa.pub)和私钥(/home/boonya/.ssh/id_rsa):公钥认证,是使用一对加密字符串,一个称为公钥(public key), 任何人都可以看到其内容,用于加密;另一个称为密钥(private key),只有拥有者才能看到,用于解密。
发送公钥
使用如下命令进行公钥发送:
$ ssh-copy-id -i /home/boonya/.ssh/id_rsa.pub <receiver IP>
boonya@ubuntu:~$ ssh-copy-id -i /home/boonya/.ssh/id_rsa.pub 10.0.0.129The authenticity of host '10.0.0.129 (10.0.0.129)' can't be established.ECDSA key fingerprint is 3a:72:d1:d6:c3:c7:48:c5:5c:f8:a3:c8:8a:f5:36:19.Are you sure you want to continue connecting (yes/no)? yes/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keysboonya@10.0.0.129's password: Number of key(s) added: 1Now try logging into the machine, with: "ssh '10.0.0.129'"and check to make sure that only the key(s) you wanted were added.boonya@ubuntu:~$
通过SSH去验证上次登录:
boonya@ubuntu:~$ ssh 10.0.0.129Welcome to Ubuntu 15.04 (GNU/Linux 3.19.0-15-generic x86_64) * Documentation: https://help.ubuntu.com/Your Ubuntu release is not supported anymore.For upgrade information, please visit:http://www.ubuntu.com/releaseendoflifeNew release '15.10' available.Run 'do-release-upgrade' to upgrade to it.Last login: Mon Jul 17 08:29:58 2017 from 10.0.0.129boonya@ubuntu:~$
此时表明我们的Jenkins可以通过SSH去部署项目到Tomcat的服务上了。
Jenkins安装SSH插件
Jenkins系统配置SSH插件
Jenkins全局工具设置
JDK-Git-Maven
通过编写Shell脚本部署应用
后续继续补充................
参考资料
Linux配置SSH公钥认证与Jenkins远程登录进行自动发布
- DevOps Jenkins持续集成GitHub代码通过SSH实现构建部署
- Jenkins+Maven+Git+Email+SSH实现持续自动化构建部署
- Jenkins + Github持续集成构建Docker容器
- Jenkins : Jenkins+Maven+GitHub实现持续集成
- 如何将GitHub上的项目用jenkins进行持续的集成构建部署
- Jenkins+Github持续集成
- Jenkins 持续集成构建
- CentOS+Jenkins+git实现持续集成部署
- jenkins 实现PHP持续集成部署
- 持续集成jenkins部署
- 构建基于Jenkins + Github的持续集成环境
- 构建基于Jenkins + Github的持续集成环境
- 构建基于Jenkins + Github的持续集成环境
- 构建基于Jenkins + Github的持续集成环境
- 构建基于Jenkins + Github的持续集成环境
- 构建基于Jenkins + Github的持续集成环境
- 构建基于Jenkins + Github的持续集成环境
- jenkins+git+springboot+maven持续集成构建部署
- mysql 多表查询
- CornerStone的使用
- C#显示与隐式转换操作符
- javascript创建对象的几种方式?
- Windows pycharm下如何安装anaconda(python科学计算库)
- DevOps Jenkins持续集成GitHub代码通过SSH实现构建部署
- 手游摇杆(二)八方向摇杆和移动范围限制
- Codeforce Round #382(Div 1) B
- 【codevs 3187】队列练习3
- 51nod 1248 2 3 5 7的倍数(包容排斥)
- 第13章 逻辑架构和UML包图
- android_获取另一个数据库的内容
- BZOJ 4112 Pipe Stream [二分]
- 用杯子量水问题通用解法