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

时间:2013-12-10 23:21:21

标签: java ant jenkins jenkins-plugins jenkins-cli

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

现在我需要在Jenkins中维护中间文件有些问题。在部署执行期间,我的胶水蚂蚁任务正在从工作空间/文件夹运行。这时我需要创建几个特定于特定构建的中间文件。

如何维护这些文件?我知道Jenkins目录结构。 (詹金斯documentation link就此而言)

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

但是我找不到获取此文件夹绝对路径的方法。 (但是我可以从Jenkins中提供的WORKSPACE变量中扣除它)I already checked Jenkins Set Environment Variables.

1 个答案:

答案 0 :(得分:2)

Jenkins可以为每个构建存储工件。您可以指定要存档的文件夹。 (但是,我只是发现在单个文件夹下复制所有必需的工件更容易。这样,我只需指定一个文件夹,如果我遗漏任何东西就不用担心。)

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

http://$JENKINS_URL/$JOB_NAME/$BUILD_NUMBER/artifact/target/archive/foo.txt

我可以使用wgetcurl来删除此工件。

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

  • 我需要部署的所有工件的zip文件或tarball(包括脚本和中间文件)。
  • 名为DEPLOYMENT_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>

<filterset>@...@变量替换为Jenkins本身的环境变量。现在,我的DEPLOYMENT_DIRECTIONS.txt看起来像这样:

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_DIRECTIONS.txt文件中的三个步骤。
  • 第2组:他们仍然希望选择要部署的版本,但是可以直接从Jenkins执行此操作 - 从不登录到服务器。我使用Promoted Build Plugin来自动化DEPLOYMENT_DIRECTIONS.txt文件中的内容。这很简单,因为它只是下载deploy.sh并运行它。
  • 第3组:想要自动部署每个版本。我们只需更改Promoted Build Plugin即可在每次成功构建后运行促销。

希望这有帮助。