成功最有效的方法就是向有经验的人学习!

第四章 Jenkins工具集成

构建工具集成

集成maven

先决条件
JDK:在maven3.3 以上的版本需要JDK版本1.7+。内存:没有最低限制。
磁盘:1G+可用磁盘空间。 操作系统:没有限制。
下载maven http://maven.apache.org/download.cgi

安装maven

tar zxf apache-maven-3.6.0-bin.tar.gz -C /usr/local/
#设置全局变量(/etc/profile)
export MAVEN_HOME=/usr/local/apache-maven-3.6.0
export PATH=$PATH:$MAVEN_HOME/bin
source /etc/profile

测试

Jenkins配置maven

系统设置->全局工具配置

编写Jenkinsfile

node {
stage ("build"){
    mavenHome = tool 'M3'
    sh "${mavenHome}/bin/mvn -v"
}
}

构建测试

maven常用命令

clean install -DskipTests
clean package 

集成ant

先决条件
下载:https://ant.apache.org/bindownload.cgi

安装ant

tar zxf apache-ant-1.10.5-bin.tar.gz -C /usr/local/
#添加全局变量(/etc/profile)
export ANT_HOME=/usr/local/apache-ant-1.10.5
export PATH=$PATH:$MAVEN_HOME/bin:$ANT_HOME/bin
source /etc/profile

测试

Jenkins配置ant

系统设置->全局工具配置

编写Jenkinsfile

node {
stage ("build"){
    antHome = tool 'ANT'
    sh "${antHome}/bin/ant -version"
}
}

构建测试

Ant常用命令

ant -buildfile -f build.xml

集成gradle

先决条件
下载:https://downloads.gradle.org/distributions/gradle-5.3-bin.zip

安装Gradle

unzip gradle-5.3-bin.zip -d /usr/local/
#添加全局变量(/etc/profile)
export GRADLE_HOME=/usr/local/gradle-5.3
export PATH=$PATH: $GRADLE_HOME/bin
source /etc/profile

测试

Jenkins配置gradle

系统设置->全局工具配置

编写Jenkinsfile

node {
stage ("gradlebuild"){
    gradleHome = tool 'GRADLE'
    sh "${gradleHome}/bin/gradle -v"
}
}

构建测试

Gradle常用命令

- ./gradlew -v 版本号,首次运行,没有gradle的要下载的哦。
- ./gradlew clean 删除HelloWord/app目录下的build文件夹
- ./gradlew build 检查依赖并编译打包
- ./gradlew assembleDebug 编译并打Debug包
- ./gradlew assembleRelease 编译并打Release的包
- ./gradlew installRelease Release模式打包并安装
- ./gradlew uninstallRelease 卸载Release模式包

集成npm

先决条件
下载 https://nodejs.org/en/download/

安装Node

tar xf node-v10.15.3-linux-x64.tar.xz -C /usr/local/
#添加全局变量(/etc/profile)
export NODE_HOME=/usr/local/node-v10.15.3-linux-x64
export PATH=$PATH: $NODE_HOME/bin
source /etc/profile

测试

Jenkins配置Npm

在Jenkins全局工具配置中并没有node,可以直接通过Jenkinsfile定义使用。

Jenkinsfile

node {
stage ("npmbuild"){
    sh """
       export npmHome=/usr/local/node-v10.15.3-linux-x64
       export PATH=\$PATH:\$npmHome/bin
       npm -v
       """
}    
}

构建测试

Npm常用构建命令

npm install && npm run build

Ldap用户认证集成

安装LDAP

#关闭SELINUX
vim /etc/sysconfig/selinux   # SELINUX=disabled
setenforce 0 

#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld#安装了ldap工具
yum install -y openldap-servers openldap-clients migrationtools  #安装LDAP工具
slappasswd   #据提示输入密码会返回加密的密码字符串,保存好这个字符串

#配置数据库缓存cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG 
chown -R ldap:ldap /var/lib/ldap/#测试配置文件
slaptest -u  #出现configfile testing successed 说明成功了#启动ldap
systemctl start slapd.service 
systemctl enable slapd.service#导入模板
ls /etc/openldap/schema/*.ldif | xargs -I {} sudo ldapadd -Y EXTERNAL -H ldapi:/// -f {}
#安装HTTPD
yum -y install httpd 

#修改配置文件
vim /etc/httpd/conf/httpd.conf #AllowOverride all

#启动服务测试
systemctl start httpd
systemctl enable httpd
curl 127.0.0.1

#安装phpldapadmin
cat /etc/yum.repos.d/epel.repo 
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7Server/x86_64/
enabled=1
gpgcheck=0

yum install phpldapadmin

#修改配置文件
$servers->setValue('server','host','127.0.0.1');
$servers->setValue('server','port',389);
$servers->setValue('server','base',array('dc=my-domain,dc=com'));
$servers->setValue('login','auth_type','session');
$servers->setValue('login','attr','dn');

$servers->setValue('login','attr','dn'); #注释掉

#修改httpd配置文件
vim /etc/httpd/conf.d/phpldapadmin.conf 
Alias /phpldapadmin /usr/share/phpldapadmin/htdocs
Alias /ldapadmin /usr/share/phpldapadmin/htdocs

<Directory /usr/share/phpldapadmin/htdocs>
  <IfModule mod_authz_core.c>
    # Apache 2.4
    Require local
    Require ip 192.168.0
  </IfModule>
  <IfModule !mod_authz_core.c>
    # Apache 2.2
    Order Deny,Allow
    Deny from all
    Allow from 127.0.0.1
    Allow from ::1
  </IfModule>
</Directory>

#创建基础目录
vim /etc/openldap/base.ldif
dn: dc=my-domain,dc=com
o: ldap
objectclass: dcObject
objectclass: organization
dc: my-domain

#重启httpd服务
service restart httpd

#访问测试
http://192.168.0.41/phpldapadmin

创建OU组织用户数据

创建OU

选择Organisational unit 组织单元

输入OU名称

提交信息

查看结果

创建人员

选择OU->选择新建子条目

选择默认模板

选择inetorgperson

填写并提交信息

用户创建完成

Jenkins集成Ldap

先决条件
准备一个adminDN账号用于查询用户。 cn=Manager,dc=my-domain,dc=com
2.将访问Jenkins的用户放到一个OU中。 ou=jenkins,dc=my-domain,dc=com
3.提供ldap服务器地址。 ldap://192.168.0.41:389

Jenkins配置

安装ldap插件

全局安全配置


选择账号测试,出现一下信息集成完毕

Jenkins集成Gitlab SSO单点登录

Gitlab配置

应用管理->创建应用->配置重定向url

Jenkins配置

配置前备份config.xml文件,
如果jenkins前面有代理需要改一下upstream名称,因为这个名称会自动填充为redirect_url地址。

最后实现的效果是用户在gitlab登录之后,输入jenkins域名会直接进入jenkins。

WebHook集成

Jenkins配置

安装gitlab hook插件

选择一个项目,在构建触发器模块选择通过gitlab触发。生成token

Gitlab配置

进入项目-> 项目设置-> 集成

保存后测试连接

返回成功信息,此时可以查看jenkins项目是否正在building。

Jenkins集成SaltStack批量自动化发布

安装saltstack

saltstack原理详细可以参考saltstack官方文档
1.1 安装salt-master(jenkins)

yum -y install salt-master
service salt-master start
chkconfig salt-master on

1.2 安装salt-minion(应用发布机器)

yum -y install salt-minion
service salt-minion start
chkconfig salt-minion on

编辑/etc/salt/minion 文件填写对应的master地址

master: 192.168.0.41

在master节点上认证客户端

salt-key -L 
salt-key -a clientName

1.3 安装salt-api(Jenkins)

yum -y install salt-api
service salt-api start
chkconfig salt-api on

添加用于操作api的系统用户

useradd saltapi
passwd saltapi 

编辑/etc/salt/master

file_roots:    #允许使用salt发布文件
  base:
    - /srv/salt
rest_cherrypy:  #以下是saltapi配置
  port: 9000
  disable_ssl: True
  debug: True
external_auth:  
  pam:  
    saltapi:  
      - .*  
      - '@wheel'  
      - '@runner'
service salt-master restart 
service salt-api start 

1.4 测试

curl http://127.0.0.1:9000/login -d username='saltapi' -d password='123456' -d eauth='pam'

返回token则成功

集成Jenkins

2.1 测试salt(saltapi方式)
安装saltstack插件

Jenkinsfile实例

#!groovy

//构建参数
String targetHosts = "${env.targetHosts}"

//saltapi模板
def Salt(salthost,saltfunc,saltargs) {
result = salt(authtype: 'pam', 
            clientInterface: local( arguments: saltargs,
                                    function: saltfunc, 
                                    target: salthost, 
                                    targettype: 'list'),
            credentialsId: "f89abde3-49f0-4b75-917e-c4e49c483f4f", 
            servername: "http://0.0.0.0:9000")

println(result)
PrintMes(result,'blue')
return  result
}

node("master"){
stage("Deploy"){
    Salt("${targetHosts}","cmd.run","ls")
}
}

测试salt(cmd方式)

Jenkinsfile

node {
stage("Deploy"){
   sh "salt * test.ping"
}
}

构建测试

Jenkins制品库集成-Nexus

demo地址: https://github.com/zeyangli/springboot-helloworld.git

总体目标
开发人员提交代码,更新pom信息。jenkins读取pom文件中的信息,通过nexus插件上传到nexus。通过nexus参数获取最新的包下载地址。

项目配置
pom.xml文件
groupId: 业务名称简称
artifactId: 应用名称
version: 版本信息

<groupId>demo</groupId>
<artifactId>demo-devops-service</artifactId>
<version>4.0</version>

注: 没做一次更新都要更改version信息,因为release的maven仓库设置了不能同版本更新。

Nexus(create repo)

Jenkins(CI)

安装插件:Pipeline Utility Steps
安装插件:Nexus Artifact Uploader
设置scriptApproval: 允许Approval

node("master"){

    stage("Get Code"){
        checkout scm
    }

    stage("Build & Unit Test"){
        def mvnHome="/usr/local/apache-maven-3.6.0" 
        sh "${mvnHome}/bin/mvn clean install "

    }

    stage("Scan Code"){
        println("code scan")

    }

    stage("Push Nexus"){
        def pom = readMavenPom file: 'pom.xml'
        nexusArtifactUploader(artifacts: [[artifactId: "${pom.artifactId}", 
                                           classifier: '', 
                                           file: "./target/${pom.artifactId}-${pom.version}.${pom.packaging}", 
                                           type: "${pom.packaging}"]],
                              credentialsId: 'nexus-admin', 
                              groupId: "${pom.groupId}", 
                              nexusUrl: '192.168.0.44:8081', 
                              nexusVersion: 'nexus3', 
                              protocol: 'http', 
                              repository: "${pom.groupId}", 
                              version: "${pom.version}")

    }

    stage("To Email "){

    }
}

Jenkins (CD)

安装插件: Maven Artifact ChoiceListProvider (Nexus)

构建

Jenkins集成禅道

总体目标
在禅道中,看板上的任务完成或者切换到某个指定的状态,触发Jenkins构建。

Jenkins配置

设置项目参数化构建

禅道系统配置

禅道系统版本

添加webhook

配置webhook

测试集成

更改任务状态

Jenkins日志

总结
在具体的实践中可以通过上图jenkins获取的参数进行逻辑判断,限制指定的状态构建。

Jenkins集成制品库-Artifactory

Jenkins集成制品库-Artifactory

赞(1) 打赏
未经允许不得转载:陈桂林博客 » 第四章 Jenkins工具集成

大佬们的评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

全新“一站式”建站,高质量、高售后的一条龙服务

橙子建站.极速智能建站8折购买虚拟主机

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏