2017-02-15 58 views
4

今天早些时候,我在一个单独的问题上得到了阿索斯爵士(非常感谢)的帮助,这个问题对我非常有帮助。让TravisCI提交并推送带有标签的修改文件

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

我的代码做尝试做这至今是

#!/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先生早先给我的代码工作100%它拿起如果标签存在然后要么推动,如果它不存在或不推动它确实存在。

我只是停留在现在得到特拉维斯包括简单的build.txt文件,我回声$ TRAVIS_BUILD_DIR与附加。

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

file: - build.txt

特拉维斯推动与释放build.txt文件,但不能提交该文件。我知道我在做,并且错过了一些非常愚蠢的事情,但很容易我对Travis很陌生。

更新:

现在我已经修改了我的bash脚本如下,去掉if语句中添加额外的标签。这现在可以工作,并将修改后的build.txt文件推送到回购站。但是一旦完成了特拉维斯,然后开始与untagged-cc6ebe6dbcbb13bc599c其他生成,现在它正在把特拉维斯扔进一个循环,只是继续构建和构建。我认为特拉维斯会让我发疯,但我知道我有一些逻辑错误。

#!/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工作,然后使用部署做最后冲刺阶段。想想我已经知道为什么我会让Travis不停地循环。今天晚上禁用了它,所以特拉维斯整夜都没有精神。前推

回答

4

我终于想通了我的逻辑错误,并将在这里解释它,希望这将有助于未来的人。非常感谢Athos先生带领我在所有这些方面朝着正确的方向发展,谢谢你的主席先生。

首先,我正在对travis的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" 

下一个我曾经如下一个名为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: [email protected] 
    - 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现在首先在我的主分支上构建一个版本,并将标签和修改后的文件推送出去,然后TravisCI会做后续的构建(显然非常正常的Travis行为) 。无论版本号是多少,但涉及到与在主机上构建相同的提交编号。

这是做什么是运行第二个构建测试,但不实际推送任何标签,提交或更改,因此不再让TravisCI进入连续循环。你会看到第二内建端有消息“跳过与发布商部署,因为这不是一个标记提交”,而你的第一个版本将有一条消息说“部署应用程序”

enter image description here

退出
+0

在我的回购中添加了我对@Sir Athos的确认 - https://github.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker – MitchellK

3

你加入在git的文件,但没有提交它:

msg="Tag... 
echo "$msg" >> $TRAVIS_BUILD_DIR/build.txt 
git add $TRAVIS_BUILD_DIR/build.txt 
git commit -m "Update build version file" 
if git tag ... 

如果你有多个子构建运行该脚本,你应该提交if git tag里面,所以你不有多个结束(unpushed)款:

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" 
    git push ... 
else ... 

(另请注意,您在if内运行git标签两次,一次是在if语句,然后再次,就没有必要重新标记时, if条件也同时标记)。

+0

和瞧它的作品! ....我正在尝试'git add -A'然后提交,但是它保持失败。现在,您的代码完美地将修改后的文件与发行标签一起推送。我告诉过你我正在做一些愚蠢的事情。如果我要在项目中修改多个文件,使用新版本的项目,我必须使用'git add $ TRAVIS_BUILD_DIR/build.txt'和'git add $ TRAVIS_BUILD_DIR/README.md'等多行添加每个文件。或者是否有一个全包的git add会做到这一点? – MitchellK

+2

你可以'git add $ DIR'或'.'(当前目录和所有子目录)。 – meatspace

+1

只需在批量添加时小心,您最终可能会在提交中出现惊喜文件... –