jenkins+docker+Linux+gitlab完成自动化部署 2022-03-12 21:43 421阅读 0赞 jenkins在mac中安装, docker里面分别安装了linux,作为服务器,拉取gitlab作为私人代码库。 首先,我们应该要明白Jenkins的原理,他是这样的 1. 通过配置gitlab,让我们可以把代码存入到仓库。 2. 通过配置jenkins和gitlab的关联,让jenkins可以通过SSH来获取gitlab的代码到jenkins的机子上。 3. 通过配置jenkins和linux服务器,通过SSH协议,可以把jenkins中打包好的包,传输到服务器上面。 4. 在jenkins中通过设置好上传好包后,执行服务器中固定的shell脚本,然后进行对包的运行和发布处理。 Jenkins首先会通过Git将代码clone到本地,然后执行在Build中指定的 pom.xml文件和指定的命令,打包后,然后通过SSH协议,上传到服务器,然后在服务器上进行脚本发布。 下面开始按照这个步骤来进行处理,主要说出需要注意的地方。 **第一步:** docker拉取gitlab,然后进行安装处理。 需要注意如果直接进行安装,在打开的gitlab时候,发现: ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FpdXlpbnRocmVl_size_16_color_FFFFFF_t_70][] 这个地方不会是你的ip地址,会是你容器的id,这是很不方便的,所以我们在启动的时候需要加入hostname指定,如下: docker run -itd -p 8443:443 -p 8081:80 -p 2222:2222 -p 9090:9090 --name gitlab --hostname 192.168.70.102 --privileged=true gitlab/gitlab-ce:latest 同时,我这边把SSH的默认端口修改为了2222,这个修改需要到对应的配置配置文件中修改,当然也可以不修改,我这边主要是怕端口冲突。 $ docker run -d \\ \--hostname 10.10.1.70 \\ *\#* 指定容器域名,未知功能*:*创建镜像仓库的时候使用到 \-p 8443:443 \\ *\#* 将容器内*443*端口映射到主机*8443*,提供*https*服务 \-p 8080:80 \\ *\#* 将容器内*80*端口映射到主机*8080*,提供*http*服务 \-p 2222:22 \\ *\#* 将容器内*22*端口映射到主机*2222*,提供*ssh*服务 \-p 9090:9090 \\ *\#* 将容器内*9090*端口映射到主机*9090*,提供*prometheus*服务 \--name gitlab \\ *\#* 指定容器名称 \-v /docker\_data/gitlab\_home/config:/etc/gitlab \\ *\#* 将本地*/home/gitlab/config*挂载到容器内*/etc/gitlab* \-v /docker\_data/gitlab\_home/logs:/var/log/gitlab \\ *\#* 将本地*/home/gitlab/logs*挂载到容器内*/var/log/gitlab* \-v /docker\_data/gitlab\_home/data:/var/opt/gitlab \\ *\#* 将本地*/home/gitlab/data*挂载到容器内*/var/opt/gitlab* gitlab/gitlab-ce:latest *\#* 镜像名称*:*版本 同时我如果按照上面的进行启动,发现只要加入data这个数劵,总是无法启动成功,查看这个本地文件夹权限也是够的,实在不知道是什么原因,怀疑还是权限问题导致,我的宿主机是mac,无奈我就用上面语句启动,只是一个测试。 **上面这一步,就已经把本地的代码和gitlab进行关联了起来,** **第二步: ** 安装好jenkins,查看网上其他文章,就可以安装好,需要注意记得安装两个主要的插件, a. Publish over SSH 用于上传包到linux服务器。(下面在说这个插件的配置) b. [Maven Integration plugin][] 这个插件用户jenkins创建时候,创建maven任务,对应maven项目处理。 **第三步: 把jenkins和gitlab进行代码关联起来。** ** ** ** **![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FpdXlpbnRocmVl_size_16_color_FFFFFF_t_70 1][] 这一步就是两个进行了关联,需要注意的是,在填写SSH key 私钥的时候,这个地方填写的事私钥,gitlab那边填写的事公钥,同时,需要在jenkins的这台机子上生成公钥和私钥。 经过这个步骤,我们就把gitlab和jenkins进行了联系,通过这个jenkins来clone我们的提交到gitlab上面的代码。同时,我们需要配置jenkins的一些jdk和maven这样的基础配置,用于jenkins对代码的打包处理。 **第四步 gitlab和jenkins进行构建触发器设置 ** ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FpdXlpbnRocmVl_size_16_color_FFFFFF_t_70 2][] 图上画线的地方,需要在gitlab中,点击你需要关联的项目,》设置》集成 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FpdXlpbnRocmVl_size_16_color_FFFFFF_t_70 3][] 在这个地方填入, 我这边选择的触发形式是,提交代码就自动构建一次。 填写成功后需要注意,在下放的 SSL verification 这个选项去掉, 不进行SSL验证, 然后点击 add webhook ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FpdXlpbnRocmVl_size_16_color_FFFFFF_t_70 4][] 然后下面会生成一个 选项, 然后选择第一个 push events,模拟推送,如果在这个页面最上面显示 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FpdXlpbnRocmVl_size_16_color_FFFFFF_t_70 5][] 显示200, 表示模拟推送成功,那个jenkins就在进行构建了。 需要注意的如果报错了, 有可能是gitlab为了安全考虑, 不允许本地网络使用这个钩子,这个时候,我们就需要设置允许本地网络使用, 具体设置路径, 我们用root账号登录,然后点击 管理中心(就是一个小?的图标),然后进入设置,然后选择网络, 如下: ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FpdXlpbnRocmVl_size_16_color_FFFFFF_t_70 6][] 这样就可以了。 **第五步: jenkins和Linux关联。 ** ** ** ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FpdXlpbnRocmVl_size_16_color_FFFFFF_t_70 7][] 这个地方就是打通了, jenkins和linux之间的通道, 在这里需要确定, 你远程的Linux已经开启了SSH service,你可以查看进程是否 ps -elf | grep ssh 是否有, 这个地方配置,可以有地方修改默认端口。 需要注意这个地方的remote directory 是你Linux的地址,和下面的图中的 Remote directory 是集成关系。 这里我直接使用了账号和密码登录,测试如果现实success表示和Linux关联成功, 这个地方也就是把你的jar包通过SSH发送到Linux服务器的地方。 **第六步:设置把jenkins打包好的jar,发送到服务器的位置,然后执行脚本。 ** ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FpdXlpbnRocmVl_size_16_color_FFFFFF_t_70 8][] 图中 Source files: 这个地址的怎么写,可以查看你构建时候的日志, 查看如下两句话,然后把不同的找不出来,就是这个地址了, 应为这个原文件的地址是相对于jenkins home的路径的。 09:51:48 构建中 在工作空间 /Users/Shared/Jenkins/Home/workspace/SpringBootJenkins 中 09:51:59 \[INFO\] Building jar: /Users/Shared/Jenkins/Home/workspace/SpringBootJenkins/target/springbootdemoweb-0.0.1-SNAPSHOT.jar Remove prefix: 这个就是去除前面不需要的 Remote directory: 这个是集成上面那个图的地址,相当于把这个jar包上传到linux的具体的位置。 Exec command: 这个就是执行shell脚本了。 这里都是相对于linux服务器写的,需要linux上面这个目录有这个shell脚本。 **注意:不要加入 / , 我这边加入 / 后,包总是不能上传成功。 ** 如果构建时候,出现如下日志就是OK的了 09:52:01 [JENKINS] Archiving /Users/Shared/Jenkins/Home/workspace/SpringBootJenkins/target/springbootdemoweb-0.0.1-SNAPSHOT.jar to com.example/springbootdemoweb/0.0.1-SNAPSHOT/springbootdemoweb-0.0.1-SNAPSHOT.jar 09:52:02 SSH: Connecting from host [localhost] 09:52:02 SSH: Connecting with configuration [192.168.70.102] ... 09:52:02 channel stopped 09:52:03 SSH: EXEC: STDOUT/STDERR from command [cd /var/dev/springboot 09:52:03 sh ./springbootshell.sh restart] ... 09:52:03 >>> api PID = 1084 begin kill 1084 <<< 09:52:05 >>> springbootdemoweb-0.0.1-SNAPSHOT.jar is not running <<< 09:52:05 >>> start springbootdemoweb-0.0.1-SNAPSHOT.jar successed PID=1140 <<< 09:52:05 SSH: EXEC: completed after 2,425 ms 09:52:05 SSH: Disconnecting configuration [192.168.70.102] ... 09:52:05 SSH: Transferred 1 file(s) 09:52:05 Finished: SUCCESS 这样,你每次提交代码,然后jenkins拉取代码,然后自动部署,发包到Linux,然后在自动启动shell脚本,这样就服务包就发布了。 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FpdXlpbnRocmVl_size_16_color_FFFFFF_t_70]: /images/20220312/27d4f031531846e4afd3754ba7194099.png [Maven Integration plugin]: https://wiki.jenkins.io/display/JENKINS/Maven+Project+Plugin [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FpdXlpbnRocmVl_size_16_color_FFFFFF_t_70 1]: /images/20220312/1900c7afcfd346a48b97d86e2c8f982e.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FpdXlpbnRocmVl_size_16_color_FFFFFF_t_70 2]: /images/20220312/e5f55af63f6148e1968c3ed0fa25bf3f.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FpdXlpbnRocmVl_size_16_color_FFFFFF_t_70 3]: /images/20220312/78a13d1845184a05bab0e5372812d659.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FpdXlpbnRocmVl_size_16_color_FFFFFF_t_70 4]: /images/20220312/6665210b9c754d69ac8430f456907cec.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FpdXlpbnRocmVl_size_16_color_FFFFFF_t_70 5]: /images/20220312/5c7cc63588214e2b81354a120724352e.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FpdXlpbnRocmVl_size_16_color_FFFFFF_t_70 6]: /images/20220312/346106af437f474f9e753b713d6b8edb.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FpdXlpbnRocmVl_size_16_color_FFFFFF_t_70 7]: /images/20220312/01c3bdf747cf469a98783d6e8a1f42f4.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FpdXlpbnRocmVl_size_16_color_FFFFFF_t_70 8]: /images/20220312/cac90743250441519821d9aa1c03c2cc.png 文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。
相关 cobbler自动化部署 cobbler -------------------- 目录 前言 一、简介 二、工作原理 三、cobbler安装配置 怼烎@/ 2022年01月16日 18:33/ 0 赞/ 225 阅读
相关 jenkins+gitlab自动化部署 本次部署前提 1、搭建好jenkins,搭建文档地址:[https://blog.csdn.net/baidu\_38432732/article/details/80499 不念不忘少年蓝@/ 2022年01月28日 08:39/ 0 赞/ 461 阅读
相关 jenkins+docker+Linux+gitlab完成自动化部署 jenkins在mac中安装, docker里面分别安装了linux,作为服务器,拉取gitlab作为私人代码库。 首先,我们应该要明白Jenkins的原理,他是这样的 古城微笑少年丶/ 2022年03月12日 21:43/ 0 赞/ 422 阅读
相关 自动化部署jenkins 自己实现的一个自动化部署 1.在jenkins中,在系统配置中添加ssh 2.创建一个maven项目 3.选择相关信息 4.上传shell脚本到服务器 5.给shel 曾经终败给现在/ 2022年05月06日 09:00/ 1 赞/ 223 阅读
相关 Jenkins自动化部署 一、安装Jenkins 1. 安装JDK环境 源码安装jdk1.8及以上版本,环境变量vim /etc/profile写在最后面如下: export JAVA\_HOM 逃离我推掉我的手/ 2022年05月14日 08:05/ 0 赞/ 183 阅读
相关 前端自动化部署 前景提要: 假设某个项目涉及到三个及以上的project.每个project有自己的版本,众多的开发者共同在开发.那么,如何能做到不同project之间发布的时候做到同步且 朴灿烈づ我的快乐病毒、/ 2022年05月17日 08:12/ 0 赞/ 115 阅读
相关 自动化部署脚本 1、自动化部署脚本如下: init.sh脚本 获取当前脚本所在的目录并赋值给变量bin,/opt/xxx/xxx bin=`dirname 落日映苍穹つ/ 2022年05月28日 08:57/ 0 赞/ 135 阅读
相关 项目自动化部署 !/bin/bash env_path=$(cd `dirname $0`; pwd) source ${env_path}/bi. 冷不防/ 2022年06月02日 08:37/ 0 赞/ 112 阅读
相关 Jenkins自动化部署 Jenkins自动化部署 1. Jenkins Centos yum方式安装 ![image-20210322202148078][] [CentOS 官方安装方 缺乏、安全感/ 2022年11月13日 08:56/ 0 赞/ 48 阅读
相关 Maven 自动化部署 项目开发过程中,部署的过程包含需如下步骤: - 将所的项目代码提交到 SVN 或者代码库中并打上标签。 - 从 SVN 上下载完整的源代码。 - 构建应用。 - 存储构建... 灰太狼/ 2020年05月24日 22:47/ 0 赞/ 1227 阅读
还没有评论,来说两句吧...