1. JOB构建

jenkins是由多个job任务或者project构成的开发系统,可以将开发测试部署基础运维操作创建一个任务保存在任务列表当中,方便在jenkins平台中日常的维护。

使用内建模块或者脚本创建任务,在任务里面通过配置相关的参数以及工具模块作为可执行的任务,共享到jenkins平台下。供不同权限的人重复build执行。

每一次执行的结果记录称为一个build构建。workspace目录中保存git拉取的代码和构建之后的文件。

1. Freestyle job

用途最为广泛的任务类型,在配置页面添加配置项和参数就可以完成一个满足不同工作人员的需求。

缺点是每个Freestyle job仅能实现一个开发功能。Freestylejob配置只能通过前台手动完成,无法通过编写一段代码去实现Freestyle的所有功能,所以不利于Job配置迁移版本控制。(没有审计和历史记录)。

逻辑相对简单,无需额外学习成本。

2. Pipline Job

早期是jenkins的插件,后来集成到了jenkins中可直接使用。可以实现持续集成持续交付的管道。持续集成简称CI,开发的每一次提交都可以自动构建。持续交付CD,在持续集成的基础上将打包文件部署。

所有模块, 参数配置都可以体现为一个pipeline脚本,可以定义多个stage构建一个管道工作集。所有的配置代码化,方便Job配置迁移与版本控制。但是有一定的学习成本,需要学习pipline脚本基础。

2. 环境配置

1. 配置 Jenkins server 本地 gitlab DNS

将gitlab所在服务器的ip配置到本地的host中。

vi  /etc/hosts

# 192.168.xx.xx gitlab.example.com

2. 安装git client, curl工具依赖

yum install curl -y

3. 关闭系统Git http.sslVerify安全认证

git config --system http.sslVerify false

4. 添加Jenkins后台client user与email

jenkins后台的系统管理-系统设置,找到Git Plugin列表中,name中添加rootemail中添加root@example.com

5. 添加git Credential凭据

jenkins后台的凭据菜单,jenkins -> 全局凭据 -> 添加凭据,类型选择username with password范围全局username输入rootpassword输入对应的密码,id描述可以不填,确认即可。

3. freestyle构建配置

首先需要创建一个freestyle project, 左上角的新建项目就可以。test-freestyle-job, 构建一个自由风格的软件任务。

编辑描述信息,随便输入点什么就可以了。this is first test freestyle job

同样在general中添加参数配置,在配置页面勾选参数化构建过程,添加一个选项参数和文本参数。选项参数名称为deploy_env, 选项为dev(换行)prod, 描述随便写,choose deploy environment。文本参数的名称填写version,默认值填写1.0.0,描述随便写,build version

配置源代码管理选项打开,将git上的代码clonejenkins本地,进行随后的项目部署工作。输入gitlaburl地址,这里使用https的地址,credentials选择刚刚创建的账号密码。branch选中master

最后通过添加一个shell模块,完成build配置。在构建选项中,点击增加构建步骤,选择执行shell。在编辑栏中添加任务脚本。声明脚本格式。

这里面的deploy_envversion就是前面添加的参数配置,这里会将选中的值传递进来。

#!/bin/sh
export PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"

# Print env variable
echo "[INFO] Print env variable"
echo "Current deployment environment is $deploy_env" >> test.properties
echo "THe build is $version" >> test.properties
echo "[INFO] Done"

# Check test properties
echo "[INFO] Check test properties"
if [ -s test.properties ]
then
    cat test.properties
    echo "[INFO] Done..."
else
    echo "test.properties is empty"
fi

echo "[INFO] Build finished"

点击应用就配置完成了,点击保存自动退出配置页面。

点击左侧的Build with Parameters菜单,这里会出现我们之前配置的可选参数和文本参数,需要我们自己选择一下。点击开始构建。可以点击左下角的圆球,查看构建结果。

4. Pipline Job构建配置

代码包裹在pipeline{}内,stages{}用来包含pipline所有的stage层,用来将pipeline管道分为若干个管道块,每一个管道块都可以独立的做一些事情。stage中的steps子层用来添加pipeline的业务编写。

pipline {
    agent any
    environment {
        host='test.example.com'
        user='deploy'
    }
    stages {
        stage('build') {
            steps {
                sh "cat $host"
                echo $deploy
            }
        }
    }
}

agent的作用是定义pipeline在哪里运行,通常可以使用anynone或具体的jenkins node主机名等。

agent {node {label 'node1'}}

environment用来定义当前的环境变量。变量名称=变量值的方式,与stages平级就可以应用到stages中。如果定义在stage中就值可以使用在steps中。

script是可选的,定义在steps区域下,可以编写groovy脚本语言,用来进行相应的脚本逻辑运算。

steps {
    echo "Hello world"
    script {
        def servers = ['node1', 'node2']
        For (int i=0; i < server.size(); ++i) {
            echo "testing ${servers[i]} server";
        }
    }
}

steps中可以使用echo输出,可以使用linux系统的shell命令。可以使用git模块进行git相关操作。

steps {
    echo "Hello world"
    sh "cat 'hello world'"
    git url: "https://root@gitlab.example.com/root/test.git"
}

可以在新建任务重创建一个Pipeline project, 名称为test-pipeline-job, 类型选择流水线任务。描述信息添加this is first pipeline job。在Pipeline任务栏填写脚本。

#!groovy

pipeline {
    agent {node {label 'master'}}

    environment {
        PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
    }

    parameters {
        choice (
            choices: 'dev\nprod',
            description: 'choose deploy environment',
            name: 'deploy_env',
        )
        string (name: 'version', defaultValue: '1.0.0', description: 'build version')
    }

    stages {
        stage("Checkout test repo") {
            steps {
                sh 'git config --global http.sslVerify false'
                dir ("${env.WORKSPACE}") {
                    git branch: 'master', credentialsId: "xxxxxxxxxx", url: 'https://root@gitlab.example.com/root/test-repo.git'
                }
            }
        }
        stage("Print env variable") {
            steps {
                dir ("${env.WORKSPACE}") {
                    sh """
                    echo "[INFO] Print env variable"
                    echo "Current deployment environment is $deploy_env" >> test.properties
                    echo "The build is $version" >> test.properties
                    echo "[INFO] Done..."
                    """
                }
            }
        }
        stage("Check test properties") {
            steps {
                dir ("${env.WORKSPACE}") {
                    sh """
                    echo "[INFO] Check test properties"
                    if [ -s test.properties ]
                    then
                        cat test.properties
                        echo "[INFO] Done..."
                    else
                        echo "test.properties is empty"
                    fi
                    """
                    echo "[INFO] Build finished..."
                }
            }
        }
    }
}

点击顶部test-pipeline-job, 重新开始Build with Parameters,就可以看到每个任务的执行和状态。点击蓝色圆球就可以进入到日志界面中查看了。

4. shell集成和jenkins参数集成

shelljenkins中最常用的模块。

可以新建项目,名称随便起,shell-freestyle-job选择构建一个自由风格的项目。

描述随便填写,构建中选择执行shell,可以书写一些shell脚本。

#!/bin/sh
user=`whoami`

if [ $user == 'deploy' ]
then
    echo "Hello, my name is $user"
else
    echo "Sorry I am not $user"
fi

ip addr

cat /etc/system-release

free -m

df -h

py_cmd=``which python`

$py_cmd --version

Jenkins参数是Jenkins任务重要的组成部分,可以通过传入不同的参数,让Jenkins实现不同的效果。

新建一个parameter-freestyle-job同样选择自由风格的软件项目。参数化构建过程。可以选择选项参数,deploy_env, 值为dev,uat,stage,pord四个值。

文本参数输入version,默认值输入1.0.0

布尔值参数bool,默认值勾选,表示默认为true

密码参数,名称为pass,默认值123456

在构建里面选择执行shell

#!/bin/sh

echo "Current deploy environment is $deploy_env"
echo "The build is $version"
echo "The password is $pass"

if $bool
then
    echo "Request is approved"
else
    echo "Request is rejected"
fi

5. Git和Maven集成

1. Git

使用Jenkins内建的git插件,去将gitlab或者github的代码clone到本地。

新建任务git-freestyle-job选择构建自由风格的原件项目。

在码源管理里面选择git,添加仓库https地址,Credentials凭证选择之前创建的gitlab系统凭据。保存并退出。点击立即构建就开始执行了。

2. Maven

使用Jenkins内建的Maven插件将从代码仓库clone下来的java源代码编译成我们事先配置好的var包或者jar包到本地,准备好随后的部署工作。

填写完git配置之后,构建菜单选择调用顶层Maven目标,输入package, 保存并退出。

需要配置,系统管理,全局工具配置,选择新增JDK,取消自动安装勾选,别名选择jdk1.8JAVA_HOME输入安装maven插件时候差生的runtime路径复制进去。

Maven中选择新增Maven,同样取消自动安装,name输入maven-3.5.4, 复制命令行中的maven-home路径粘贴到MAVEN_HOME中。

apply保存配置。找到我们创建的这个项目,点击配置,在调用顶层Maven目标中选择maven-3.5.4也就是刚刚填写的那个值。点击保存,然后开始构建。

6. Jenkins Ansible集成

使用ansible内建shell模块调用本地的ansible命令行工具,从而能够实现Jenkins调用ansible从而实现远程服务器的部署管理功能。

首先登陆jenkins server远程主机的命令行,并且完成了ansible py3.6虚拟环境配置,以及配置了Jenkins主机下deploy系统用户到test.example.com主机的密钥认证。

su - delpoy
ll -a
cd .py3-a2.5-env
ll
# 可以发现ansible源代码的值。

可以使用.py3-a2.5-env目录进行py3.6环境以及ansible2.5环境加载工作。

查看Jenkinsdeploy系统用户到test.example.com,不需要输入密码就可以链接。

ssh root@test.example.com这台主机的密钥认证。

exit

Jenkinsansible集成配置页面。

Jenkins的命令行

cd /home/deploy
ls
# 这里要有一个ansible的清单文件,也就是testservers文件夹

testservers文件内容, 指定服务名称和远程主机地址,以及要进入的远程主机用户名称。

[testserver]
test.example.com ansible_user=root

回到Jenkins的用户界面。新建任务,ansible-freestyle-job,选择自由风格软件项目。描述随便填写this is my first ansible job,构建中选择执行shell

#!/bin/sh

set +x
source /home/deploy/.py3-a2.5-env/bin/activate
source /home/deploy/.py3-a2.5-env/ansible/hacking/env-setup -q

cd /home/deploy
ansible --version
ansible-playbook --version

cat testservers

ansible -i testservers testserver -m command -a "ip addr"
set -x

转载须知

如转载必须标明文章出处文章名称文章作者,格式如下:

转自:【致前端 - zhiqianduan.com】 Jenkins使用  "隐冬"
请输入评论...