小编Dav*_* W.的帖子

maven deploy:deploy-file失败(409 Conflict),但工件上传成功

注意:

我现在意识到jar被放入我的存储库,但是pom.xml没有.现在,我有另一个项目,其中pom.xml无法升级,但jar被放置在存储库中.

但是,另一个项目,pom.xml和jar都放在存储库中.


我在Jenkins有一个项目,我使用促销插件通过deploy:deploy-file目标在Maven中部署我的工件.

这适用于我在Maven中的其他几个项目,但是这个项目失败了.有趣的是,无论如何文件(但不是pom.xml)上传.我已经通过从Maven存储库中删除工件,然后运行促销来验证这一点.促销后,工件位于我们的存储库中.

这是我得到的日志.尽我所能打破额外的长队:

[workspace] $ /bin/bash -xe /opt/tomcat/apache-tomcat-7.0.27/temp/hudson7357923598740079329.sh
+ FILE_LOC=/mnt/jenkins/builds/metricsdb-trunk/21/archive/target/archive
+ mvn deploy:deploy-file
    -Dversion=0.8.0
    -Dfile=/mnt/jenkins/builds/metricsdb-trunk/21/archive/target/archive/metricsdb-etl.jar
    -DpomFile=/mnt/jenkins/builds/metricsdb-trunk/21/archive/target/archive/pom.xml
    -Durl=http://repo.vegicorp.com/artifactory/ext-release-local -DrepositoryId=VegiCorp
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Command Line Spring Batch Module 0.8.0.CI-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-deploy-plugin:2.7:deploy-file (default-cli) @ metricsdb-etl ---
Uploading: http://repo.vegicorp.com/artifactory/ext-release-local/com/vegicorp/batch/metricsdb/metricsdb-etl/0.8.0/metricsdb-etl-0.8.0.jar
2/38 KB   
4/38 KB   
[...]

Uploaded: http://repo.vegicorp.com/artifactory/ext-release-local/com/vegicorp/batch/metricsdb/metricsdb-etl/0.8.0/metricsdb-etl-0.8.0.jar (38 KB at 202.2 KB/sec)
Uploading: http://repo.vegicorp.com/artifactory/ext-release-local/com/vegicorp/batch/metricsdb/metricsdb-etl/0.8.0/metricsdb-etl-0.8.0.pom
2/7 KB     
4/7 KB   
[...]

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.243s …
Run Code Online (Sandbox Code Playgroud)

deployment maven

37
推荐指数
3
解决办法
6万
查看次数

Maven:尝试使用settings.xml文件中的凭据进行部署

这似乎在上周工作,现在它没有.

  • 我们使用Artifactory作为我们的Maven存储库.
  • 我正在使用deploy:deploy-file目标部署jar和pom
  • 我们的Artifactory存储库需要部署身份验证.

我可以通过在命令行上将我的凭据嵌入服务器URL来部署到存储库:

 $ mvn deploy:deploy-file \
     -Durl=http://deployer:swordfish@repo.veggiecorp.com/artifactory/ext-release-local \
     -Dfile=crypto.jar \
     -DpomFile=pom.xml \
     -Did=VeggieCorp
  yadda...yadda...yadda...
  [INFO] ------------------------------------------------------------------------
  [INFO] BUILD SUCCESS
  [INFO] ------------------------------------------------------------------------
  [INFO] Total time: 0.962s
  [INFO] Finished at: Mon Aug 20 10:06:04 CDT 2012
  [INFO] Final Memory: 4M/118M
  [INFO] ------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

但是,整个部署会被记录,我的凭据将在日志中显示.因此,我希望能够在命令行上没有我的凭据进行部署.为此,我有一个$HOME/.m2/settings.xml文件:

<settings>
    <proxies>
        <proxy>
            <active>true</active>
            <protocol>http</protocol>
            <host>proxy.veggiecorp.com</host>
            <port>3128</port>
            <nonProxyHosts>*.veggiecorp.com</nonProxyHosts>
        </proxy>
    </proxies>
    <servers>
        <server>
            <id>VeggieCorp</id>
            <username>deployer</username>
            <password>swordfish</password>
        </server>
    </servers>
    <profiles>
        <profile>
            <id>VeggieCorp</id>
            <activation>
                 <activeByDefault>true</activeByDefault>
            </activation>
            <repositories>
                <repository>
                    <id>VeggieCorp</id>
                    <name>VeggieCorp's Maven Repository</name>
                    <releases>
                        <enabled>true</enabled>
                        <updatePolicy>always</updatePolicy> …
Run Code Online (Sandbox Code Playgroud)

deployment settings artifactory maven

35
推荐指数
2
解决办法
5万
查看次数

Jenkins Pipeline访问环境变量

我正在尝试在Jenkins中使用DSL管道.我认为如果我可以将项目名称作为我脚本的一部分,那就太好了.

git credentialsId: 'ffffffff-ffff-ffff-ffff-ffffffffffffff',\
url: "${repo_root}/${JOB_NAME}.git"
Run Code Online (Sandbox Code Playgroud)

我收到错误:

groovy.lang.MissingPropertyException: \
No such property: JOB_NAME for class: groovy.lang.Binding
Run Code Online (Sandbox Code Playgroud)

我以为我遵循了这些指示,他们提到JOB_NAME了变量之一.

我决定尝试:

sh 'env'
Run Code Online (Sandbox Code Playgroud)

在我的DSL中,打印出来:

JOB_NAME = foo-bar
Run Code Online (Sandbox Code Playgroud)

这是我所期待的.

一篇博客提到:

使用环境变量
我们有两种方法来获取它们的价值.-D=在启动期间传递的属性我们可以阅读,System.getProperty("key")这要归功于Groovy与Java的强大关系.

用Java方式读取常规环境变量是System.getenv("VARIABLE")......

我们试试这个:

println "JOB_NAME = " + System.getenv('JOB_NAME'); 
Run Code Online (Sandbox Code Playgroud)

现在,我得到:

java.lang.NullPointerException: Cannot get property 'System' on null object
Run Code Online (Sandbox Code Playgroud)

空物体?但是,我可以看到这JOB_NAME是一个环境变量!

如何$JOB_NAME在Pipeline作业中读入DSL脚本.我正在尝试一个管道工作,当我得到它的工作将使这个多分支管道与Jenkinsfile.

jenkins jenkins-workflow jenkins-pipeline

29
推荐指数
3
解决办法
7万
查看次数

Perl打破了If语句

刚出现这个问题:我如何突破if声明?我有一个很长的if语句,但有一种情况我可以在早期就突破它.

在循环中,我可以这样做:

while (something ) {
    last if $some_condition;
    blah, blah, blah
    ...
}
Run Code Online (Sandbox Code Playgroud)

但是,我可以使用if语句执行相同的操作吗?

if ( some_condition ) {
    blah, blah, blah
    last if $some_other_condition; # No need to continue...
    blah, blah, blah
    ...
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以将if语句放在一个块中,然后我可以突破块:

{
    if ( some_condition ) {
        ...
        last if $some_other_condition; # No need to continue...
        blah, blah, blah
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

或者,我可以创建一个子程序(可能以编程方式更好):

if ( some_condition ) {
    run_subroutine();
}

sub run_subroutine {
    blah, blah, blah
    return if $some_other_condition;
    blah, …
Run Code Online (Sandbox Code Playgroud)

perl if-statement break flow-control

27
推荐指数
1
解决办法
4万
查看次数

Ant <import>与<include>任务

我现在看到Ant既有<include>任务也有<import>任务.

根据描述:

包括

将另一个构建文件包含到当前项目中.

进口

将另一个构建文件导入当前项目.

那么,为什么要使用一个呢?

这是我的实际问题:

在我们当前的构建系统中,我们连接了一堆JavaScripts,然后将它们最小化.JavaScripts位于十几个不同的目录中,我们从每个目录中获取批处理,并将它们连接成五个或六个超级最小化的JavaScripts.其中一些文件被复制到多个超级JavaScripts中.

为了使调试更容易,并且构建更灵活,我想将所有文件复制到target/work/resources2目录中,其中每个子目录代表不同的超级最小化JavaScript.出于调试目的,我们将包括非最小化的超级JavaScript和原始版本.构建脚本并不复杂,但整个部分占用了很多行.我想把这些<copy>东西放到一个单独的XML文件中,所以整个事情看起来像这样:

<target name="process-resources"
     description="Concatenate and minimize the JavaScripts (using Maven lifecycle names for our targets">
     <!-- The following include the copying stuff -->
     <here.be.dragons file="${basedir}/reservations.xml"/>
     <here.be.dragons file="${basedir}/date.xml"/>
     <here.be.dragons file="${basedir}/select.xml"/>

     <for param="concat.dir">
         <fileset dir="${work.dir]/resources2"/>
         <sequential>
            <here.I.am.concatenating.and.minimizing/>
         </sequential>
    </for>
</target>
Run Code Online (Sandbox Code Playgroud)

我看到有四种可能性:

  • 使用<ant/>调用该做复印的文件
  • 使用<import/>(可能无效,因为它可能无法包含在目标中)
  • 使用<include/>(可能无效,因为它可能无法包含在目标中)
  • 使用实体包含.

我从不为使用而疯狂,<ant/>或者<antcall>虽然这可能是一个很好的时机.实体包含的想法是可行的,但这是大多数人不理解的东西,我担心它会给那些必须支持我正在做的事情的人造成混乱.该<import><include>可能无法在这种情况下使用,但我还是好奇的区别是什么.

ant import include

25
推荐指数
1
解决办法
1万
查看次数

Jenkins Pipeline Builds:在UI中查看工作区

我们现在正在尝试多分支管道构建.该功能的主要优点是,它允许我们在创建新分支时自动创建新的Jenkins作业.

但是,实现起来比使用UI选择如何进行构建的旧方法要困难一些.此外,某些功能似乎缺失.

例如,在Jenkins Freestyle作业中,我们可以使用Jenkins UI浏览工作区,下载单个文件,甚至清除工作区.当构建出错或者开发人员需要一个未归档的特定构建资产时,我们发现这很有用.

我注意到在Jenkins Pipeline作业中,UI不再提供对工作区的访问.我知道我可以归档工作区,但我真的不想保存它 - 特别是对于每个构建.我只是希望能够浏览工作区或清除它,如果某些东西导致构建过程出现问题.

有没有办法通过管道取回这个功能?我不想为每个构建存档工作区(空间问题),但我确实希望能够在出现问题时查看工作区的外观.

带有*Workspace*UI的自由式作业

使用Workspace UI的自由式工作


管道工作. 无法浏览Workspace

管道工作.无法浏览Workspace

jenkins jenkins-pipeline

22
推荐指数
1
解决办法
8717
查看次数

Jenkins CI使用错误的svn修订版进行构建

目前我正在使用Jenkins CI Server,我想通过svn post commit hook触发一个job/build.到目前为止,它按预期工作,但构建使用以前的svn修订版.

例如:我签入我的文件,客户端显示版本90,构建开始,但它使用89.

post-commit钩子看起来像这样:

UUID=`svnlook uuid $REPOS`
/usr/bin/wget \
     --header "Content-Type:text/plain;charset=UTF-8" \
     --post-data "`svnlook changed --revision $REV $REPOS`" \
     --output-document "-" \
     --timeout=2 \
     http://ci-jenkins/job/Job1/build?rev=$REV 1>&2
Run Code Online (Sandbox Code Playgroud)

Jenkins中的签出策略配置为"始终签出新副本".怎么了?我仍然从那开始,并有很多东西需要学习.所以请记住这一点来回答我.:-)

svn hook continuous-integration jenkins

18
推荐指数
2
解决办法
8752
查看次数

mod_auth_ldap和mod_authnz_ldap之间的区别

我们使用LDAP来使用Apache httpd进行Subversion访问.我们最初使用以下所有用户都可以访问所有Subversion存储库:

<Location /src>
    DAV svn
    SVNParentPath /opt/svn_repos
    AuthType basic
    AuthName "SVN Repository"
    AuthBasicProvider ldap
    AuthzLDAPAuthoritative off
    AuthLDAPURL "ldap://ldap.mycorp.com:3268/dc=mycorp,dc=com?sAMAccountName" NONE
    AuthLDAPBindDN "CN=svn_acct,OU=Users,DC=mycorp,DC=com"
    AuthLDAPBindPassword "swordfish"
    Require valid-user
</Location>
Run Code Online (Sandbox Code Playgroud)

一切都很好.我被要求将CM存储库移动到其他位置,并使其仅供CM组中的人员访问.我做了以下事情:

<Location /cm>
    DAV svn
    SVNPath /opt/cm_svn_repos
    AuthType basic
    AuthName "CM Repository"
    AuthBasicProvider ldap
    AuthzLDAPAuthoritative off
    AuthLDAPURL "ldap://ldap.mycorp.com:3268/dc=mycorp,dc=com?sAMAccountName" NONE
    AuthLDAPBindDN "CN=svn_acct,OU=Users,DC=mycorp,DC=com"
    AuthLDAPBindPassword "swordfish"
    Require group CN=cm-group,OU=Groups,DC=mycorp,DC=com
</Location>
Run Code Online (Sandbox Code Playgroud)

我花了几个小时才意识到我在使用mod_auth nz _ldap而不是普通的'mod_auth_ldap'.因此,我需要ldap-group而不是group在我的Require陈述中.那很有效.

我的同事告诉我,有一个原因我们使用mod_auth nz _ldap而不是mod_auth_ldap,但他不记得为什么.我们查找了Apache httpd文档,但是文档没有提供任何线索,为什么你要使用另一个.

那么,mod_auth_ldap和mod_auth nz _ldap 之间的区别是什么,为什么你要使用另一个呢?

svn ldap apache2

17
推荐指数
1
解决办法
1万
查看次数

试图让Maven部署到Artifactory Server

我正在尝试将项目部署到我们的Artifactory存储库.用户qazwart是管理员,具有部署到服务器的权限.我在该settings.xml文件下的ID <central><snapshots>ID 下有该用户的正确信息.我<distributionManagement>pom.xml文件的部分中有正确的URL .看起来一切都设置正确.然而,当我尝试部署时,我收到Return code is: 405, ReasonPhrase: Method Not Allowed. -> [Help 1]错误.

我应该寻找或尝试什么?

输出mvn deploy(我在[ERORR]章节中添加了换行符以使其更具可读性):

$ mvn deploy
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] ....
[INFO] ------------------------------------------------------------------------
[INFO] Building Project Aggregate POM 2.5.2
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ rez ---
[INFO] Installing /home/qazwart/project/workspace/pom.xml to \
/home/tomcat/.m2/repository/com/vegicorp/proj/2.5.2/proj-2.5.2.pom
[INFO] 
[INFO] --- maven-deploy-plugin:2.7:deploy (default-deploy) @ …
Run Code Online (Sandbox Code Playgroud)

deployment artifactory maven

16
推荐指数
2
解决办法
2万
查看次数

在Perl中使用常量

我试图使用constantpragma 在Perl中定义常量:

use constant {
    FOO => "bar",
    BAR => "foo"
};
Run Code Online (Sandbox Code Playgroud)

我遇到了一些麻烦,并希望有一种标准的处理方式.

首先...

我正在为Subversion定义一个钩子脚本.为了简单起见,我希望有一个文件,我正在使用的类(包)与我的实际脚本在同一个文件中.

这个包中的大部分都会包含常量:

 print "This is my program";

 package MyClass;

 use constant {
    FOO => "bar"
 };

 sub new { ... }
Run Code Online (Sandbox Code Playgroud)

我希望我的常规FOO可以访问我的主程序.我想这样做而不必将其称为MyClass::FOO.通常,当包是一个单独的文件时,我可以在我的主程序中执行此操作:

use MyClass qw(FOO);
Run Code Online (Sandbox Code Playgroud)

但是,由于我的课程和程序是单个文件,我不能这样做.对于我的主程序来说,能够访问我班级中定义的常量的最佳方法是什么?

第二个问题......

我想使用常量值作为哈希键:

$myHash{FOO} = "bar";
Run Code Online (Sandbox Code Playgroud)

问题是%myHash将文字字符串FOO作为键而不是常量的值.当我做这样的事情时,这会导致问题:

if (defined $myHash{FOO}) {
   print "Key " . FOO . " does exist!\n";
}
Run Code Online (Sandbox Code Playgroud)

我可以强制上下文:

if (defined $myHash{"" . FOO . ""}) {
Run Code Online (Sandbox Code Playgroud)

我可以添加括号: …

perl constants

13
推荐指数
1
解决办法
2万
查看次数