2017-02-15 64 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

只需在批量添加時小心,您最終可能會在提交中出現驚喜文件... –