让TravisCI使用Tags(发布)提交和推送修改后的文件

Mit*_*llK 4 git bash release-management git-commit travis-ci

今天早些时候,阿瑟斯爵士(非常感谢你)在一个独立的问题上给了我很大的帮助.

我现在卡在了一个我想要修改一个简单文本文件并将其包含在我的推送中的位置.所以基本上我想将修改后的文本文件添加到提交中,并将其作为提交推送,并将其构建号标记作为发布.希望我在这里有意义.

到目前为止,我的代码尝试做到这一点

#!/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
Run Code Online (Sandbox Code Playgroud)

如果标签存在,那么阿道斯爵士早先给我的if ... else ...代码100%,如果标签存在,那么它就会捡起来,如果它不存在或者不推动它,它就会存在.

我只是坚持现在让Travis包含简单的build.txt文件,我回复$ TRAVIS_BUILD_DIR并附加一个.

有趣的是,如果我添加到我的travis.yml部署选项,如下所示:

file: - build.txt

Travis使用该版本推送build.txt文件,但未提交该文件.我知道我在做什么并且在这里错过了一些非常愚蠢的东西但是很容易我是特拉维斯的新手.

更新:

现在我按如下方式修改了我的bash脚本,删除了在if语句中添加额外标记.这现在可以工作并将修改后的build.txt文件推送到repo.但是一旦完成Travis然后开始其他构建,untagged-cc6ebe6dbcbb13bc599c现在它将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
Run Code Online (Sandbox Code Playgroud)

我想我必须在早上使用我的travis.yml重新审视这个问题,然后继续使用before_deploy,然后使用deploy来进行最后的推送.想想我已经弄清楚为什么我让Travis不停地循环.今晚已经禁用了它,所以Travis不会整夜精神错乱.

Mit*_*llK 7

我终于找到了我的逻辑错误,并将在此解释,希望这将有助于将来的某些人.非常感谢阿索斯爵士带领我朝着正确的方向发展所有这一切,非常感谢谢谢你.

首先,我正在对travis.yml的before_deploy:部分中的文件和提交进行修改,这导致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"
Run Code Online (Sandbox Code Playgroud)

接下来我有一个名为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
Run Code Online (Sandbox Code Playgroud)

而我的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
Run Code Online (Sandbox Code Playgroud)

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

Travis现在首先在我的主分支上构建,用标签和修改后的文件推出发布,然后TravisCI将进行后续构建(显然非常正常的Travis行为),在我的案例中用Travis标记的V2.whatever版本号,但与在master上构建的提交编号完全相同.

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

在此输入图像描述