我的项目中有以下.travis.yml
文件,该文件配置为始终构建并仅在由与特定版本字符串匹配的GitHub标记触发构建时才部署:
language: java
sudo: false
cache:
directories:
- "$HOME/.cache"
jobs:
include:
- stage: build
os: linux
jdk: oraclejdk8
- stage: build
os: linux
jdk: openjdk8
- stage: build
os: linux
jdk: oraclejdk11
- stage: build
os: linux
jdk: openjdk11
- stage: deploy
os: linux
jdk: openjdk8
stages:
- build
- name: deploy
if: tag =~ ^[0-9]+\.[0-9]+\.[0-9]+
install:
- gpg --version
- mvn process-resources -B -V -e
script:
- mvn test -B -V -e
deploy:
- provider: script
script:
- openssl aes-256-cbc ... -in .travis.gpg.enc -out .travis.gpg -d
- openssl aes-256-cbc ... -in .travis.settings.xml.enc -out .travis.settings.xml -d
- gpg --import .travis.gpg
- cp .travis.settings.xml $HOME/.m2/settings.xml
- mvn clean deploy -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -P sign -B -V -e
skip_cleanup: true
- provider: releases
api_key:
secure: CKKEi9hoN...xbzZByUU80Q=
file_glob: true
file:
- $HOME/.m2/repository/path/to/project-*.pom
- $HOME/.m2/repository/path/to/porject-*.pom.asc
当我推动分支机构时,此方法运行良好:Travis CI构建已运行并表示正在跳过部署阶段,因为未满足条件。但是,当我将此分支合并到master中时,Travis CI build遇到master问题(正确)并调用了部署阶段(错误),尝试部署到Maven / GitHub(由于我认为是不相关的错误而失败)。
奇怪的是,它并不是启动了部署job
(不是;它只是启动了构建job
)。它将部署阶段添加到前四个(构建)job
(表示stage: build
的)中。这显示在下面的屏幕快照中,您可以看到它运行了四个构建作业,并且都失败了(特别是,它们都在部署阶段都失败了,但是它们不应该尝试进行部署;只有部署作业应该这样做)部署)。
因此,有两个问题:
部署错误:
$ rvm $(travis_internal_ruby) --fuzzy do ruby -S gem install dpl
Successfully installed dpl-1.10.6
Parsing documentation for dpl-1.10.6
Installing ri documentation for dpl-1.10.6
Done installing documentation for dpl after 0 seconds
1 gem installed
dpl.1
Installing deploy dependencies
Successfully installed dpl-script-1.10.6
Parsing documentation for dpl-script-1.10.6
Installing ri documentation for dpl-script-1.10.6
Done installing documentation for dpl-script after 0 seconds
1 gem installed
/home/travis/.rvm/gems/ruby-2.4.1/gems/dpl-1.10.6/lib/dpl/cli.rb:54:in `system': wrong first argument (ArgumentError)
from /home/travis/.rvm/gems/ruby-2.4.1/gems/dpl-1.10.6/lib/dpl/cli.rb:54:in `shell'
from /home/travis/.rvm/gems/ruby-2.4.1/gems/dpl-script-1.10.6/lib/dpl/provider/script.rb:19:in `push_app'
from /home/travis/.rvm/gems/ruby-2.4.1/gems/dpl-1.10.6/lib/dpl/provider.rb:199:in `block in deploy'
from /home/travis/.rvm/gems/ruby-2.4.1/gems/dpl-1.10.6/lib/dpl/cli.rb:41:in `fold'
from /home/travis/.rvm/gems/ruby-2.4.1/gems/dpl-1.10.6/lib/dpl/provider.rb:199:in `deploy'
from /home/travis/.rvm/gems/ruby-2.4.1/gems/dpl-1.10.6/lib/dpl/cli.rb:32:in `run'
from /home/travis/.rvm/gems/ruby-2.4.1/gems/dpl-1.10.6/lib/dpl/cli.rb:7:in `run'
from /home/travis/.rvm/gems/ruby-2.4.1/gems/dpl-1.10.6/bin/dpl:5:in `<top (required)>'
from /home/travis/.rvm/gems/ruby-2.4.1/bin/dpl:23:in `load'
from /home/travis/.rvm/gems/ruby-2.4.1/bin/dpl:23:in `<main>'
答案 0 :(得分:2)
所以,我找到了两个问题的答案。
首先,奇怪的错误是由于以下原因造成的:
deploy:
- provider: script
script:
- do something
- do something else
- do another thing
Travis CI构建中的常规script
指令接受一个序列,但是script
部署提供程序中的script
指令是不同的,并且仅接受单个字符串,该字符串作为单个命令。您甚至不能传递多行字符串。仍然不起作用。我向Travis提交了this bug的相关信息,在此问题解决之前,使用before_deploy
(如下)找到了解决该问题的临时解决方法。
第二,如果您使用顶级deploy
指令,则部署将在构建阶段而不是其自己的阶段中运行。文档尚不清楚,但这很容易解决。
最后,您只能加密单个文件,不能加密多个文件,因此,如果您有多个秘密文件,则必须使用Tar存档并将其加密。
解决所有问题后,这是Travis的工作版本:
language: java
sudo: false
cache:
directories:
- "$HOME/.cache"
jobs:
include:
- stage: build
os: linux
dist: trusty
jdk: oraclejdk8
- stage: build
os: linux
dist: trusty
jdk: openjdk8
- stage: build
os: linux
dist: xenial
jdk: oraclejdk11
- stage: build
os: linux
dist: xenial
jdk: openjdk11
- stage: deploy
os: linux
dist: xenial
jdk: openjdk8
before_deploy:
- openssl aes-256-cbc -in .travis.secrets.tar.enc -out .travis.secrets.tar -d
- tar -xvf .travis.secrets.tar
- rm .travis.secrets.tar
- gpg --import travis.gpg
- rm travis.gpg
- mv settings.xml $HOME/.m2/settings.xml
deploy:
- provider: script
script: "mvn clean deploy -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -P sign -B -V -e"
on:
tags: true
skip_cleanup: true
- provider: releases
api_key:
secure: CKKEi9hoN...xbzZByUU80Q=
file_glob: true
file:
- $HOME/.m2/repository/io/path/to/project-*.pom
- $HOME/.m2/repository/io/path/to/project-*.pom.asc
on:
tags: true
stages:
- build
- name: deploy
if: tag =~ ^[0-9]+\.[0-9]+(\.[0-9]+)?(-[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?$
install:
- gpg --version
- mvn process-resources -B -V -e
script:
- mvn test -B -V -e