问题描述
在使用Gitlab CI部署Node.js应用程序时,希望能够动态选择要部署的分支,而不必每次都更改gitlab-ci.yml文件。目前,当推送到分支XYZ时,对应的脚本会在’dev’环境上运行。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
在.gitlab-ci.yml文件中,不要直接硬编码分支名称,而是使用$CI_COMMIT_REF_NAME这个预设的环境变量。Gitlab CI提供了一系列预设的环境变量,可以用来获取有关当前作业的信息。
以下是一个示例的.gitlab-ci.yml文件:
stages:
- deploy
deploy_dev:
stage: deploy
script:
- deploy_script.sh $CI_COMMIT_REF_NAME
only:
- branches
在上面的示例中,我们定义了一个名为deploy_dev的作业,它属于deploy阶段。在script中,我们使用$CI_COMMIT_REF_NAME作为参数传递给部署脚本deploy_script.sh。这样,每次运行作业时,都会将当前分支的名称作为参数传递给脚本。
请注意,我们在only部分使用了branches关键字,这意味着该作业将在所有分支上运行。如果你只想在特定的分支上运行作业,可以使用only关键字来限制。
方案2
使用only和except选项可以更灵活地控制作业在哪些分支上运行。请参考Gitlab CI的文档了解更多信息。
另一种方法是使用only和except选项来控制作业在哪些分支上运行。这样可以更灵活地选择要部署的分支,而不必更改gitlab-ci.yml文件。
以下是一个示例的.gitlab-ci.yml文件:
stages:
- deploy
deploy_dev:
stage: deploy
script:
- deploy_script.sh
only:
- branches
except:
- master
在上面的示例中,我们定义了一个名为deploy_dev的作业,它属于deploy阶段。在script中,我们调用了部署脚本deploy_script.sh。我们使用only关键字指定该作业只在所有分支上运行,使用except关键字指定该作业不在master分支上运行。
这样,无论推送到哪个分支,作业都会运行,除了master分支。
请注意,only和except选项可以与其他条件一起使用,以更精确地控制作业的运行。你可以在Gitlab CI的文档中找到更多关于only和except选项的信息。