🍊 触发Jenkins

# Jenkins简介 一款免费且开源的持续集成工具 通俗地讲,它可以自动化地对代码仓库进行操作。 在torchserve部署中,因为源代码经常性会有修改,如果每次修改完源代码之后需要手动更新镜像,那未免有些繁琐,Jenkins可以帮助我们自动化这一过程。 每次代码仓库的master分支有所变化,Jenkins就会触发预先设定的命令,完成镜像的构建 Jenkins在意识形态上是站在乌克兰那一边的 # Jenkins项目设置 在Jenkins界面点击"New Items",然后输入项目名字,选择`FreeStyle project`. >i Jenkins项目名字,尽量和代码仓库的名字保持一致。在公司,不同部门共用Jenkins,一般会在一类项目加一个前缀,例如`ai-inference`表示AI模型推理。 >i 配置没必要重头开始,如果以前有项目已经建立过,可以在最下面的`Copy from`处,拷贝一个项目,可以拷贝车牌识别项目的配置。 Description处填写项目的简述 Discard old builds可以删除老旧的构建,我一般设置为保留10条记录 ## Source Code Management 选择Git,然后输入项目地址,比如说`https://gitlab.com/yinghaodang/chat_gpt.git`,选用HTTP/HTTPS协议的话,要注意是否开启了2FA认证,一般情况下是开启的。2FA认证要求使用token代替密码访问代码仓库。token的获取在个人信息界面的`Access Tokens`处。 下图是配置Credentials的界面,点击`ADD`按钮即可弹出。 ![image.png](https://cos.easydoc.net/12310430/files/lerx95n4.png) 下图是源代码管理界面的截图 ![image.png](https://cos.easydoc.net/12310430/files/lerxdu6n.png) ## Build Triggers Jenkins要想使用Gitlab的Webhooks需要安装插件,插件管理页面搜索`gitlab plugin`。 `Generic Webhook Trigger`这个插件也不错,根据介绍一个插件就集成了GitHub,Gitlab和Gitee。 >i 有个小技巧,可以看插件的副标签,选择含有`Build Triggers`的插件。 >w 生产环境中,Jenkins的插件需要一开始规划一下。因为安装插件之后需要重启Jenkins,如果有项目正在构建的话会失败。 ![image.png](https://cos.easydoc.net/12310430/files/leryo7nz.png) 源代码的任意一点变化,需要经过两道关卡才能触发Jenkins。 - Gitlab中的设置,可以设置何种行为发送HTTP请求 - Jenkins插件里的设置,可以设置接收何种行为的HTTP请求 ## Build Steps 在这里输入一些想对源代码做的操作。 根据Jenkins的安装位置不同,项目配置文件所在的位置也有所不同,如果以Docker形式安装,其位置在`/var/jenkins_home/jobs/xxx`。对应的工作目录就是`/var/jenkins_home/workspace/xxx`,此目录和代码仓库的目录别无二致,如果此目录下有Dockerfile,则需要`cd`到该目录下,然后`docker build -t image_name:v1 .` 和 `docker push image_name:v1` 本来是想用chat_gpt这个项目测试一下的,但是由于Docker里面没有装Docker。虽然是以`--privileged=true`形式启动的,但是Docker容器里面装Docker听说有风险。 第一次需要手动触发Build Now按钮 `build`之后的结果会以`#1`,`#2`这样的形式存在,点击进入,然后点击`Console Output` ``` Started by user yinghaodang Running as SYSTEM Building in workspace /var/jenkins_home/workspace/chat_gpt The recommended git tool is: NONE using credential da260279-810b-4ecd-a76c-2f3aced047b4 Cloning the remote Git repository Cloning repository https://gitlab.com/yinghaodang/chat_gpt.git > git init /var/jenkins_home/workspace/chat_gpt # timeout=10 Fetching upstream changes from https://gitlab.com/yinghaodang/chat_gpt.git > git --version # timeout=10 > git --version # 'git version 2.30.2' using GIT_ASKPASS to set credentials Gitlab代码仓库的访问权限,日期到2023年4月3日过期。 > git fetch --tags --force --progress -- https://gitlab.com/yinghaodang/chat_gpt.git +refs/heads/*:refs/remotes/origin/* # timeout=10 > git config remote.origin.url https://gitlab.com/yinghaodang/chat_gpt.git # timeout=10 > git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10 Avoid second fetch > git rev-parse refs/remotes/origin/main^{commit} # timeout=10 Checking out Revision 5463f3192ccdb27130e326ca3b63b11916342ea3 (refs/remotes/origin/main) > git config core.sparsecheckout # timeout=10 > git checkout -f 5463f3192ccdb27130e326ca3b63b11916342ea3 # timeout=10 Commit message: "Initial commit" First time build. Skipping changelog. [chat_gpt] $ /bin/sh -xe /tmp/jenkins13890970920643442894.sh + cd /var/jenkins_home/jobs/chat_gpt + ls Finished: SUCCESS ``` 可以观察到项目的地址是`/var/jenkins_home/workspace/chat_gpt` 如果仅是测试的话可以使用: ``` cd /var/jenkins_home/workspace/chat_gpt ls > /var/jenkins_home/temp ``` 新创建的`temp`文件会映射到宿主机的`~/software/jenkins/temp`(以卷的形式) 通过当本地push代码到代码仓库之后,观察Jenkins是否会执行命令并在本地形成`temp`文件。 如果想要写一个Bash命令的话,还是需要宿主机的环境的,以Docker安装Jenkins难以解决这个问题。Jenkins的原始镜像非常"贫瘠"。 ![image.png](https://cos.easydoc.net/12310430/files/les52qov.png) [本文相关的Jenkins安装](https://easydoc.net/doc/20630880/Id3thciC/o443c7sx) # Gitlab仓库设置Webhooks Webhook是一种应用给其他应用提供实时信息的方式。当某个事件发生时,比如代码推送或评论发布,源网站可以发起一个HTTP请求到webhook配置的URL,从而触发另一个网站的行为。webhook有时也被称为反向API。 在torchserve部署中,Webhooks可以使得代码仓库一旦发生变化,就会发送一个HTTP请求到Jenkins,从而触发Jenkins的一系列操作。 >i 一般而言,Jenkins中会写下:构建镜像,然后推送镜像,这两行代码。 过程我已经懂了,但是复现的过程中,有出现了奇奇怪怪的困难 GitLab不允许Webhooks本地的,不玩了,跑了。 ![image.png](https://cos.easydoc.net/12310430/files/les96t3x.png) 图片上URL是Jenkins设置界面Triggers处出现的URL,密码是Jenkins的秘钥。获取方式请看下图。 ![image.png](https://cos.easydoc.net/12310430/files/les9h68x.png) # 查看结果 目前只有一份文件 ![image.png](https://cos.easydoc.net/12310430/files/les5s9ru.png) 只能手动Build一下了 ![image.png](https://cos.easydoc.net/12310430/files/les9afwi.png)