Jenkins 可以为每个构建存储工件。您可以指定要归档的文件夹。(但是,我只是发现将所有需要的工件复制到一个文件夹下更容易。这样,我可以简单地指定一个文件夹,而不必担心我遗漏了什么。)
如果您需要根据构建部署这些文件,我会将它们作为构建工件存储在 Jenkins 中。这些存储在http://$JENKINS_URL/$JOB_NAME/$BUILD_NUMBER/artifact/...
工作...
区的目录结构中。例如,我倾向于在我的 Java 项目中构建所有内容,target
并将我的工件存储在target/archive
文件夹下(如果所有工件都在一个文件夹下,则更容易保存它们)如果我有一个文件foo.txt
存储为工件,它是网址将是:
http://$JENKINS_URL/$JOB_NAME/$BUILD_NUMBER/artifact/target/archive/foo.txt
我可以使用wget
或curl
拉下这个神器。
您还可以决定(如果您仍然使用 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 以在每次成功构建后运行促销。
希望这可以帮助。