GitlabCI/CD无法从.gitlab-ci.ymlgitpush
我正在 .gitlab-ci.yml 中编写 GitLab CI/CD 管道脚本我想检查一个特定文件是否在另一个 repo 中更改,如果是,我想复制该文件,提交并推送到当前 repo。一切正常,直到我到达“git push”部分
我尝试了几种方法来修复它:
stages:
- build
build:
stage: build
script:
- echo "Building"
- git checkout -b try
- git remote add -f b https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.{otherRepo}.git
- git remote update
- CHANGED=$(git diff try:mobile_map.conf b/master:mobile_map.conf)
- if [ -n "${CHANGED}" ]; then
echo 'changed';
FILE=$(git show b/master:mobile_map.conf > mobile_map.conf);
git add mobile_map.conf;
git commit -m "updating conf file";
git push;
else
echo 'not changed';
fi
- git remote rm b
回答
作业令牌仅对您的存储库具有读取权限。
为每个作业生成一个唯一的作业令牌,并为用户提供读取访问权限,创建该作业的用户通常可以访问所有项目。唯一的工作令牌没有任何写入权限,但有增加支持的建议。
您不能使用部署令牌,因为它们不能对存储库(可能的令牌)进行写访问。您可以使用对存储库具有读写访问权限的项目访问令牌。
然后你可以使用你的项目访问令牌作为 url 中的环境变量。
git push "https://gitlab-ci-token:$PROJECT_ACCESS_TOKEN@$CI_SERVER_HOST/$CI_PROJECT_PATH.git"
至少这就是我们在管道中使用它的方式。我希望这能帮助你进一步。