构建工具集成
集成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