注意:
我现在意识到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) 这似乎在上周工作,现在它没有.
deploy:deploy-file目标部署jar和pom我可以通过在命令行上将我的凭据嵌入服务器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) 我正在尝试在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.
刚出现这个问题:我如何突破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) 我现在看到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>可能无法在这种情况下使用,但我还是好奇的区别是什么.
我们现在正在尝试多分支管道构建.该功能的主要优点是,它允许我们在创建新分支时自动创建新的Jenkins作业.
但是,实现起来比使用UI选择如何进行构建的旧方法要困难一些.此外,某些功能似乎缺失.
例如,在Jenkins Freestyle作业中,我们可以使用Jenkins UI浏览工作区,下载单个文件,甚至清除工作区.当构建出错或者开发人员需要一个未归档的特定构建资产时,我们发现这很有用.
我注意到在Jenkins Pipeline作业中,UI不再提供对工作区的访问.我知道我可以归档工作区,但我真的不想保存它 - 特别是对于每个构建.我只是希望能够浏览工作区或清除它,如果某些东西导致构建过程出现问题.
有没有办法通过管道取回这个功能?我不想为每个构建存档工作区(空间问题),但我确实希望能够在出现问题时查看工作区的外观.
目前我正在使用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中的签出策略配置为"始终签出新副本".怎么了?我仍然从那开始,并有很多东西需要学习.所以请记住这一点来回答我.:-)
我们使用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 之间的区别是什么,为什么你要使用另一个呢?
我正在尝试将项目部署到我们的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) 我试图使用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)
我可以添加括号: …
deployment ×3
jenkins ×3
maven ×3
artifactory ×2
perl ×2
svn ×2
ant ×1
apache2 ×1
break ×1
constants ×1
flow-control ×1
hook ×1
if-statement ×1
import ×1
include ×1
ldap ×1
settings ×1