我有一个项目,它在遵循特定约定的文件夹中生成 go main 文件。问题是,当有代码推送时,我需要在 Gitlab CI 管道中并行构建这些项目,并且我无法对它们进行硬编码,.gitlab-ci.yml因为它们是动态生成的。我需要并行构建这些 go 项目,并且如果所有单个项目构建都成功,则需要通过构建阶段。有人可以告诉我在 Gitlab 中是否可行吗?
我在将 docker 映像推送到我的私有 GCP 注册表时遇到问题。我从 Google Cloud Platform 创建了一个具有所有者角色的新服务帐户。然后,我创建了一个服务密钥,并将 json 文件的内容(从服务帐户下载)复制到 Gitlab CI/CD 变量的 $GCP_SERVICE_KEY 变量中。
这是我的.gitlab-ci.yaml文件:
image: python:3.6
stages:
- push
before_script:
- mkdir -p $HOME/.docker
- echo "$GCP_SERVICE_KEY" >> "$HOME/.docker/config.json"
dockerpush:
stage: push
image: docker:stable
services:
- docker:dind
script:
- docker build --build-arg MONGODB_URI=$MONGODB_URI -t my_image_name .
- docker login -u _json_key --password-stdin https://gcr.io < $HOME/.docker/config.json
- docker tag my_image_name eu.gcr.io/my_project_id/my_image_name
- docker push eu.gcr.io/my_project_id/my_image_name
Run Code Online (Sandbox Code Playgroud)
当我检查控制台日志时,我看到“登录成功”。但我无法推送到我的 GCP 注册表。我检查了项目 ID、用户的角色,一切似乎都正常。但为什么我仍然看到“未经授权”的错误?
$ docker login -u _json_key -p "$GCP_SERVICE_KEY" …Run Code Online (Sandbox Code Playgroud) continuous-integration push docker google-cloud-platform gitlab-ci
我正在数字海洋服务器上使用 gitlab runner 运行我的 Rails 测试。我将捆绑器缓存保存在数字海洋空间中
另外,当测试用例失败时,我还使用 capybara-screenshot 来制作页面的屏幕截图。当测试失败时,屏幕截图将被保存到./tmp/capybara/
然后,在测试运行结束后,构建服务器将被删除,屏幕截图也会丢失,这使得测试失败的调查变得更加困难。
有没有办法./tmp/capybara/使用 gitlab 运行程序用来检索/上传缓存的密钥和秘密将文件夹的内容上传到数字海洋空间?
我想在我的 docker 镜像中运行sentry-cli,如下所示:
sentry-frontend:
stage: sentry
services:
- docker:18-dind
before_script:
- docker login -u gitlab-ci-token -p "$CI_JOB_TOKEN" registry.xxx.xx
script:
- export SENTRY_AUTH_TOKEN=xxxxxxxxxxxxxxxxxx
- export IMAGE=$CI_REGISTRY_IMAGE/frontend-builder:$CI_COMMIT_REF_NAME
- export RELEASE_VERSION=$CI_COMMIT_REF_NAME
- docker pull getsentry/sentry-cli
- docker run --rm -v $(pwd):/work getsentry/sentry-cli releases -o org -p frontend new $RELEASE_VERSION
tags:
- dindRun Code Online (Sandbox Code Playgroud)
然而工作失败了,因为
error: API request failed
caused by: sentry reported an error: Authentication credentials were not provided. (http status: 401)
我试过:
- docker run --rm -v $(pwd):/work getsentry/sentry-cli --auth-token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
但是之后我收到了与跑步时相同的消息
docker …
在我的 gitlab ci 管道中,我想在为主分支运行管道的任何地方推送一个标签。但问题是我无法将标签推送到存储库上。
我正在尝试使用 GITLAB_TOKEN 推送 git 标签
image:
name: X
entrypoint: [""]
stages:
- deploy
deploy:
stage: deploy
script:
# Generating new tag version using stk utility
- git config --global user.email $USER_MAIL
- git config --global user.name $USER_NAME
- git config --global http.postBuffer 52428800
- git remote set-url origin https://$USER_NAME:$GITLAB_TOKEN@${CI_PROJECT_URL:8}
- export NEW_TAG_VERSION=<generating new git tag>
- echo $NEW_TAG_VERSION
- if [ $CI_COMMIT_REF_NAME == "master" ]; then \
- git tag -a v$NEW_TAG_VERSION -m "[skip ci] new …Run Code Online (Sandbox Code Playgroud) 我正在使用 Gitlab CI 运行程序来执行 Ansible playbook,但在将 Gitlab 中定义的变量推送到 Ansible 中时遇到问题。我知道我可以用来lookup('env','var')获取变量,但这似乎在 yml 库存文件中不起作用。例如:
# List everything in vCenter
- ansible-inventory --list -i vSphere/vxrail.vmware.yml
Run Code Online (Sandbox Code Playgroud)
vxrail.vmware.yml
plugin: vmware_vm_inventory
strict: False
hostname: XXX.XXX.XXX.XXX
username: administrator@vsphere.local
# This isn't working
password: lookup('env','vCenterAdminPass')
validate_certs: False
with_tags: True
Run Code Online (Sandbox Code Playgroud)
如何获取传入的变量?
好吧,我在我的 Digital Ocean VPS 中创建了一个私人跑步者。这个私人跑步者正在使用shell executor,这是我的 gitlab-ci.yml 文件:
variables:
VERSION_NAME: ${CI_COMMIT_REF_NAME}-${CI_CONCURRENT_ID}
before_script:
- docker info
stages:
- test
- build
- deploy
- delivery
test_project:
tags:
- safepark
stage: test
image: mcr.microsoft.com/dotnet/core/sdk:2.1
script:
- dotnet test
build_image:
tags:
- safepark
only:
- master
stage: build
script:
- docker build -f WebApi/Dockerfile -t myuser/myimage
- docker tag -t myuser/myimage myuser/myimage:${VERSION_NAME}
push_image:
tags:
- safepark
only:
- master
stage: deploy
script:
- docker push myuser/myimage
- docker push myuser/myimage:${VERSION_NAME}
Run Code Online (Sandbox Code Playgroud)
但在“测试”阶段,图像永远不会被拉出,我得到“dotnet …
我想获取 gitlab 环境变量并在 build.gradle 脚本中使用它。我在gitlab-ci中定义了变量:
build:
stage: build
variables:
TEST: "HELLO WORLD"
script:
- export
Run Code Online (Sandbox Code Playgroud)
另外,我使用 -export 命令来打印所有变量。我在 gitlab 作业控制台中看到了我的 TEST 变量。但是当我试图在 build.gradle 中获取这个变量时,它是空的。这是build.gradle代码片段:
if (System.getenv('TEST') != null) {
repositories {
println 'CI=' + System.getenv('CI')
println 'M- ' + System.getenv('MAVEN_REPO_USER')
println 'T- ' + System.getenv('TEST')
println 'CI_JOB_STAGE ' + System.getenv('CI_JOB_STAGE')
mavenCentral()
}
} else {
repositories {
println '*CI= ' + System.getenv('CI')
println '*MAven ' + System.getenv('MAVEN_REPO_USER')
println '* ' + System.getenv('CI_JOB_STAGE')
println 'T-+++ ' + System.getenv('TEST')
mavenCentral()
mavenLocal()
} …Run Code Online (Sandbox Code Playgroud) 我的管道有 3 个阶段,所有 3 个阶段中的每个作业都创建一个 xml 数据文件。这些作业并行运行。
我想在第四阶段合并所有 xml 数据文件。下面是我的yml代码
stages:
- deploy
- test
- execute
- artifact
script:
- XYZ
artifacts:
name: datafile.xml
paths:
- data/
Run Code Online (Sandbox Code Playgroud)
问题:我如何收集以前作业中的所有 xml 来合并它?文件名是唯一的。
我面临以下问题:
我正在尝试配置 GitLab CI pipline(shell)。
我的存储库包含两个子模块。
这两个子模块与包含它们的超级存储库位于同一台 GitLab 服务器上。
该克隆是 SSH 克隆,我已在本地配置了密钥,并将密钥添加到了 GitLab。
在安装运行程序的计算机上,我可以毫无问题地克隆所有内容,包括子模块。
但是,当运行程序尝试克隆时,它会返回“主机密钥验证失败”,但仅限于子模块。
我尝试使用其自己的用户和我的用户配置跑步者:
sudo gitlab-runner install --user=<user>
Run Code Online (Sandbox Code Playgroud)
没有效果。
最让我困惑的是,错误仅针对子模块,即使它们与包含它们的超级存储库位于同一服务器上,并且超级存储库可以毫无问题地克隆(当我关闭子模块递归变量时) yml 文件):
GIT_SUBMODULE_STRATEGY: recursive
Run Code Online (Sandbox Code Playgroud)
但当然我没有子模块。
如果您有任何有关检查或尝试内容的建议,我将不胜感激!