首页
Search
1
v2ray异常错误之二
3,310 阅读
2
linux时区设置
2,698 阅读
3
DB2常用操作
2,173 阅读
4
websphere修改jvm内存xmx和xms
1,929 阅读
5
nfs客户端文件属主为nobody的现象
1,552 阅读
技术
生活
运动
游戏
电影
登录
Search
标签搜索
docker
linux
troubleshooting
nginx
secure
truenas
mysql
windows
python
esxi
docker swarm
oracle
zabbix
tomcat
blog
dsm
群晖
rpa
freenas
db
yuc
累计撰写
291
篇文章
累计收到
0
条评论
首页
栏目
技术
生活
运动
游戏
电影
页面
搜索到
3
篇与
的结果
2022-06-07
jenkins api触发构建
0x0 背景 基于文档jenkins构建docker镜像的问题,现在有了进一步的需求,在构建镜像的时候需要定制oem版本的包,或者后续可能会有多个版本,那么每个版本都新增一个jenkins任务维护起来太过于麻烦,所以需要有办法能提供一个通用的打包任务 0x1 问题 要能够通用的打包任务,重点在于以下: 打包的时候来提交参数,war的地址/war的版本来定制,其他的代码文件与之前的固定版本一致即可 基于上面这个问题,要么jenkins任务的时候弹窗给出参数,要么使用接口来触发任务了 0x2 解决 以上第一个问题是没有问题的,当前固定版本的构建也是通过脚本获取了war文件和war版本信息,后续的操作跟文件无关了,所以这部分代码通用。第二个问题选择使用jenkins api的方式触发构建 0x3 jenkins api jenkins api需要token鉴权,所以使用一个普通用户创建一个token即可(保证安全),登录jenkins后点击用户名,再选择configure,最后选择show Legacy API Token,即可复制出有效token,之后再按照jenkins api文档给出的示例调用方式,这里还有一个重点问题,因为需要提供参数,所以接口要选择'/buildWithParameters',但使用下面调用请求返回报错: curl -XPOST http://jenkins.xxx.com/job/镜像-common/buildWithParameters --user yuctest:xxxxx4a25f85629a846ba7285d7xxxxx --data war=ftp://192.168.xx.xx/xxx/xxx/123.war --data version=cccccc 前端的报错内容很模糊,无参考价值,但jenkins后台日志提示如下: java.lang.IllegalStateException: This build is not parameterized! 基本上可以推断出我们使用的传参接口,但是创建的任务却没有启用相关的功能,所以应该要修改以下任务。 在任务配置的通用栏下,可以看到选项'This project is parameterized',勾选后还要继续设置传送哪种参数,否则是无法保存的,我们这里需要传送两个参数,并且都是字符串,所以选择了string类型,并且设置名称,值可以不设置,之后变可以在后面的执行步骤中获取这两个变量了 0x4 最后 使用接口测试就没有问题了,余下的步骤也参考之前的固定版本就行 20220609 在jenkins中点击构建的时候会弹到参数页面,输入给定的参数就行了,不是一定需要通过api调用
2022年06月07日
1,210 阅读
0 评论
0 点赞
2022-06-07
jenkins打包出现的域名解析问题
0x1 某分支打包失败,通过日志查看到如下错误: stack: Error: getaddrinfo ENOTFOUND cdn.npmmirror.com at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:71:26) [npminstall:get] retry GET https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001349.tgz after 100ms, retry left 4, error: Error: getaddrinfo ENOTFOUND cdn.npmmirror.com at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:71:26) { errno: -3008, code: 'ENOTFOUND', syscall: 'getaddrinfo', hostname: 'cdn.npmmirror.com', name: 'RequestError', data: undefined, path: '/packages/caniuse-lite/1.0.30001349/caniuse-lite-1.0.30001349.tgz', status: -1, headers: {}, res: [Object] }, status: -1, headers: {}, 错误是挺明显的,地址无法解析到,并且是下载nodejs模块的过程中。接着在服务器上测试了下,确实无法访问: # 使用ping [root@localhost product-docs]# ping cdn.npmmirror.com ping: cdn.npmmirror.com: 未知的名称或服务 # 使用nslookup > server 192.168.10.184 Default server: 192.168.10.184 Address: 192.168.10.184#53 > cdn.npmmirror.com ;; Truncated, retrying in TCP mode. ;; Connection to 192.168.10.184#53(192.168.10.184) for cdn.npmmirror.com failed: connection refused. 但这里有个疑问,应该一直是使用的淘宝源,这个地址倒是第一次见到,于是粘贴到浏览器访问,确实是访问到了新地址上,那么可以确定源是没有问题的,依旧是淘宝,是地址访问的问题。 0x2 继续查看nslookup报错的信息,可以看到尝试使用tcp模式,但接下来访问tcp端口出现异常,可以继续排查dns问题了。进入dns服务器查询端口情况,发现确实没有监听,重启解决 0x3 此问题与这个问题一致: https://yuc.pub/uncategorized/295/ 0x4 之前是重启过dns服务的,但没有监听tcp就比较异常,而且重启过程中也没有报错,如何解决呢?
2022年06月07日
770 阅读
0 评论
0 点赞
2022-05-27
jenkins构建docker镜像
背景 因为有用户需要容器化运行,需要我们提供镜像,但镜像构建分发还是比较麻烦的,涉及到如下步骤: 下载此版本最新的war包 构建war包为镜像 推送到仓库 如果总是人工操作必然会浪费很多时间,于是使用jenkins来提供自动化的流程 注意点 因为Dockerfile/启动脚本的以后可能会修改,这部分我们使用git托管起来,使用jenkins构建的时候也能自动拉取最新代码 流程 jenkins中先拉取代码 jenkins中调用脚本拿到war包,并且获取war包的版本 把脚本从本地发送到远端进行构建,如果是本地就更方便一点了! 远程机器获取到war版本,设置新镜像名称,根据传送过来的文件中的dockerfile进行构建 构建完成后推送至镜像仓库 代码部分 镜像的dockerfile FROM harbor.xxx.com/base/xxx-centos:7.6-2020120414 COPY dirs/ /usr/local/ COPY ROOT.war start.sh /opt/ CMD sh -x /opt/start.sh dockerfile中的启动命令 #!/bin/bash # # 提供了三个参数: # MEM用来设置内存大小,未设置为1G # SERVICE来设置war名,上下文,否则为ROOT # CLUSTER设置集群ip前缀,docker私有ip有多个,如果做web集群,需要指定能容器之间互通的段 mem=0 war=0 cluster=0 if [ ! -z "${MEM}" ];then if echo ${MEM} | grep "^[[:digit:]]*$" &> /dev/null;then if [ ${MEM} -gt 31 ];then MEM=31 fi mem=1 fi fi if [ ! -z "${SERVICE}" ];then if [ -z "$(echo ${SERVICE} | tr -d '0-9A-Za-z')" ];then if ! echo ${SERVICE} | egrep "^[0-9]|[0-9]$" &> /dev/null;then war=1 fi fi fi if [ ! -z "${CLUSTER}" ];then cluster=1 fi if [ ${cluster} -eq 1 ];then export JAVA_OPTS="-Dsucc.clusterBindAddressPrefix=${CLUSTER}" fi if [ ${mem} -eq 1 ];then sed -i "s/1g/${MEM}g/g" /usr/local/tomcat/bin/catalina.sh fi if [ ${war} -eq 1 ];then cp -a /usr/local/tomcat/ROOT /usr/local/tomcat/webapps/ cp -a /opt/ROOT.war /usr/local/tomcat/webapps/${SERVICE}.war else cp -a /opt/ROOT.war /usr/local/tomcat/webapps/ fi /usr/local/tomcat/bin/catalina.sh start tail -f /etc/getcode/code jenkins部分 this="镜像-4.19.3" release_root="/var/jenkins_home/jobs/bi-4.19.3/workspace/bi" src_FILE="${release_root}/com.succez.bi/dist/ROOT.war" dst_FILE="/var/jenkins_home/jobs/${this}/workspace/ROOT.war" if [ ! -f "${src_FILE}" ];then echo "war包不存在" exit 1 fi \cp -rfa ${src_FILE} ${dst_FILE} version=$(cat ${release_root}/com.succez.bi/src/main/java/META-INF/succ-product.json | grep "version" | awk '{print $2}' | tr -d "\",") echo ${version} > /var/jenkins_home/jobs/${this}/workspace/version 文件传输 文件传输到远程机器使用的jenkins的sftp传输插件,在后台配置server登录账号密码后,在前端设置本地路径和目的路径。 本地路径是以workspace为参照的相对目录,表示当前所有文件,如果下级目录下的所有文件需要两个 目的路径需要写绝对目录 Remove prefix,如果本地目录中的目录层级需要移除,那么写入 后续脚本 cd /usr/local/build/release-bi/ version=$(cat version) time=`date +%Y%m%d%H` echo ${time} echo ${version} image_name="succbi:${version}-${time}" image_prefix="harbor.xxx.com/succbi/" image_latest="harbor.xxx.com/succbi/succbi:latest" image_cn=${image_prefix}${image_name} docker build -t ${image_name} . if [ $? -ne 0 ];then echo "docker build failed" exit 1 fi docker tag ${image_name} ${image_cn} docker tag ${image_name} ${image_latest} docker push ${image_cn} docker push ${image_latest} docker镜像命名规范 suxxx-4.xx.3:latest suxxx-4.xx.3:2022060801 suxxx-4.xx.0:latest suxxx-4.xx.0:2022060801 suxxx-oem:latest suxxx-oem:2022060801
2022年05月27日
920 阅读
0 评论
0 点赞