如何手动触发 Gitlab CI 管道,在正常情况下,它是由具有提交 ID 的 webhook 触发的?
How to trigger Gitlab CI pipeline manually, when in normal conditions, it is triggered by webhook with commit Ids?
我有 Gitlab CI 管道,它由具有当前和最后一次提交 ID 的 bitbucket webhook 触发。每当由 webhook 触发的构建创建的 Gitlab CI 文件未按预期工作时,我还想手动重新 运行 管道。
我尝试了 运行-PIPELINE 选项但显示错误:
表单包含以下错误:
此管道没有 stages/jobs。
这是 GitLab CI 文件。包含是指保留管道标准 yaml 文件的其他项目:
include:
- project: Path/to/project
ref: bb-deployment
file: /bitbucket-deployment.yaml
variables:
TILLER_NAMESPACE: <namespace>
NAMESPACE: testenv
REPO_REF: testenvbranch
LastCommitSHA: <commit sha from webhook>
CurrentCommitSHA: <Current commit she from webhook>
这里是详细的 gitlab-ci 文件,在其他有阶段的项目中提供:
stages:
- pipeline
- build
variables:
ORG: test
APP_NAME: $CI_PROJECT_NAME
before_script:
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
- eval $(ssh-agent -s)
- echo "$SSH_PRIIVATE_KEY2" | tr -d '\r' | ssh-add -
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts
Building CI Script:
stage: pipeline
image: python:3.6
only:
refs:
- master
script:
- |
curl https://github.com/org/scripts/branch/install.sh | bash -s latest
source /usr/local/bin/pipeline-variables.sh
git clone git@bitbucket.org:$ORG/$APP_NAME.git
cd $APP_NAME
git checkout $lastCommit
cp -r env old
git checkout $bitbucketCommit
$CMD_DIFF old env
$CMD_BUILD
$CMD_INSTALL updatedReposList.yaml deletedReposList.yaml /tmp/test $NAMESPACE $REPO_REF $ORG $APP_NAME $lastCommit $bitbucketCommit
cat cicd.yaml
mv cicd.yaml ..
artifacts:
paths:
- cicd.yaml
Deplopying Apps:
stage: build
only:
refs:
- master
trigger:
include:
artifact: cicd.yaml
job: Building CI Script
strategy: depend
在手动触发器中,应该重建应用程序,而不是考虑她的最后一次和当前提交。
如有任何帮助,我们将不胜感激ci。
感谢您的评论(下方),我看到您在 .gitlab-ci.yml
中使用 include
指令 (https://docs.gitlab.com/ce/ci/yaml/#include) 来包含 GitLab CI YAML来自另一个项目的文件。
我可以通过在项目 1 上调用 "run pipeline" 来复制此错误(此管道没有阶段/作业),该项目配置为包含项目 2 中的 GitLab CI YAML,当项目 2 GitLab CI YAML 仅限于 master
分支,但我 运行 在 另一个 分支上的项目。
例如,假设项目 1 名为 "Whosebug-test",其 .gitlab-ci.yml
为:
include:
- project: atsaloli/test
file: /.gitlab-ci.yml
ref: mybranch
并且项目 2 被称为 "test"(在我自己的命名空间中,atsaloli
)并且它的 .gitlab-ci.yml
是:
my_job:
script: echo hello world
image: alpine
only:
refs:
- master
如果我 select "Run Pipeline" 在项目 1 中的 GitLab UI 中除 "master" 以外的分支上,我会收到错误消息 "No stages / jobs for this pipeline" .
那是因为我的非 master 分支没有定义工作,然后没有定义任何工作,我也没有定义任何阶段。
我希望这能对您的 webhook 的情况有所了解。
我有 Gitlab CI 管道,它由具有当前和最后一次提交 ID 的 bitbucket webhook 触发。每当由 webhook 触发的构建创建的 Gitlab CI 文件未按预期工作时,我还想手动重新 运行 管道。 我尝试了 运行-PIPELINE 选项但显示错误:
表单包含以下错误:
此管道没有 stages/jobs。
这是 GitLab CI 文件。包含是指保留管道标准 yaml 文件的其他项目:
include:
- project: Path/to/project
ref: bb-deployment
file: /bitbucket-deployment.yaml
variables:
TILLER_NAMESPACE: <namespace>
NAMESPACE: testenv
REPO_REF: testenvbranch
LastCommitSHA: <commit sha from webhook>
CurrentCommitSHA: <Current commit she from webhook>
这里是详细的 gitlab-ci 文件,在其他有阶段的项目中提供:
stages:
- pipeline
- build
variables:
ORG: test
APP_NAME: $CI_PROJECT_NAME
before_script:
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
- eval $(ssh-agent -s)
- echo "$SSH_PRIIVATE_KEY2" | tr -d '\r' | ssh-add -
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts
Building CI Script:
stage: pipeline
image: python:3.6
only:
refs:
- master
script:
- |
curl https://github.com/org/scripts/branch/install.sh | bash -s latest
source /usr/local/bin/pipeline-variables.sh
git clone git@bitbucket.org:$ORG/$APP_NAME.git
cd $APP_NAME
git checkout $lastCommit
cp -r env old
git checkout $bitbucketCommit
$CMD_DIFF old env
$CMD_BUILD
$CMD_INSTALL updatedReposList.yaml deletedReposList.yaml /tmp/test $NAMESPACE $REPO_REF $ORG $APP_NAME $lastCommit $bitbucketCommit
cat cicd.yaml
mv cicd.yaml ..
artifacts:
paths:
- cicd.yaml
Deplopying Apps:
stage: build
only:
refs:
- master
trigger:
include:
artifact: cicd.yaml
job: Building CI Script
strategy: depend
在手动触发器中,应该重建应用程序,而不是考虑她的最后一次和当前提交。
如有任何帮助,我们将不胜感激ci。
感谢您的评论(下方),我看到您在 .gitlab-ci.yml
中使用 include
指令 (https://docs.gitlab.com/ce/ci/yaml/#include) 来包含 GitLab CI YAML来自另一个项目的文件。
我可以通过在项目 1 上调用 "run pipeline" 来复制此错误(此管道没有阶段/作业),该项目配置为包含项目 2 中的 GitLab CI YAML,当项目 2 GitLab CI YAML 仅限于 master
分支,但我 运行 在 另一个 分支上的项目。
例如,假设项目 1 名为 "Whosebug-test",其 .gitlab-ci.yml
为:
include:
- project: atsaloli/test
file: /.gitlab-ci.yml
ref: mybranch
并且项目 2 被称为 "test"(在我自己的命名空间中,atsaloli
)并且它的 .gitlab-ci.yml
是:
my_job:
script: echo hello world
image: alpine
only:
refs:
- master
如果我 select "Run Pipeline" 在项目 1 中的 GitLab UI 中除 "master" 以外的分支上,我会收到错误消息 "No stages / jobs for this pipeline" .
那是因为我的非 master 分支没有定义工作,然后没有定义任何工作,我也没有定义任何阶段。
我希望这能对您的 webhook 的情况有所了解。