我想使用带有纯HTML / CSS(实际上是SCSS)的GitLab存储库来部署静态页面。据我了解,静态页面至少需要.gitlab-ci.yml
和/public
文件夹。文件.gitlab-ci.yml
的最低要求如下:(an example from official doc)
pages:
stage: deploy
script:
- mkdir .public
- cp -r * .public
- mv .public public
artifacts:
paths:
- public
only:
- master
我的问题在script
行中。
(我假设下面的脚本将创建一个隐藏的文件夹名称.public并复制其中的所有文件,然后将其从.public移到公用文件夹。如果我输入错了,请纠正我。)
script:
- mkdir .public
- cp -r * .public
- mv .public public
对我来说,它类似于Linux的shell脚本。 GitLab doc中还确认它是由运行程序运行的。但是问题是,我怎么知道在GitLab中安装了多少个shell脚本?可以制造一个吗?
我想创建2个文件夹:src
和public
。 GitLab CI将运行脚本并从src
编译SCSS,然后将其移至public
。
我正在使用 gitlab.com 。
答案 0 :(得分:1)
没有“在Gitlab中安装了shell脚本”。 Gitlab支持多个shells,示例中的脚本部分只是纯bash命令。由于您很可能使用的是默认的dockerRunner,因此您可以从脚本部分执行bash命令,以仓库中的其他语言运行脚本,在docker容器上安装软件包,甚至准备和运行自己的docker映像。
答案 1 :(得分:1)
需要考虑的几件事。 gitlab中的每个作业都在容器中运行。通常,您指定要使用的那个。 Pages是一种特殊情况,因此您不必关心容器的图像。
pages
作业将填充您的公用文件夹。但是您可以更改gitlab-ci.yml
文件并添加步骤。
这将使用节点构建应用程序:
build_stuff:
stage: build
image: node:11
before_script:
- npm install
script:
- npm run build
artifacts:
paths:
- build
pages:
stage: deploy
script:
- mkdir .public
- cp -r build/ .public
- mv .public public
artifacts:
paths:
- public
only:
- master
格式已关闭
注意事项。第一步是运行构建步骤,以生成输出文件夹的所有资产。然后,它将存储在artifacts块中声明的所有内容(在本例中为build文件夹),并将其传递到下一个作业。相应地调整此步骤,以构建应用程序所需。
我在第二步中所做的唯一更改是,将构建文件夹的内容而不是整个存储库复制到.public文件夹中。还要根据您的需要进行调整。
对于shell脚本,除了带到存储库中的脚本外,没有其他脚本。默认运行程序支持Bash,因此您可以像在终端中一样执行bash命令。
如果您在仓库中创建文件foo.sh
并执行bash foo.sh
,它将执行脚本(如果它是可执行文件)。记住在推送之前对其进行修改。