Ale*_*der 6 heroku gitlab gitlab-ci
我正在尝试为我的项目启用 Review Apps,并为分支自动部署到 Heroku。每个部署都应具有以下地址:
https://prefix-<branch-name>.herokuapp.com
Run Code Online (Sandbox Code Playgroud)
Heroku 要求应用程序名称不超过 30 个字符,所以我的工作应该缩短分支名称,如果它太长。
我试图以一种常见的 Unix 方式来做到这一点,如下所示:
variables:
REVIEW_APP_NAME: "prefix-${CI_COMMIT_REF_SLUG:0:23}"
Run Code Online (Sandbox Code Playgroud)
但它解决了“前缀-”。
我还找到了以下解决方案,它允许我在脚本部分使用缩短的分支名称。但它仍然不能用于环境 url 参数。这导致应用程序被部署到 Heroku,但 GitLab 根本没有跟踪(环境列表中没有部署,也没有删除分支的操作)。
variables:
REVIEW_APP_NAME: "prefix-$${CI_COMMIT_REF_SLUG:0:23}"
before_script:
- eval export REVIEW_APP_NAME=${REVIEW_APP_NAME}
Run Code Online (Sandbox Code Playgroud)
还有其他方法可以实现正确的行为吗?
小智 6
为此,我们使用一个简单的 bash 脚本:
#!/bin/bash
set -e
out=${1:0:40}
if [[ $out =~ ^.*-$ ]]; then
out=${out:0:-1}
fi
echo $out
Run Code Online (Sandbox Code Playgroud)
if 语句检查字符串是否不以破折号结尾。
然后我们在 CI 中使用我们的脚本,如下所示:
[...]
script:
- export CI_COMMIT_REF_NAME=$(./infrastructure/utils/shorten_branchname.sh $CI_COMMIT_REF_NAME)
[...]
Run Code Online (Sandbox Code Playgroud)
对于使用docker或alpine 的镜像,您需要先安装 bash:
[...]
before_script:
- apk add --update bash
[...]
Run Code Online (Sandbox Code Playgroud)
为了避免因生成太长的分支名称而导致的问题,CI_COMMIT_REF_SLUG您可以在 GitLab CI/CD 环境中使用该CI_ENVIRONMENT_SLUG变量,该变量是从创建的CI_COMMIT_REF_SLUG但被截断为 24 个字符:https ://docs.gitlab.com/ee/ci/变量/predefined_variables.html。
对于 URL,您可以使用
$CI_COMMIT_REF_SLUG,但由于该值可能包含 a/或其他在域名或 URL 中无效的字符,$CI_ENVIRONMENT_SLUG因此请使用 。该$CI_ENVIRONMENT_SLUG变量保证是唯一的。
https://docs.gitlab.com/ee/ci/environments/#create-a-dynamic-environment
另一种选择是使用您选择的脚本在先前(或中间)作业中准备名称,并使用环境变量继承将环境变量传递到另一个作业: https: //docs.gitlab.com/ee/ci/variables/index。 html#将环境变量传递给另一个作业
| 归档时间: |
|
| 查看次数: |
1776 次 |
| 最近记录: |