gpt4 book ai didi

java - Travis CI 构建在 master 上运行部署阶段,即使不满足标记条件

转载 作者:行者123 更新时间:2023-11-30 01:56:37 26 4
gpt4 key购买 nike

我的项目中有以下 .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 构建针对 master 运行(正确)并调用部署阶段(不正确),尝试部署到 Maven/GitHub(由于我认为是不相关的错误而失败)。

奇怪的是,它并没有启动部署作业(它没有启动;它只启动了构建作业)。它将部署阶段添加到前四个(构建)job(即 stage: build)中。这如下面的屏幕截图所示,您可以看到它运行了四个构建作业,并且它们都失败了(具体来说,它们在部署阶段都失败了,但它们不应该尝试部署;只有部署作业才应该部署)。

Failed Travis CI build

那么,有两个问题:

  1. 我在这里做错了什么,导致它尝试从 master 部署,即使它不是标签?
  2. 知道以下错误是什么(幸运的是)导致部署失败,以及我需要做什么来修复它?

部署错误:

$ 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>'

最佳答案

所以,我已经找到了这两个问题的答案。

首先,奇怪的错误是由于以下原因造成的:

deploy:
- provider: script
script:
- do something
- do something else
- do another thing

Travis CI 构建中的正常 script 指令接受序列,但 script 部署提供程序中的 script 指令不同,仅接受单个字符串,它作为单个命令调用。您甚至无法传入多行字符串。还是不行。我提交了this bug与 Travis 讨论了这个问题,在解决该问题之前,使用 before_deploy (如下)找到了该问题的临时解决方法。

其次,如果您使用顶级 deploy 指令,则部署将作为构建阶段的一部分运行,而不是作为其自己的阶段运行。文档对此并不清楚,但这是一个简单的修复。

最后,您只能加密单个文件,而不能加密多个文件,因此,如果您有多个 secret 文件,则必须使用 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

关于java - Travis CI 构建在 master 上运行部署阶段,即使不满足标记条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54274355/

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