环境准备centos7Java1.8Maven3.6.3Docker20.10.17Gitlabgitlab-ce:14.0.5-ce.0Jenkins相关依赖环境安装Java环境安装虽然我们用以docker方式安装Jenkins,所有的依赖镜像都已经打包好了。但是在后续使用Jenkins的过程中,我们会使用到Jenkins宿主机上的Java运行环境,所以还是需要安装javaJDK8并配置环境变量。推荐教程:https://segmentfault.com/a/11...maven环境安装推荐教程:https://segmentfault.com/a/11...部署docker安装推荐教程:https://segmentfault.com/a/11...Gitlab安装推荐教程:https://segmentfault.com/a/11...部署jenkins(基于docker)我们可以自己在本机部署jenkins,也可以使用docker进行部署,也就是这次我们选择docker来部署。备份/usr/local/java目录和/usr/local/java_bakcp中的cp-r/usr/local/java/usr/local/java_bakcp-r/usr/local/apache-maven-3.6.3目录-r/usr/local/apache-maven-3.6.3/usr/local/apache-maven-3.6.3_bak执行如下命令:dockerrun-d-p8001:8080-p8002:50000-v/usr/local/jenkins:/var/jenkins_home-v/etc/localtime:/etc/localtime-v/etc/local/java:/etc/local/java-v/usr/local/apache-maven-3.6.3:/usr/local/apache-maven-3.6.3--namejenkinsjenkins/jenkins:latest可以尝试在命令中加上-eJAVA_OPTS=-Duser.timezone=Asia/Shanghai,可以解决时区错误的问题Jenkins的(待测试),或者你可以在部署后使用它最终解决方案。需要注意的是:挂载/usr/local/jenkinsHome是jenkins的主目录挂载/etc/localtime目录是为了让容器中的jenkins与宿主机时间保持一致;mount/etc/local/java是将宿主机的javamount/usr/local/apache-maven-3.6.3同步到容器中的jenkins(否则后面会有坑)将宿主机的maven同步到容器中的jenkinscontainer(不然后面会有坑)下面是命令的解释:dockerrun-d-p8001:8080\#挂载容器中的8080端口到宿主机的8001端口-p8002:50000\#挂载端口容器中的50000到宿主机的8002端口-v/usr/local/jenkins:/var/jenkins_home\#将容器中的目录/var/jenkins_home挂载到宿主机目录/usr/local/jenkins-v/etc/localtime:/etc/localtime\#挂载容器/etc/localtime中的目录,挂载到宿主机目录/etc/localtime-v/etc/local/java:/etc/local/java\#挂载目录/etc/local/java到宿主机目录/etc/local/java-v/usr/local/apache-maven-3.6.3:/usr/local/apache-maven-3.6.3\#挂载目录/容器中的usr/local/apache-maven-3.6.3进入宿主机目录/usr/local/apache-maven-3.6.3--namejenkins\#命名容器jenkinsjenkins/jenkins:latest#选择镜像然后执行命令dockerps,我们会发现jenkins还没有启动。这是因为jenkins容器没有权限访问我们刚刚挂载的目录。因此,我们需要给挂载的目录赋予权限。chown-R1000:1000/usr/local/javachown-R1000:1000/usr/local/apache-maven-3.6.3chown-R1000:1000/usr/local/jenkinschown-R1000:1000/etc/localtime重新执行以下命令启动jenkins。dockerrun-d-p8001:8080-p8002:50000-v/usr/local/jenkins:/var/jenkins_home-v/etc/localtime:/etc/localtime-v/usr/local/java:/usr/local/java-v/usr/local/apache-maven-3.6.3:/usr/local/apache-maven-3.6.3--namejenkinsjenkins/jenkins:latest进入Jenkins报错,看这个教程:https://blog.csdn.net/DDJ_TES...如果觉得Jenkins占用内存太大,我们可以通过如下方法限制jenkins占用的内存大小:#dockerlimitmemorysizedockerupdatejenkins-m3g--memory-swap-1#命令详解--memoryor-m限制容器的内存使用量--memory-swap限制内存和Swap的总和,如果不设置,默认是--memory的两倍检查是否jenkins启动成功,执行命令dockerps查看是否让jenkins在浏览器中访问http://hostip:8001,如果出现如下页面,说明命令dockerlogsjenkins执行成功,输入密码日志文件被复制。用浏览器访问http://hostip:8001,找到刚才复制的密码,粘贴到输入框。点击继续,出现如下页面,选择默认选项(安装推荐插件),继续。等待插件安装完成。如果安装失败,请多试几次。(也可以稍后安装)插件安装完成后,会自动进入创建账号页面。这里为了快速进行,我们直接选择使用admin账号继续。设置jenkins的路径,我们可以默认继续点击开始使用jenkins进入jenkins管理面板使用Jenkins部署Java项目。点击ManageJenkins,进入jenkins管理,选择ManagePlugins,进入jenins插件管理,选择Available,搜索插件,安装搜索maven,勾选第一个MavenIntegration,最后选择Downloadnow...restart。等待插件下载完毕,最后选择空闲时重启即可。Jenkins安装插件可能会重启,也可能会挂掉。这时候我们只需要手动执行dockerstartjenkins即可。同理安装插件PublishOverSSH。重启进入Jenkins后,我们重新进入ManagerJenkins,点击进入管理用户,选择admin旁边的小齿轮,然后向下滚动找到密码项。更改密码并保存。再次登录Jenkins,点击进入ManageCredentials,配置全局账户密码。选择添加一些凭证,设置账号,密码等,其中id是凭证的唯一标识,只要唯一不重复即可。描述此凭据用于识别的内容。比如图中的host@xiaoYan就是xiaoYan主播的账号密码。按照上一步,我们也添加一个gitlab认证的凭证记录,再次进入ManagerJenkins,点击进入系统配置。然后下拉到最后,找到SSHServers配置项,点击添加。按照下图提示配置完成后,点击保存退出。name:给主机起个名字Hostname:主机ipUsername:主机用户名RemoteDirectory:主机默认目录Passphrase/Password:主机用户密码这次我们将配置全局工具配置。首先配置全局默认的maven配置文件,填写maven配置文件在jenkins同一主机的路径。注意:maven和jdk的home路径必须填写之前挂载在容器中的地址。这个地址可以是任意的,只能与host相关对应的maven和jdk才能正确挂载。然后配置Java目录。如果出现图中的提示,说明宿主机的Java目录没有挂载到docker容器的Jenkins中。所以我们需要手动将/usr/local/java挂载到Jenkins中。(如果前面的命令没问题,这里就不会出现这种情况。但是我自己执行过程中的命令有偏差,导致java目录没有正确挂载)手动挂载Docker目录:https://segmentfault.com/a/11...在配置git目录中。在jenkins主机上执行whereisgit,得到git命令所在的目录。最后配置好maven目录和Jdk目录,保存退出。最后,是时候配置Java项目了。点击NewProject选择maven风格,输入项目名称(这个名称会是jenkins下workspace的项目目录),添加描述并配置gitlab地址,其中Credentials选择我们之前在全局Credentials配置的gitlab认证,Branch选择我们需要打包部署的分支。ConfigureSSHPublishers,即jar包打包的动作。ConfigureBuild,即构建需要的项目pom.xml文件和打包命令。保存退出,点击BuildNow。等到出现一个绿色的小勾,表示构建成功。登录部署jar包的服务器,查看jar包是否正确打包并发送到指定目录。java服务是否正确启动?踩坑Jenkins时区不对,相差8小时,解决方法#进入容器dockerexec-it-urootjenkinsbash#修改容器时区echo'Asia/Shanghai'>/etc/timezone#查看修改后的容器时区cat/etc/timezoneexit#重启jenkins容器dockerrestartjenkins
