Jenkins 创建 freestyle 项目 执行linux 命令

Jenkins 创建 freestyle 项目

构建作业是一个持续集成服务器的基本职能,构建叙利亚的形式多种多样,可以是编译和单元测试,也可能是打包及部署,或者是其他类似的作业。

在 Jenkins 中,构建作业很容易建立,而且根据你的需要你可以安装各种插件,来创建多种形式的构建作业,

下面我们先来学习创建自由式构建作业。


自由式的构建作业是灵活和可配置的选项,并且可以用于任何类型的项目,它的配置相对简单,其中很多配置在的选项也会用在其他构建作业中。

在 Jenkins 主页面,点击左侧菜单栏的“新建”或者“New job”

进入创建 job 页面,

注:

1、job 名称需要有规划,以便于后面的权限管理; 有意义有规则,jenkins权限就是用文件的正则表达式匹配

2、job名称一旦确认了,不要去改,创建 job 后不要轻易更改名称,因为 jenkins 一切皆文件,很多关于 job 的文件,都是以该名称命名,当你改名后,一般不会删除旧文件,而是会再重新创建一份新的文件。

输入 job 名称,选择类型后,点击 OK 后创建 job,进入 job 配置页面,此时在 Jenkins的主目录下的 jobs 目录已经生成了以你 Job 名称命名的文件夹

[root@ci-node2 jobs]# pwd
/var/lib/jenkins/jobs
[root@ci-node2 jobs]# ll
total 0
drwxr-xr-x 3 jenkins jenkins 38 Apr  8 00:25 My-freestyle-job

自动创建了一个以项目名称,命名的文件夹

生成完如果要改名 ,改名结果是,又新生成一个新文件夹,旧文件夹没有删除,就会在数据目录导致出现很多垃圾文件夹,所以起名字的时候要想好,不要轻易的改名

文件夹里面有配置,构建

[root@ci-node2 My-freestyle-job]# ll
total 4
drwxr-xr-x 2 jenkins jenkins  23 Apr  8 00:25 builds
-rw------- 1 jenkins jenkins 468 Apr  8 00:25 config.xml

 执行构建会在,/var/lib/jenkins 目录下创建worksspace目录,工作区文件夹,在工作区文件夹下面还会建立一些东西

Job 配置页面,主要包括通用配置、源码管理、构建触发器、构建环境、构建、构建后操作等几个部分,根据你选择的构建类型不同,可能配置项会有一些小的差别。我们通过几个示例来学习具体的配置

执行 linux 命令、脚本

首先我们来看通用配置选项,

勾选“丢弃旧的构建”,这是我们必须提前考虑的重要方面,就是我们如何处理构建历史,构建作业会消耗大理的磁盘空间,尤其是你存储的构建产物
(比如执行 java 构建时会生成的 JAR、WAR 等)

丢弃旧的构建 这个一定要配

 每构建一次,生成构建历史,生成构建产物,日积夜累,造成数据目录会持续生长很快,保留那么多次构建产物是没有用的,丢弃旧的构建,选择系统帮你自动清理,自动清理构建历史

该选项允许你限制在构建历史记录的作业数。你可以告诉 Jenkins 只保留近的几次构建,或者只保留指定数量的构建,

此外,Jenkins 永远不会删除最后一个稳定和成功的构建。

jenkins永远为你保存最后一次成功构建的产物 在系统上 这是jenkins规则

具体数据的指定要根据你项目的实际情况而定,我一般设置为 5、5,


下拉至“构建”部分

构建

就是用job执行什么任务

 

添加构建操作,选择“execute shell” 

试下执行pwd命令

保存设置后,回到 job 主页面

点击“立即构建”,执行 job 的构建任务,我们的 job 就是执行一条 linux 命令 

 

 出现了构建历史,点击构建历史

 点击控制台输出

 前面/var/lib/jenkins 路径固定的 是jenkins数据目录

构建任务会自动生成workspace 工作区目录,然后里面会以job名称新建一个文件夹

 

 执行命令当前目录就是/var/lib/jenkins/workspace 加上job名称 文件夹 这个是你linux 执行命令的当前目录

在上面的控制台输出内容中,我们可以看到 job 执行时的当前工作目录为 Jenkins 主目录+workspaces+以 job 名称命名的文件夹,

知道这一点对于我们后面写脚本执行部署任务时非常重要。

我们也可以通过命令行进行确认。

 到workspace目录里面 看到以job名称创建一个文件夹

[root@ci-node2 jenkins]# cd workspace/
[root@ci-node2 workspace]# ll
total 0
drwxr-xr-x 2 jenkins jenkins 6 Apr  8 23:57 My-freestyle-job

里面是空的 因为在job没有做任何操作,以后拉取源代码,会拉取到这 job名称文件夹里面

[root@ci-node2 workspace]# pwd
/var/lib/jenkins/workspace
[root@ci-node2 workspace]# ll
total 0
drwxr-xr-x 2 jenkins jenkins 6 Apr  8 23:57 My-freestyle-job


[root@ci-node2 workspace]# cd My-freestyle-job/
[root@ci-node2 My-freestyle-job]# pwd
/var/lib/jenkins/workspace/My-freestyle-job
[root@ci-node2 My-freestyle-job]# ll
total 0

而且我们进一步也可以看到 job 主页面,工作空间所对应的位置也是此目录。通过这个
例子,我们可以联想到,我们可以使用 Jenkins 执行任何 linux 命令,这也就是我们前面讲
的要注意 Jenkins 启动用户的配置,如果是 root 用户启动的 Jenknis,那 Jenkins 的安全 
及权限配置一定要做好控制。我们在学习初期,为了节省时间,可以使用 root 用户启动
jenkins。

回到/var/lib/jenkins 路径 去看看jobs文件夹目录

-rw-r--r--   1 jenkins jenkins     4 Apr  6 19:05 jenkins.install.InstallUtil.lastExecVersion
-rw-r--r--   1 jenkins jenkins     4 Apr  6 19:05 jenkins.install.UpgradeWizard.state
drwxr-xr-x   3 jenkins jenkins    30 Apr  8 00:25 jobs
drwxr-xr-x   4 jenkins jenkins    37 Apr  7 23:20 logs
-rw-------   1 jenkins jenkins   907 Apr  7 23:20 nodeMonitors.xml
drwxr-xr-x   2 jenkins jenkins     6 Apr  6 18:16 nodes
drwxr-xr-x 116 jenkins jenkins 12288 Apr  7 23:10 plugins
-rw-------   1 jenkins jenkins   129 Apr  7 23:20 queue.xml.bak
-rw-------   1 jenkins jenkins    64 Apr  6 18:16 secret.key
-rw-r--r--   1 jenkins jenkins     0 Apr  6 18:16 secret.key.not-so-secret
drwx------   4 jenkins jenkins  4096 Apr  9 00:02 secrets
-rw-r--r--   1 jenkins jenkins     0 Apr 10 23:32 ThinBackup Worker Thread.log
drwxr-xr-x   2 jenkins jenkins   182 Apr  7 23:21 updates
drwxr-xr-x   2 jenkins jenkins    24 Apr  6 18:16 userContent
drwxr-xr-x   3 jenkins jenkins    19 Apr  6 18:16 users
drwxr-xr-x   2 jenkins jenkins     6 Apr  7 23:20 workflow-libs
drwxr-xr-x   3 jenkins jenkins    30 Apr  8 23:57 workspace

[root@ci-node2 jenkins]# pwd
/var/lib/jenkins

进入jobs目录去看看我们项目里面

[root@ci-node2 jenkins]# cd jobs/
[root@ci-node2 jobs]# ll
total 0
drwxr-xr-x 3 jenkins jenkins 101 Apr  8 23:57 My-freestyle-job


[root@ci-node2 jobs]# cd My-freestyle-job/

里面有好多文件 一些配置

[root@ci-node2 My-freestyle-job]# ll
total 8
drwxr-xr-x 3 jenkins jenkins 159 Apr  8 23:57 builds
-rw------- 1 jenkins jenkins 821 Apr  8 23:53 config.xml
lrwxrwxrwx 1 jenkins jenkins  22 Apr  8 23:57 lastStable -> builds/lastStableBuild  // 最后一次构建

lrwxrwxrwx 1 jenkins jenkins  26 Apr  8 23:57 lastSuccessful -> builds/lastSuccessfulBuild  // 最后一次成功构建 软链接指向哪一次构建
-rw------- 1 jenkins jenkins   2 Apr  8 23:57 nextBuildNumber

去builds目录看看

[root@ci-node2 My-freestyle-job]# cd builds/

[root@ci-node2 builds]# ll
total 0
drwxr-xr-x 2 jenkins jenkins 82 Apr  8 23:57 1
lrwxrwxrwx 1 jenkins jenkins  2 Apr  8 23:53 lastFailedBuild -> -1
lrwxrwxrwx 1 jenkins jenkins  1 Apr  8 23:57 lastStableBuild -> 1
lrwxrwxrwx 1 jenkins jenkins  1 Apr  8 23:57 lastSuccessfulBuild -> 1
lrwxrwxrwx 1 jenkins jenkins  2 Apr  8 23:53 lastUnstableBuild -> -1
lrwxrwxrwx 1 jenkins jenkins  2 Apr  8 23:53 lastUnsuccessfulBuild -> -1
-rw------- 1 jenkins jenkins  0 Apr  8 00:25 legacyIds

build就是图片上的 构建历史 build history 1=#1

 我们进入1目录看看

[root@ci-node2 builds]# cd 1
You have new mail in /var/spool/mail/root
[root@ci-node2 1]# ll
total 16
-rw------- 1 jenkins jenkins 926 Apr  8 23:57 build.xml  // 构建配置
-rw-r--r-- 1 jenkins jenkins   6 Apr  8 23:57 changelog.xml  // 改变的历史
-rw-r--r-- 1 jenkins jenkins 902 Apr  8 23:57 injectedEnvVars.txt
-rw-r--r-- 1 jenkins jenkins 541 Apr  8 23:57 log

构建的配置 build.xml

<?xml version='1.0' encoding='UTF-8'?>
<build>
  <actions>
    <hudson.model.CauseAction>
      <causeBag class="linked-hash-map">
        <entry>
          <hudson.model.Cause_-UserIdCause>
            <userId>admin</userId>
          </hudson.model.Cause_-UserIdCause>
          <int>1</int>
        </entry>
      </causeBag>
    </hudson.model.CauseAction>
    <org.jenkinsci.plugins.envinject.EnvInjectPluginAction plugin="envinject@2.1.5"/>
  </actions>
  <queueId>1</queueId>
  <timestamp>1586361434637</timestamp> // 时间戳
  <startTime>1586361434647</startTime>
  <result>SUCCESS</result>
  <duration>337</duration>
  <charset>UTF-8</charset>
  <keepLog>false</keepLog>
  <builtOn></builtOn>
  <workspace>/var/lib/jenkins/workspace/My-freestyle-job</workspace> // workspace 工作目录
  <hudsonVersion>2.99</hudsonVersion>
  <scm class="hudson.scm.NullChangeLogParser"/>
  <culprits class="com.google.common.collect.EmptyImmutableSortedSet"/>
</build>

退出来 回到这一层路径

[root@ci-node2 1]# cd ..
[root@ci-node2 builds]# ll
total 0
drwxr-xr-x 2 jenkins jenkins 82 Apr 10 23:53 1
lrwxrwxrwx 1 jenkins jenkins  2 Apr  8 23:53 lastFailedBuild -> -1
lrwxrwxrwx 1 jenkins jenkins  1 Apr  8 23:57 lastStableBuild -> 1
lrwxrwxrwx 1 jenkins jenkins  1 Apr  8 23:57 lastSuccessfulBuild -> 1
lrwxrwxrwx 1 jenkins jenkins  2 Apr  8 23:53 lastUnstableBuild -> -1
lrwxrwxrwx 1 jenkins jenkins  2 Apr  8 23:53 lastUnsuccessfulBuild -> -1
-rw------- 1 jenkins jenkins  0 Apr  8 00:25 legacyIds

[root@ci
-node2 builds]# cd ..
[root@ci
-node2 My-freestyle-job]# ll total 8 drwxr-xr-x 3 jenkins jenkins 159 Apr 8 23:57 builds -rw------- 1 jenkins jenkins 821 Apr 8 23:53 config.xml lrwxrwxrwx 1 jenkins jenkins 22 Apr 8 23:57 lastStable -> builds/lastStableBuild lrwxrwxrwx 1 jenkins jenkins 26 Apr 8 23:57 lastSuccessful -> builds/lastSuccessfulBuild -rw------- 1 jenkins jenkins 2 Apr 8 23:57 nextBuildNumber
[root@ci
-node2 My-freestyle-job]# pwd /var/lib/jenkins/jobs/My-freestyle-job
看看 /var/lib/jenkins/jobs/My-freestyle-job目录下的 config.xml 里面内容

看到我们配置的 丢弃旧的构建 
还有执行的命令 pwd
所有配置的记录 以文件形式保存
<?xml version='1.0' encoding='UTF-8'?>
<project>
  <actions/>
  <description></description>
  <keepDependencies>false</keepDependencies>
  <properties>
    <com.dabsquared.gitlabjenkins.connection.GitLabConnectionProperty plugin="gitlab-plugin@1.5.2">
      <gitLabConnection></gitLabConnection>
    </com.dabsquared.gitlabjenkins.connection.GitLabConnectionProperty>
    <jenkins.model.BuildDiscarderProperty>
      <strategy class="hudson.tasks.LogRotator">
        <daysToKeep>5</daysToKeep>
        <numToKeep>5</numToKeep>
        <artifactDaysToKeep>-1</artifactDaysToKeep>
        <artifactNumToKeep>-1</artifactNumToKeep>
      </strategy>
    </jenkins.model.BuildDiscarderProperty>
  </properties>
  <scm class="hudson.scm.NullSCM"/>
  <canRoam>true</canRoam>
  <disabled>false</disabled>
  <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
  <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
  <triggers/>
  <concurrentBuild>false</concurrentBuild>
  <builders>
    <hudson.tasks.Shell>
      <command>pwd</command>
    </hudson.tasks.Shell>
  </builders>
  <publishers/>
  <buildWrappers/>
</project>


现在再修改下配置 再增加一个shell 创建一个文件 再保存配置

 再点击执行


 执行完 看看输出

 

创建的文件 放在 /var/lib/jenkins/workspace/My-freestyle-job 目录下 当前workspace工作目录

 
[root@ci-node2 workspace]# cd My-freestyle-job/
[root@ci-node2 My-freestyle-job]# ll
total 0
-rw-r--r-- 1 jenkins jenkins 0 Apr 11 00:26 readme
[root@ci-node2 My-freestyle-job]# pwd
/var/lib/jenkins/workspace/My-freestyle-job

创建的文件在 jenkins web界面 查看

 点击工作空间

这是自由风格式构建项目

原文地址:https://www.cnblogs.com/mingerlcm/p/12657346.html