我正在使用gitlab-ci。我目前在gitlab-ci.yml文件中有两个阶段,一个阶段用于构建,一个阶段用于部署。作业正在成功运行。
gitlab-ci.yml
stages:
- build
- deploy
d_build:
stage: build
tags:
- my-runner
script:
- echo "Build"
- sh testScript.sh
d_review:
stage: deploy
environment:
name: staging
url: (INSERT URL HERE)
tags:
- my-runner
script:
- echo "Foo"
Gitlab Runner Vesion :11.7.0
操作系统:Windows / amd64
testScript.sh Shell文件正在部署阶段生成一个我想在环境中的url字段中使用的url。
从gitlab的操作窗格的环境页面中,我希望能够为我选择“打开实时环境”选项,以可视化.sh文件生成的url。如何实现?
我想到了两种可能的方法,但是我不确定如何实现这两种方法。是否可以从“ testScript.sh”在构建阶段设置一个环境变量,以便随后在部署阶段进行提取?
或者,如果“ testScript.sh”文件是要创建一个包含url的文本文件,那么我如何指示部署阶段从文本文件中读取并使用其内容来定义一个变量,然后使用该变量在网址字段中?
作为测试,我尝试在构建阶段在变量中设置变量:
stages:
- build
- deploy
d_build:
stage: build
tags:
- my-runner
script:
- echo "Build"
- sh testScript.sh
variables:
url_endpoint: "myendpoint"
按如下所示修改网址:
d_review:
stage: deploy
environment:
name: staging
url: https://localhost:1234&endpoint=$url_endpoint
tags:
- my-runner
script:
- echo "Foo"
但是,这不起作用,最终的URL中有一个空格,而不是“ myendpoint”,这告诉我在变量如何传播方面我也缺少一些东西。将不胜感激。
答案 0 :(得分:1)
在运行作业时,必须设置URL。您不能在部署之前在作业中设置环境网址:
url参数可以使用任何已定义的CI变量,包括预定义的, 安全变量和.gitlab-ci.yml变量。但是,您不能使用变量 在脚本下定义。
https://docs.gitlab.com/ee/ci/yaml/README.html#environmenturl
您可以使用javascript重定向作为解决方法:
d_build:
stage: build
tags:
- my-runner
script:
- echo "Build"
- UUID=$(sh testScript.sh)
- echo '<html><head><script type="text/javascript">window.location.replace("https://localhost:5939/mywebpage/index.html?id='$UUID'");</script></head></html>' > redirect.html
d_review:
stage: deploy
environment:
name: staging
url: https://localhost:5939/mywebpage/redirect.html
tags:
- my-runner
script:
- echo "Foo"
这将创建一个redirect.html
,它使用testScript.sh
创建的参数重定向到您的本地主机URL。如果由于字符转义而导致redirect.html
的创建失败,请尝试将以echo
开头的行放入sh脚本。
答案 1 :(得分:0)
GitLab中的变量不会在作业之间传递。仍然有更多人要求这样做:
https://gitlab.com/gitlab-org/gitlab-ce/issues/47517
我自己尚未在GitLab中使用环境,但是从此链接来看,它看起来像环境:url在您可以使用的功能方面非常有限:
https://docs.gitlab.com/ce/ci/yaml/#environmenturl
应该可以使用API手动触发构建作业中的新管道:
https://docs.gitlab.com/ee/ci/triggers/#triggering-a-pipeline
它们具有某些功能,如果您是付费客户,这些功能将变得更容易,但是我认为无论如何都应该可以实现您想要的。您可以在d_build作业中使用类似的内容:
curl -X POST \
-H "Content-Type: application/json" \
-d '{"token":"token", "ref":"my-branch", "variables": {"url_endpoint": "myendpoint"}}' \
https://gitlab.com/api/v4/projects/:iid/trigger/pipeline
您将必须获得访问令牌:
https://docs.gitlab.com/ce/user/profile/personal_access_tokens.html
您可以使用变量或受保护的变量将其发送到GitLab脚本:
https://docs.gitlab.com/ce/ci/variables/#variables
您的gitlab-ci文件将如下所示:
stages:
- build
- deploy
d_build:
stage: build
tags:
- my-runner
script:
- echo "Build"
- sh testScript.sh
- [curl script here]
except:
variables:
- $url_endpoint
d_review:
stage: deploy
environment:
name: staging
url: $url_endpoint
tags:
- my-runner
script:
- echo "Foo"
only:
variables:
- $url_endpoint
应该使用“ only”和“ except”关键字,以便在按下时仅运行构建作业,并且仅在设置此变量时才运行d_review,该变量仅在触发该作业时才存在。 / p>
我还没有测试过,但是我希望它能为您提供一些帮助。我真的希望有一个更简单的解决方案!