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界面 查看
点击工作空间
这是自由风格式构建项目