Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Jenkins执行期间管理每个构建的特定文件?_Java_Ant_Jenkins_Jenkins Plugins_Jenkins Cli - Fatal编程技术网

Java 如何在Jenkins执行期间管理每个构建的特定文件?

Java 如何在Jenkins执行期间管理每个构建的特定文件?,java,ant,jenkins,jenkins-plugins,jenkins-cli,Java,Ant,Jenkins,Jenkins Plugins,Jenkins Cli,我开始使用Jenkins向EC2项目添加持续集成。在构建执行之后,我将在虚拟机中部署构建工件 现在,我需要在Jenkins中维护的中间文件有一些问题。在部署执行期间,我的glue ant任务正在工作区/文件夹中运行。此时,我需要创建几个特定于此特定构建的中间文件 如何维护这些文件?我知道詹金斯目录结构。(詹金斯谈这件事) 我应该在builds/[BUILD_ID]文件夹下创建这些文件吗 但是,我没有找到一种方法来获取此文件夹的绝对路径。(不过我可以从Jenkins中提供的WORKSPACE变量中

我开始使用Jenkins向EC2项目添加持续集成。在构建执行之后,我将在虚拟机中部署构建工件

现在,我需要在Jenkins中维护的中间文件有一些问题。在部署执行期间,我的glue ant任务正在工作区/文件夹中运行。此时,我需要创建几个特定于此特定构建的中间文件

如何维护这些文件?我知道詹金斯目录结构。(詹金斯谈这件事)

我应该在builds/[BUILD_ID]文件夹下创建这些文件吗

但是,我没有找到一种方法来获取此文件夹的绝对路径。(不过我可以从Jenkins中提供的WORKSPACE变量中扣除)

Jenkins可以为每个构建存储工件。您可以指定要存档的文件夹。(然而,我发现将所有需要的工件复制到一个文件夹下更容易。这样,我可以简单地指定一个文件夹,而不必担心丢失任何东西。)

如果您需要基于构建部署这些文件,我会将它们作为构建工件存储在Jenkins中。它们存储在
http://$JENKINS\u URL/$JOB\u NAME/$BUILD\u NUMBER/artifact/..
中,其中
..
是工作区的目录结构。例如,我倾向于在
target
下构建Java项目中的所有内容,并将我的工件存储在
target/archive
文件夹下(如果它们位于单个文件夹下,则更容易保存所有工件)。如果我将文件
foo.txt
存储为工件,则其URL将是:

http://$JENKINS_URL/$JOB_NAME/$BUILD_NUMBER/artifact/target/archive/foo.txt
我可以使用
wget
curl
来拉下这个工件

您还可以决定(如果您仍然使用Ant)在一个易于掌握的文件中压缩或创建所有工件的tarball。我就是这么做的。实际上,我的
target/archive
目录中通常有三个文件:

  • 部署所需的所有工件(包括脚本和中间文件)的zip文件或tarball
  • 一个名为
    DEPLOYMENT\u DIRECTIONS.txt
    的文件,其中包含部署方向
  • 一个名为
    deploy.sh
    的文件,它是我的实际部署文件
在我的
DEPLOYMNET_DIRECTIONS.txt
文件中,有以下方向:

1). Log onto the Server

2). Execute the following curl command to download the deploy script:

    curl -o deploy.sh "@JENKINS_URL@job/@JOB_NAME@/@BUILD_NUMBER@/artifact/target/archive/deploy.sh"

    You may copy this and paste it right into the server where you're deploying.

3). Run the deploy.sh script.

    $ bash deploy.sh
在我的
build.xml
中是这样的:

    <copy todir="${archive.dir}">
        <fileset dir="${main.config.dir}">
            <include name="DEPLOYMENT_DIRECTIONS.txt"/>
            <include name="deploy.sh"/>
        </fileset>
        <filterset>
            <filter token="JOB_NAME"        value="${env.JOB_NAME}"/>
            <filter token="BUILD_NUMBER"    value="${env.BUILD_NUMBER}"/>
            <filter token="JENKINS_URL"     value="${env.JENKINS_URL}"/>
        </filterset>
    </copy>
1). Log onto the Server

2). Execute the following curl command to download the deploy script:

    curl -o deploy.sh "http://jenkins.vegicorp.com/jenkins/server_app/15/artifact/target/archive/deploy.sh"

    You may copy this and paste it right into the server where you're deploying.

3). Run the deploy.sh script.

    $ bash deploy.sh
您可以从服务器上的方向2剪切并粘贴该行

请注意:

  • 我使用
    curl
    而不是
    wget
    ,因为
    curl-o
    将覆盖现有的
    deploy.sh
    文件。这样,我就不必担心
    wget
    会在我身上下载最新的
    deploy.sh.2
    ,而有人会意外地从以前的版本中运行较旧的
    deploy.sh
  • 我之所以说
    base deploy.sh
    ,是因为我不必担心路径,也不必在
    deploy.sh
    shell脚本上设置可执行位。告诉人们使用
    bash deploy.sh
    比指定
    chmod u+x
    然后执行
    /deploy.sh
    更容易
希望这有帮助

顺便说一句,这是针对三种不同舒适度的人群设计的:

  • 组#1:希望登录到进行部署的计算机,并选择要部署的特定构建。这些组遵循要手动部署的构建中
    DEPLOYMENT\u DIRECTIONS.txt
    文件中的三个步骤
  • Group#2:他们仍然希望选择要部署的构建,但对直接从Jenkins执行此操作感到满意——从不登录服务器。我使用来自动化
    DEPLOYMENT\u DIRECTIONS.txt
    文件中的内容。这非常简单,因为它只是下载并运行
    deploy.sh
  • Group#3:希望自动部署每个构建。我们只需更改升级的构建插件,以便在每次成功构建后运行升级
希望这有帮助