我无法找到如何在gitlab-ci.yml-file 提供的构建脚本中访问变量.
我试图以两种方式声明变量:
config.toml我尝试在我的gitlab-ci.yml-files命令中访问它们:
msbuild ci.msbuild [...] /p:Configuration=Release;NuGetOutputDir="$PACKAGE_SOURCE"
Run Code Online (Sandbox Code Playgroud)
在哪里$PACKAGE_SOURCE是所需的变量(PACKAGE_SOURCE)但它不起作用(它似乎没有被替换).手动执行相同的命令就像预期的那样(用其内容替换变量名)
是否还需要一些我不知道的其他语法?
我试过了:
$PACKAGE_SOURCE
$(PACKAGE_SOURCE)
${PACKAGE_SOURCE}
Run Code Online (Sandbox Code Playgroud)
PS:如果重要的话,验证跑步者不会引起任何问题.
我在Gitlab CI上构建android并且每次下载依赖项都很烦人.我试过缓存:
$HOME/.gradle/
$HOME/.gradle/caches/
$GRADLE_HOME/caches/
$HOME/.m2/
.gradle/
build/
app/build/
Run Code Online (Sandbox Code Playgroud)
我的.gitlab-ci.yml的第26594次迭代就在这里.我已经在我的构建环境中安装了gradle,因为没有缓存gradlew每次下载它,这需要更多的时间.我用于建筑的图像就在这里.我的CI服务器启动脚本可以在这里找到.我假设,如果缓存有效,我将看不到每个构建下载的依赖项列表.
构建日志:
gitlab-ci-multi-runner 0.7.2(998cf5d)使用Docker执行器和图像android ...拉码头图像gitlab/gitlab-runner:build ...拉码头图像android:最新...警告:不能拉最新版本的图像android:最新:错误:图像库/ android:最新未找到警告:将使用本地找到的图像.
Running on runner-76acd9d3-project-74192-concurrent-0 via ff9200d4be41...
Fetching changes...
Removing .gradle/
Removing artifacts.upload.log
Removing rxfirebaseandroid/build/
HEAD is now at 7f151df djgfj
Checking out 7f151df2 as ci-gitlab...
HEAD is now at 7f151df... djgfj
Restoring cache...
$ gradle testDebug
Download https://jcenter.bintray.com/com/android/tools/build/gradle/1.3.0/gradle-1.3.0.pom
Download https://jcenter.bintray.com/com/android/tools/build/gradle-core/1.3.0/gradle-core-1.3.0.pom
Download https://jcenter.bintray.com/com/android/tools/build/builder/1.3.0/builder-1.3.0.pom
Download https://jcenter.bintray.com/com/android/tools/lint/lint/24.3.0/lint-24.3.0.pom
Download https://jcenter.bintray.com/net/sf/proguard/proguard-gradle/5.2.1/proguard-gradle-5.2.1.pom
Download https://jcenter.bintray.com/net/sf/proguard/proguard-parent/5.2.1/proguard-parent-5.2.1.pom
Download https://jcenter.bintray.com/com/android/tools/build/builder-model/1.3.0/builder-model-1.3.0.pom
Download https://jcenter.bintray.com/com/android/tools/build/builder-test-api/1.3.0/builder-test-api-1.3.0.pom
Download https://jcenter.bintray.com/com/android/tools/sdklib/24.3.0/sdklib-24.3.0.pom
Download https://jcenter.bintray.com/com/android/tools/sdk-common/24.3.0/sdk-common-24.3.0.pom
Download https://jcenter.bintray.com/com/android/tools/common/24.3.0/common-24.3.0.pom
Download …Run Code Online (Sandbox Code Playgroud) 我们最近开始在gitlab.com免费服务上使用GitLab-CI .起初一切都很好,但现在,似乎我们不能再建立我们的项目了.构建显示为pending并且不执行任何操作.
这是我们的构建列表中的内容:
如果我们检查构建的详细信息:
您可能会注意到,在列表中,每个构建都分配给一个运行者ID,但在详细信息页面中,runner部分为空.
起初,我们认为这只是由基础gitlab.com设施引起的延迟,但它真的只是停留在那里......
编辑
这是超过1年前,但我一直有关于这个问题的通知.如果我没记错的话,问题是由于GitLab本身.遵循GitLab文档并确保您的设置有效,并希望最好!
是否可以将gitlab ci作业标记为手动启动?
我需要它来部署应用程序,但我想决定它是否将被部署
continuous-deployment continuous-delivery gitlab gitlab-ci gitlab-ci-runner
我有一个像这样的GitLab CI构建脚本:
create release:
stage: deploy
tags:
- basic
only:
- tags
script:
- GITLOG=$(echo "# Changes Log"; git log `git tag | tail -2 | head -1`..${CI_BUILD_TAG} --pretty=format:" - %s")
- curl -X POST -d "private_token=$CI_BUILD_TOKEN&description=$GITLOG" "http://git.example.com/api/v3/projects/${CI_PROJECT_ID}/repository/tags/${CI_BUILD_TAG}/release"
Run Code Online (Sandbox Code Playgroud)
此步骤的目的是在GitLab发行版部分中自动从Git添加更改日志.
如果我在命令行上手动运行它并输入变量,那么这是有效的...
问题是CI_BUILD_TOKEN构建运行器中的值不是有效的GitLab专用令牌 - 它只是连接到Docker注册表的令牌 - 根据文档.
有没有办法获得一个有效的GitLab API令牌,构建运行器可以使用它来访问它正在运行构建的项目的API?似乎这应该是可能的.
GitLab Runner:
gitlab-runner -v
Version: 1.2.0
Git revision: 3a4fcd4
Git branch: HEAD
GO version: go1.6.2
Built: Sun, 22 May 2016 20:05:30 +0000
OS/Arch: linux/amd64
Run Code Online (Sandbox Code Playgroud) 假设我在中定义了这些阶段.gitlab-ci.yml:
stages:
- build
- analysis
- tests
- deploy
- post-deploy
Run Code Online (Sandbox Code Playgroud)
由于analysis需要花费很多时间并且我并不真正关心结果(我也已经allow_failure: true设置) - 是否可以以某种方式定义开始analysis然后立即启动下一阶段tests?
我在官方文档上没有找到任何类似主题的参考。
编辑:
主要思想是所有其他阶段都可以运行,就好像它们analysis根本不存在一样。如果我将 和 置于analysis同一阶段tests,那么 和analysis都会tests同时运行,但是deploy直到它们都完成后才会启动。这可不行。我想tests完成然后启动deploy,deploy完成后我想启动post-deploy。我真的不关心analysis结果,我只是想触发它并继续部署。
我启动了一个docker容器gitlab-ci-runner,然后使用docker作为执行器注册了一个runner,使用node:latest作为docker镜像。但是当我向 gitlab 推送提交时?我收到了这个错误:
Running with gitlab-runner 11.3.1 (0aa5179e)
on docker-ci 0f9fe2c4
Using Docker executor with image node:latest ...
ERROR: Preparation failed: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? (executor_docker.go:1150:0s)
Run Code Online (Sandbox Code Playgroud)
这是我的 gitlab config.toml:
concurrent = 1
check_interval = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "docker-ci"
url = "http://gitlab.xxxxxx.com/"
token = "0......fc5"
executor = "docker"
[runners.docker]
tls_verify = false
image = "node:latest"
privileged = false
disable_cache = false
volumes = ["/cache"]
shm_size = 0 …Run Code Online (Sandbox Code Playgroud) 我懂了
/bin/sh: eval: line 98: bash: not found
Run Code Online (Sandbox Code Playgroud)
通过执行 gitlabb .yml 文件来发送消息。
我在前面的脚本部分添加了这一行
- apk update && apk add openssh
Run Code Online (Sandbox Code Playgroud)
这没有帮助。
before_script:
- apk update && apk add openssh
- bash docker_install.sh > /dev/null
stages:
- build
- deploy
- loadtest-local
build:
stage: build
script:
- echo "building my application in ubuntu container..."
deploy:
stage: deploy
image: php:7.4
script:
- phpunit Unittest.php
loadtest-local:
image:
name: loadimpact/k6:latest
entrypoint: [""]
stage: loadtest-local
script:
- k6 run ./loadtests/performance-test.js
- k6 run ./loadtests/inttest.js
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
我想我从根本上错过了一些东西.我是CI/CD的新手,并试图用gitlab设置我的第一个管道.
该项目是一个预先存在的PHP项目.
我还不想清理它,此刻我已经将整个东西推入了一个docker容器中,它正好与google cloud的mysql数据库等交谈,因为它应该在本地以及远程google云测试VM .我们的梦想是能够推动开发分支,然后将dev banch合并到测试分支中,然后TRIGGERS自动化测试(简单部分),并且还导致远程测试VM(托管在谷歌云上),推出最新更改,从最新的docker文件重建图像(或从gitlab图像寄存器中提取最新图像)...然后使用最新图像重建容器.
我正在玩gitlab的跑步者,但我不了解它的实际情况,尽管几乎查看了所有的在线内容.我只是将它安装在谷歌云虚拟机中,然后当我从我的开发机器推送到gitlab时...回购将"发出信号"跑步者(在VM上运行,执行一堆脚本(可能包括git拉最新的变化?).
因为我已经将我的应用程序预先打包到本地容器中(并将图像推送到图像注册表)我是否需要使用docker作为我在跑步者身上的执行者?或者我可以使用shell和shell命令吗?
我错过了什么?
TLDR和额外:
问题:
什么是跑步者实际上,它意味着安装在哪里?
是否关心它运行在哪个目录中?
如果它不关心它运行的目录,它在哪里执行它的脚本命令?在根?
如果我在本地构建自己的图像并将其上传到gitlab的注册表,
我需要将执行者设置为docker吗?我不应该只是将它设置为shell,拉动图像,并构建它?(假设跑步者在远程VM上运行).
即使我的所有步骤都成功通过,Gitlab CI 显示了这一点 - “清理基于文件的变量 00:01 错误:作业失败:退出代码 1”
并最终失败了。同样有趣的是,这只发生在我的主分支上。它在其他分支上成功运行。有没有人遇到过这个问题并找到了解决方案?
- >
for dir in $(git log -m -1 --name-only -r --pretty="format:" "$CI_COMMIT_SHA"); do
if [[ -f "$dir" ]]; then
SERVICE=$(echo "$dir")
# helm install the service
fi
done
- echo "deployed"
Run Code Online (Sandbox Code Playgroud)