ci配置踩坑记

warning: 这篇文章距离上次修改已过701天,其中的内容可能已经有所变动。

脚本如下:

version = `git describe --abbrev=0`
other_version_split = '-'
time = `date "+%Y%m%d%H%M%S"`

# 当存在-时,说明并非正式版,在版本最后加入时间戳
if [[$version == *$other_version_split*]]
then 
version=`${version}.${time}`

# 设定所有需要被发布的包
packages = ('ZeroSum', 'ZeroSum.Application', 'ZeroSum.Cors', 'ZeroSum.Domain', 'ZeroSum.Infrastructure', 'ZeroSum.Mapper', 'ZeroSum.Swagger')

# 开始发布
for package in ${packages[@]}
do 
package_name = $package$version
echo package_name
done 
1

报错信息:

[2021-12-15 16:23:02] + git describe --abbrev=0
[2021-12-15 16:23:02] + version = 1.0.0-alpha
[2021-12-15 16:23:02] /root/workspace@tmp/durable-e7aa8857/script.sh: 1: version: not found
script returned exit code 127

分析

报错信息很简短,能看出来第一二行其实已经执行了第一行脚本了。最后出来一个未找到version这个变量的提示,紧接着返回了127的返回值

突然想起来,shell里关于变量的定义貌似是不能在=左右加空格???!!!

删掉空格,再来一次

果然可以了!

不过出现新的问题了

新的问题:11: Syntax error: "("

错误信息:

[2021-12-15 16:42:07] + git describe --abbrev=0
[2021-12-15 16:42:07] + version=1.0.0-alpha
[2021-12-15 16:42:07] + other_version_split=-
[2021-12-15 16:42:07] + date +%Y%m%d%H%M%S
[2021-12-15 16:42:07] + time=20211215084207
[2021-12-15 16:42:07] /root/workspace@tmp/durable-6a4abdd7/script.sh: 11: Syntax error: "(" unexpected (expecting "fi")
script returned exit code 2

字面意义第一眼是语法错误,第十一行。

脚本:

version=`git describe --abbrev=0`
other_version_split='-'
time=`date "+%Y%m%d%H%M%S"`

# 当存在-时,说明并非正式版,在版本最后加入时间戳
if [[$version == *$other_version_split*]]
then 
version=`${version}.${time}`

# 设定所有需要被发布的包
packages=('ZeroSum', 'ZeroSum.Application', 'ZeroSum.Cors', 'ZeroSum.Domain', 'ZeroSum.Infrastructure', 'ZeroSum.Mapper', 'ZeroSum.Swagger')

# 开始发布
for package in ${packages[@]}
do 
package_name=$package$version
echo package_name
done 

第十一行这里是数组的定义,来看一下是不是数组语法写错了。

果不其然,shell中关于数组的定义是:

()包裹,用空格进行分离

这里我用了 ,!!!

修改完后运行,还是一样的错误!?

再次仔细看了一遍脚本,语法上并没有问题。询问万能的度娘后发现有人也遇到这个问题了,据说是因为默认的解释器导致的:

debian/ubuntu上sh命令默认是指向dash,而不是bash
Debian Almquist shell,缩写为dash,一种 Unix shell,相容于POSIX标准。 它比 Bash 小,只需要较少的磁盘空间,但是它的对话性功能也较少。 它由 NetBSD版本的Almquist shell (ash)发展而来, 于1997年,由赫伯特·许(Herbert Xu)移植到Linux上,于2002年改名为 dash。
————————————————
版权声明:本文为CSDN博主「win-victor」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43887596/article/details/99293505

脚本第一行加入以下代码,强制指定解释器:

#!/bin/bash

这里过了。

又双叒叕出现问题了!? 果然我太菜了

新问题: line 20: syntax error: unexpected end of file

错误详情:

[2021-12-15 16:54:22] /root/workspace@tmp/durable-b802c188/script.sh: line 20: syntax error: unexpected end of file
script returned exit code 2

脚本:

#!/bin/bash
version=`git describe --abbrev=0`
other_version_split='-'
time=`date "+%Y%m%d%H%M%S"`

# 当存在-时,说明并非正式版,在版本最后加入时间戳
if [[$version == *$other_version_split*]]
then 
version=`${version}.${time}`

# 设定所有需要被发布的包
packages=('ZeroSum' 'ZeroSum.Application' 'ZeroSum.Cors' 'ZeroSum.Domain' 'ZeroSum.Infrastructure' 'ZeroSum.Mapper' 'ZeroSum.Swagger')

# 开始发布
for package in ${packages[@]}
do 
package_name=$package$version
echo package_name
done 

这!!!20行都是空的啊,这脚本大概有点不对劲。

不管三七二十一,先删了空行试试。还是一样的问题,从度娘上发现是因为换行的问题,常出现在win系统中,可是。。。我是在web里编辑的啊??

显而易见,当然是行不通的

那尝试另一个方向:语法错误!

那么语法出现错误,就只剩下循环了,先把之前偷懒没有改的地方修复一下:

echo本来是要输出变量的,但是忘了打$,后来想着反正是测试的, 就没有管。

还是一样的问题,有点抓瞎了。

峰回路转

早上清醒了一下,重新看了下shell的流程语句。发现if的结尾是fi,这时候回头看一下第二次报的错,其实已经提示我们了:

[2021-12-15 16:42:07] + git describe --abbrev=0
[2021-12-15 16:42:07] + version=1.0.0-alpha
[2021-12-15 16:42:07] + other_version_split=-
[2021-12-15 16:42:07] + date +%Y%m%d%H%M%S
[2021-12-15 16:42:07] + time=20211215084207
[2021-12-15 16:42:07] /root/workspace@tmp/durable-6a4abdd7/script.sh: 11: Syntax error: "(" unexpected (expecting "fi")
script returned exit code 2

但是因为数组定义也有问题,因此干扰了判断(大实话就是没认真看信息:-1:)

最终脚本

#!/bin/bash
version=`git describe --abbrev=0`
other_version_split='-'
time=`date "+%Y%m%d%H%M%S"`

# 当存在-时,说明并非正式版,在版本最后加入时间戳
if [[$version == *$other_version_split*]] 
then 
    version=`${version}.${time}`
fi

# 设定所有需要被发布的包
packages=('ZeroSum' 'ZeroSum.Application' 'ZeroSum.Cors' 'ZeroSum.Domain' 'ZeroSum.Infrastructure' 'ZeroSum.Mapper' 'ZeroSum.Swagger')

# 开始发布
for package in ${packages[@]}
do 
    package_name=`${package}.${version}`
    echo $package_name
done 
none
最后修改于:2022年12月20日 22:50

评论已关闭