吾爱乐享
个人学习网站

在docker安装jenkins实现cicd流程

前言

通过jenkins来实现从开发到提交到代码库从而触发jenkins自动打包maven项目,把打包好的jar包上传到资源服务器中,最后从资源服务器拿到jar包后部署到项目服务器中

1,通过docker部署jenkins项目

docker run --name jenkins -p 8080:8080   -u root -v /var/mydata/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker -d --restart always jenkins/jenkins
#--name :给运行的docker起一个名字,这里叫jenkins
#-p:指定端口,第一个8080是项目运行的端口,宿主机访问的端口,第二个8080是docker内运行jenkins的端口
# -u :用行jenkins时用root用户运行,如果不指定,则默认用的是jenkins用户,jenkins用户默认权限不足,如果要在jenkins中使用宿主机上的docker命令会提示没有权限
# -v :数据持久化,把docker内部的目录映射到宿主机上的目录,这里是把docker上的/var/jenkins_home数据和配置相关的目录映射到宿主机的/var/mydata/jenkins_home这个目录,两个目录的数据就可以共享
# -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker :把宿主机执行docker命令的目录映射到jenkins上的目录,这时就可以在jenkins上执行docker命令
#-d :后台运行docker
#  --restart always :重启服务器后自动启用docker项目
#jenkins/jenkins :jenkins的镜像源名称,可以通过docker search xxx查询对应镜像的版本进行下载启用对应的镜像

docker 启用后可以用命令 docker logs -f xxx,查看对应docker的日志,xxx代表的是docker的启用的名称或id

image-20230420141515936

启用docker后 输入宿主机上的IP:8080访问jenkins

2,安装对应的插件

  1. Gitee Plugin:提交代码到gitee时可以触发jenkins自动构建

  2. Maven Integration plugin :maven项目需要的插件

  3. publish-over-ssh:打包好的包上传到远程服务器

image-20230420142301632

搜索对应插件名称进行安装即可,安装好之后重启jenkins

3,配置对应的环境

在系统设置中配置gitee

image-20230420142518830

在系统配置中配置Publish over SSH远程资源服务器,配置maven打包后上传到的资源服务器

方法一:通过key去连接,(推荐,安全)

#生成rsa密钥,回车
ssh-keygen -t rsa

#把公钥内容追加到认证文件中
cat id_rsa.pub >> authorized_keys
#授权
chmod 700 /root/.ssh
chmod 700 /root/.ssh/id_rsa
chmod 700 /root/.ssh/id_rsa.pub
chmod 600 authorized_keys

在 /root/.ssh 目录下生成两个密钥文件,需要把公钥追加到authorized_keys中:
id_rsa:私钥
id_rsa.pub:公钥

2、把 id_rsa 私钥内容添加到 Publish over SSH 的 key 中

  1. 配置的key是为了链接资源服务所需要的秘钥
  2. 在资源服务器上,使用命令生成秘钥ssh-keygen -t rsa
  3. 生成的秘钥在/root/.ssh下有对应秘钥id_rsa是私钥,id_rsa.pub是公钥,复制id_rsa中的秘钥粘贴到jenkins中的key字段中

image-20230420142948305

  1. 配置SSH Servers的值,SSH Servers配置的是需要连接的资源服务器的IP和登录的账号和资源服务需要存放资源的目录

  2. Name:随便起一个名字

  3. Hostname:资源服务器对一个的ip

  4. Username:资源服务器对应的账号

  5. Remote Directory:远程存放资源的目录

  6. 点击高级后,可以配置服务器的端口,和链接服务器的超超时时间


image-20230420144213700

image-20230420144452524

  1. 配置好ssh后点击Test Configuration提示Success,说明链接成功

image-20230420144938111

方法二:通过服务器连接密码,不安全

image-20230420145358942

  1. 在系统工具中配置maven的settings的路径

image-20230420144650607

  1. 安装maven环境

image-20230420144809822

4,新建一个maven项目

image-20230420145515243

gitee链接是在系统配置中配置的gitee

image-20230420145552159

源码管理git是添加项目的git地址和对应的账户

image-20230420145812508

Gitee WebHook 密码是在对应项目的gitee配置中找到Gitee WebHook ,添加jenkins生成的密码,配置后就可以实现提交代码后自动触发jenkins部署image-20230420150126601
勾选Delete workspace before build starts后,每次部署都会删除对应的工程下的所有内容

image-20230420145902462

image-20230420150155288

配置maven,选择对应的maven版本执行的打包命令以及pom文件的

  1. maven版本就是在系统配置中安装的的那个maven
  2. 目录:clean package -Dmaven.test.skip=true:执行打包操作,clean是清除之前打包的target文件,package 进行打包成jar包,-Dmaven.test.skip=true跳过执行test测试中的脚本
  3. pom.xml:配置需要指定的pom.xml的文件,配置的是项目pom所在的位置,当前位置是在工程所在的位置,也就是pom文件所在的目录,所以只需要配置pom.xml即可image-20230420150501817

配置打包好的jar包需要发送的远程服务器

  1. SSH Server:系统配置中配置的SSH Server的名称,点击高级出现Transfers等字段
  2. Source files:需要把那个文件发送到远程服务器,这里需要发送的打包好的jar包 ,打包好的jar包在target/目录下,所以配置的是target/*.jar,如果需要发送多个文件到资源服务器,可以用逗号隔开配置多个
  3. Remove prefix:上传后需要去除的路径。这里需要去除target
  4. Remote directory:远程的目录,就是在远程服务器上存放的jar所在的目录,位置是在系统配置的目录前提下的下级目录,之前系统配置的是/var/mydata/,这里配置的是maven,此时上传jar包后,就在var/mydata/maven目录下
  5. 勾选Verbose output in console,就是在执行的时候控制台打印日志
  6. Exec command在这个添加shell脚本用来启用jar包

  7. image-20230420152024669

image-20230420151029720

  1. image-20230420152208458

image-20230420153418932

问题汇总

  1. 使用jenkins执行shell脚本时,如果有nohup命令时,需要加上BUILD_ID=dontKillMe

jenkins默认会在构建完成后,杀掉构建过程中由shell命令触发的衍生进程。

jenkins根据BUILD_ID识别某个进程是否为构建过程的衍生进程,故修改BUILD_ID后,jenkins就无法识别是否为衍生进程,则此进程能在后台保留运行。

结论就是Jenkins程序只负责运行伪命令行nuhup 命令,并不保证是否成功运行 nuhup后面的命令。

  1. 使用cp命令时,cp -rf xxx xxx 需要强制覆盖已有的文件,每次都会提示,用在jenkins时无法复制替换

    原因是linux中的直接使用cp命令默认使用的是 cp -i,所以会每次提示
    要不提示就用绝对路径的cp命令,此时用的就是cp 所以加上-rf就可以强制覆盖且不用提示
    /bin/cp -rf xxxx xxxx

本文永久更新地址:

https://www.fenxiangbe.com/p/在docker安装jenkins实现cicd流程.html

赞(0) 打赏
未经允许不得转载:吾爱乐享 » 在docker安装jenkins实现cicd流程

评论 抢沙发

评论前必须登录!

 

推荐免费资源共享,个人经验总结学习

联系我们联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏