gpt4 book ai didi

git - 让 TravisCI 提交并推送带有标签(发布)的修改后的文件

转载 作者:太空狗 更新时间:2023-10-29 13:30:28 25 4
gpt4 key购买 nike

今天早些时候,阿托斯爵士(非常感谢您)在一个单独的问题上帮助了我,这对我帮助很大。

我现在被困在一个点上,我想修改一个简单的文本文件并将其包含在我的推送中。所以基本上我想将修改后的文本文件添加到提交中,并将其作为提交推送,并将其内部版本号标记作为发布。希望我说得有道理。

到目前为止,我尝试执行此操作的代码是

#!/bin/bash
YEAR=$(date +"%Y")
MONTH=$(date +"%m")
git config --global user.email "${GIT_EMAIL}"
git config --global user.name "${GIT_NAME}"
git config --global push.default simple
export GIT_TAG=v2.$YEAR-$MONTH.$TRAVIS_BUILD_NUMBER
git fetch --tags
msg="Tag Generated from TravisCI for build $TRAVIS_BUILD_NUMBER"
echo "$msg" >> $TRAVIS_BUILD_DIR/build.txt
git add -A
if git tag $GIT_TAG -a -m "$msg" 2>/dev/null; then
git tag $GIT_TAG -a -m "Tag Generated from TravisCI for build $TRAVIS_BUILD_NUMBER"
git push https://${GH_TOKEN}@github.com/${TRAVIS_REPO_SLUG} HEAD:master && git push https://${GH_TOKEN}@github.com/${TRAVIS_REPO_SLUG} --tags HEAD:master
ls -aR
else echo Tag already exists!; fi

Athos 爵士早些时候给我的 if ... else ... 代码可以 100% 工作,如果标签存在,它会选择它,然后如果它不存在则推送或者不推送它确实存在。

我只是坚持现在让 Travis 包含简单的 build.txt 文件,我将 $TRAVIS_BUILD_DIR 添加到该文件中。

有趣的是,如果我像这样添加到我的 travis.yml 部署选项:

文件:
- 构建.txt

Travis 随版本一起推送 build.txt 文件,但未提交该文件。我知道我正在做并错过了一些非常愚蠢的事情,但放轻松,我是 Travis 的新手。

更新:

现在我已按如下方式修改了我的 bash 脚本,删除了在 if 语句中添加的额外标记。这现在可以工作并将修改后的 build.txt 文件推送到 repo。但是,一旦完成,Travis 就会使用 untagged-cc6ebe6dbcbb13bc599c 开始其他构建,现在它让 Travis 陷入循环,继续构建、构建和构建。我认为 Travis 会把我逼疯的,我知道我有些逻辑错误。

    #!/bin/bash
YEAR=$(date +"%Y")
MONTH=$(date +"%m")
git config --global user.email "${GIT_EMAIL}"
git config --global user.name "${GIT_NAME}"
git config --global push.default simple
export GIT_TAG=v2.$YEAR-$MONTH.$TRAVIS_BUILD_NUMBER
git fetch --tags
msg="Tag Generated from TravisCI for build $TRAVIS_BUILD_NUMBER"
if git tag $GIT_TAG -a -m "$msg" 2>/dev/null; then
echo "$msg" >> $TRAVIS_BUILD_DIR/build.txt
git add $TRAVIS_BUILD_DIR/build.txt
git commit -m "Update build version file with $TRAVIS_BUILD_NUMBER"
$TRAVIS_BUILD_NUMBER"
git push https://${GH_TOKEN}@github.com/${TRAVIS_REPO_SLUG} HEAD:master && git push https://${GH_TOKEN}@github.com/${TRAVIS_REPO_SLUG} --tags HEAD:master
ls -aR
else echo Tag already exists!; fi

我想我必须在早上用我的 travis.yml 重新审视这个,并在 before_deploy 之前做一些事情,然后使用 deploy 来做最后的推送。我想我已经弄明白为什么我要让 Travis 不停地循环了。今晚已将其禁用,这样 Travis 就不会整晚都精神错乱。

最佳答案

我终于弄清楚了我的逻辑错误,并会在这里解释它,希望这对将来的人有所帮助。非常感谢 Athos 爵士在所有这一切上引导我朝着正确的方向前进,非常感谢您的先生。

首先,我对一个文件进行了修改,并在 before_deploy 中进行了提交:travis.yml 的部分导致 TravisCI 旋转到一个连续的循环中,并且只创建了所有标记为 untagged-randomnumbers

我现在通过对脚本中的文件进行任何修改来解决这个问题:Travis.yml 的部分

因此,考虑到这只是一个测试容器,我有一个名为 changefile.sh 的脚本,如下所示:

#!/bin/bash
YEAR=$(date +"%Y")
MONTH=$(date +"%m")
git config --global user.email "${GIT_EMAIL}"
git config --global user.name "${GIT_NAME}"
git config --global push.default simple
export GIT_TAG=V2.$YEAR-$MONTH.$TRAVIS_BUILD_NUMBER
msg="Tag Generated from TravisCI for build $TRAVIS_BUILD_NUMBER"
echo "$msg" >> $TRAVIS_BUILD_DIR/build.txt
git add $TRAVIS_BUILD_DIR/build.txt
git commit -m "Update build version file with $TRAVIS_BUILD_NUMBER"

接下来我有一个名为 deploy.sh 的脚本,如下所示:

#!/bin/bash
YEAR=$(date +"%Y")
MONTH=$(date +"%m")
git config --global user.email "${GIT_EMAIL}"
git config --global user.name "${GIT_NAME}"
git config --global push.default simple
git remote add origin https://${GH_TOKEN}@github.com/${TRAVIS_REPO_SLUG}.git
export GIT_TAG=V2.$YEAR-$MONTH.$TRAVIS_BUILD_NUMBER
git fetch --tags
msg="Tag Generated from TravisCI for build $TRAVIS_BUILD_NUMBER"
if git tag $GIT_TAG -a -m "$msg" 2>/dev/null; then
git tag $GIT_TAG -a -m "Tag Generated from TravisCI for build $TRAVIS_BUILD_NUMBER"
git push origin master && git push origin master --tags
ls -aR
else echo Tag already exists!; fi

我的 travis.yml(简化版)现在看起来像这样:

language: php
sudo: required
dist: trusty
env:
global:
- secure: lotsofrandomnumbers
- GIT_NAME: Travis CI
- GIT_EMAIL: builds@travis-ci.org
- TRAVIS_REPO_SLUG: mygitusername/myreposlug
- GIT_BRANCH: master
matrix:
fast_finish: true
php:
- '5.6'
cache:
- apt
install:
# do some stuff here
script:
# do some more stuff here
- ./changefile.sh
before_deploy:
- ./deploy.sh
deploy:
provider: releases
api_key:
secure: ${GH_TOKEN}
file:
# add files to the release - specify them individually instead of a git add . or git add -A
- "test.txt"
skip_cleanup: true
on:
repo: mygitusername/myreposlug
tags: false
all_branches: true
notifications:
email: false

这现在实现了我想要的 100%,并且不会导致 TravisCI 陷入循环。

Travis 现在首先在我的 master 分支上进行构建,使用标签和修改后的文件推送发布,然后 TravisCI 将进行后续构建(显然是非常正常的 Travis 行为),在我的例子中,在 Travis 中标记为 V2。无论版本号如何,但与 master 上的构建涉及相同的提交号。

这样做是运行第二个构建测试,但实际上并没有推送任何标签、提交或更改,因此不再让 TravisCI 进入连续循环。您将看到第二个构建以消息“跳过发布提供程序的部署,因为这不是标记的提交”结束,而您的第一个构建将退出并显示一条消息“部署应用程序”

enter image description here

关于git - 让 TravisCI 提交并推送带有标签(发布)的修改后的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42253765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com