centos7下Gitlab+Jenkins部署持续集成CI环境
1.基本环境
主机:win10,IP:192.168.0.111;部署机器centos7,IP:192.168.0.65;
内存推荐到8G,实测需要6G以上,以免出现内存不够用而报错。
2.安装gitlab需要的组件
[root@localhost ~]# yum -y install curl policycoreutils-python openssh-server openssh-clients postfix wget vim lrzsz
启动邮件功能
[root@localhost ~]# systemctl restart postfix
[root@localhost ~]# systemctl enable postfix
开启防火墙的http服务
[root@localhost ~]# firewall-cmd --permanent --add-service=http
success
[root@localhost ~]# firewall-cmd --reload
success
3.安装gitlab
我们安装gitlab-ce版,可yum在线安装yum -y install gitlab-ce,不过速度比较慢,也可以下载rpm包安装。
[root@localhost ~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-11.11.1-ce.0.el7.x86_64.rpm
[root@localhost ~]# rpm -ivh gitlab-ce-11.11.1-ce.0.el7.x86_64.rpm
4.配置gitlab域名
[root@localhost ~]# vim /etc/gitlab/gitlab.rb
改:13 external_url 'http://gitlab.example.com'
为:13 external_url 'http://192.168.0.65'
公网则配置公网域名即可
5.初始化gitlab
[root@localhost ~]# gitlab-ctl reconfigure #时间比较长,出现如下信息则OK
Running handlers:
Running handlers complete
Chef Client finished, 481/1275 resources updated in 05 minutes 02 seconds
gitlab Reconfigured!
[root@localhost ~]# gitlab-ctl status #查看gitlab状态
run: alertmanager: (pid 31394) 188s; run: log: (pid 31014) 232s
run: gitaly: (pid 31298) 192s; run: log: (pid 20450) 385s
run: gitlab-monitor: (pid 31297) 192s; run: log: (pid 30781) 250s
run: gitlab-workhorse: (pid 31271) 193s; run: log: (pid 30467) 285s
run: logrotate: (pid 30598) 270s; run: log: (pid 30618) 267s
run: nginx: (pid 30535) 281s; run: log: (pid 30554) 277s
run: node-exporter: (pid 31285) 193s; run: log: (pid 30708) 259s
run: postgres-exporter: (pid 31412) 188s; run: log: (pid 31131) 226s
run: postgresql: (pid 20668) 375s; run: log: (pid 20723) 372s
run: prometheus: (pid 31339) 191s; run: log: (pid 30919) 238s
run: redis: (pid 20318) 392s; run: log: (pid 20339) 390s
run: redis-exporter: (pid 31326) 192s; run: log: (pid 30841) 244s
run: sidekiq: (pid 30364) 293s; run: log: (pid 30385) 290s
run: unicorn: (pid 30274) 299s; run: log: (pid 30310) 296s
6.登录gitlab
http://192.168.0.65
第一次登录 gitlab,需要为 root 用户设置密码,root 用户也是 gitlab 的超级管理员,这里设置12345678(自己设置)
设置完成密码后继续登录
设置gitlab开机启动启动
[root@localhost ~]# systemctl enable gitlab-runsvdir
[root@localhost ~]# systemctl restart gitlab-runsvdir
至此,gitlab环境搞定
7.管理gitlab
关闭 gitlab: # gitlab-ctl stop
启劢 gitlab: # gitlab-ctl start
重启 gitlab: # gitlab-ctl restart
gitlab 主配置文件:/etc/gitlab/gitlab.rb //可以自定义一些邮件服务等
日志地址:/var/log/gitlab/ // 对应各服务
服务地址:/var/opt/gitlab/ // 对应各服务的主目录
仓库地址:/var/opt/gitlab/git-data //记录项目仓库等提交信息
8.注册新用户和关闭 gitlab 注册功能
默认情况下是可以注册新账号的,但为了安全管理通常关闭了注册功能
关闭步骤如:
点 Admin area -》 setting -》 取消 sign-up enabled 标签前对勾,最后点击页面下方的Save Changes。再次推出刷新登录的时候发现注册功能已经被关闭。
9.gitlab使用
9.1新建项目
新建项目前,先创建项目所在的组(也就是说这个项目文件是保存在哪个组里)
选择 Admin Area-----> Groups——New Group
填写组名称和描述,根据需要设置群组看代码的权限,这里选择Internal(登录可见)
点击页面下方的Create Group创建组
9.2新建项目
选择 Admin Area-----> Projects——New Project
9.3新建用户
选择 Admin Area-----> Users——New User
选择 Create user,基本资料可以丌用写
其中 Name 为对方的中文名,Username 是登录用户名,一般可以设置成邮箱的前缀,Email 为公司邮箱。
用户邮箱会收到修改密码连接,进入连接设置密码即可登录
也可由管理员设置用户初始密码
Admin Area---Users---Edit
用户使用初始密码进行登录,根据页面提示设置自有密码即可。
配置 STMP 邮件发送服务 这个方法更可靠,但是有时也会收丌到邮件
编辑/etc/gitlab/gitlab.rb 文件,配置 STMP 邮件发送服务。前提你的邮件已经开通 stmp/pop3收发功能
[root@localhost ~]# vim /etc/gitlab/gitlab.rb #在 430 行插入
432 gitlab_rails['smtp_enable'] = true
433 gitlab_rails['smtp_address'] = "smtp.163.com"
434 gitlab_rails['smtp_port'] = 25
435 gitlab_rails['smtp_user_name'] = "imzhuo@163.com"
436 gitlab_rails['smtp_password'] = "自己邮箱的密码"
437 gitlab_rails['smtp_authentication'] = "login"
438 gitlab_rails['smtp_enable_starttls_auto'] = true
439 gitlab_rails['smtp_tls'] = true
440 gitlab_rails['gitlab_email_from'] = 'imzhuo@163.com'
9.4将用户关联到组
将用户zhuo添加到 dxd 组中,身份选择"主程序员",这样后期就可以提交代码了。
选择“开发人员”会没有权限提交代码
Admin Area---Groups---dxd
9.5给项目添加一个文件
页面下方commit提交
10.安装git客户端并使用gitlab
[root@localhost ~]# yum -y install git
克隆gitlab代码
代码地址可从gitlab查询到,这里使用http模式
代码地址:http://192.168.0.65/dxd/dxd-front.git
[root@localhost ~]# git clone http://192.168.0.65/dxd/dxd-front.git #克隆代码
正克隆到 'dxd-front'...
Username for 'http://192.168.0.65': zhuo #这里会提示输入账号
Password for 'http://zhuo@192.168.0.65': #这里会提示输入密码
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
[root@localhost ~]# cat dxd-front/index.html #查看克隆下来的代码
前台代码aaa
11.运行git前配置
一般在新的系统上,我们都需要先配置下自己的 Git 工作环境。配置工作只需一次,以后升级时还会沿用现在的配置。
第一个要配置的是你个人的用户名称和电子邮件地址。这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历叱记录。
git 运行的环境变量有点像.bashrc,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下两个的地方:
11.1 ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global选项,读写的就是这个文件。
设置用户信息
[root@localhost ~]# git config --global user.name "zhuo"
[root@localhost ~]# git config --global user.email "imzhuo@163.com"
[root@localhost ~]# cat ~/.gitconfig
[user]name = zhuoemail = imzhuo@163.com
11.2 当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖~/.gitconfig 中的同名变量。
如果要在某个特定的项目中使用其他名字戒者邮件地址,先迚到项目上下,然后只要去掉 --global 选项重新配置即可。 最后配置的用户和邮件地址会保存在当前项目的 .git/config 文件里。
配置项目下的环境变量
[root@localhost ~]# cd dxd-front/
[root@localhost dxd-front]# cat ./.git/config
[core]repositoryformatversion = 0filemode = truebare = falselogallrefupdates = true
[remote "origin"]url = http://192.168.0.65/dxd/dxd-front.gitfetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]remote = originmerge = refs/heads/master
[root@localhost dxd-front]#
[root@localhost dxd-front]# git config user.name "zhuo"
[root@localhost dxd-front]# git config user.email "imzhuo@163.com"
[root@localhost dxd-front]# cat ./.git/config #查看name和email配置情况
[core]repositoryformatversion = 0filemode = truebare = falselogallrefupdates = true
[remote "origin"]url = http://192.168.0.65/dxd/dxd-front.gitfetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]remote = originmerge = refs/heads/master
[user]name = zhuoemail = imzhuo@163.com
11.3 git常用命令
git config --global user.name “name“ #设置全局用户名
git config --global user.email mail #设置全局邮箱
git config --global --list #列出用户全局设置
git add index.html #添加文件到暂存区
git commit -m “描述内容“ #提交文件到工作区
git status #查看工作区的状态
git push #提交代码到 git 服务器上
git pull #获取代码到本地
git log #查看操作日志
vim .gitignore #定义忽略文件
git reset --hard HEAD^ #git 版本回滚, HEAD 为当前版本,加一个^为上一个,^^为上上一个版本
git reflog # #获取每次提交的 ID,可以使用--hard 根据提交的 ID 迚行版本回退
git reset --hard 4c83906 #回退到指定 id 的版本
git branch #查看当前所处的分支
git checkout #切换到指定分支戒标签
11.4提交和回滚代码
[root@localhost ~]# cd dxd-front/
[root@localhost dxd-front]# echo "aaa.dxd.com" >> index.html #修改index.html
[root@localhost dxd-front]# git add index.html #添加index.html到暂存区
[root@localhost dxd-front]# git commit -m "add aaa.dxd.com" #提交文件到工作区
[master 77890e6] add aaa.dxd.com1 file changed, 1 insertion(+), 1 deletion(-)
[root@localhost dxd-front]# git push #提交代码到gitlab服务器
warning: push.default 未设置,它的默认值将会在 Git 2.0 由 'matching'
修改为 'simple'。若要不再显示本信息并在其默认值改变后维持当前使用习惯,
进行如下设置:git config --global push.default matching若要不再显示本信息并从现在开始采用新的使用习惯,设置:git config --global push.default simple #提示设置默认习惯,可执行此条命令即可完成设置。参见 'git help config' 并查找 'push.default' 以获取更多信息。
('simple' 模式由 Git 1.7.11 版本引入。如果您有时要使用老版本的 Git,
为保持兼容,请用 'current' 代替 'simple' 模式)Username for 'http://192.168.0.65': zhuo #提示输入账号
Password for 'http://zhuo@192.168.0.65': #提示输入密码
Counting objects: 5, done.
Writing objects: 100% (3/3), 260 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To http://192.168.0.65/dxd/dxd-front.git4c83906..77890e6 master -> master
[root@localhost dxd-front]# cat index.html #查看代码内容
前台代码aaaaaa.dxd.com
[root@localhost dxd-front]# rm -rf index.html #模拟本地修改错误或删除文件
[root@localhost dxd-front]# ls #index.html文件已经被删除
[root@localhost dxd-front]# git reset --hard HEAD #回滚到服务器最新代码
HEAD 现在位于 77890e6 add aaa.dxd.com
[root@localhost dxd-front]# cat index.html #查看
前台代码aaaaaa.dxd.com
[root@localhost dxd-front]# git reflog #查看版本ID
77890e6 HEAD@{0}: commit: add aaa.dxd.com
4c83906 HEAD@{1}: clone: from http://192.168.0.65/dxd/dxd-front.git
[root@localhost dxd-front]# git reset --hard 4c83906 #回滚到指定ID版本
HEAD 现在位于 4c83906 Add new file
[root@localhost dxd-front]# cat index.html
前台代码aaa
11.5 暂存区、工作区及分支
工作区就是编辑文件的目录区域,需要将工作区的修改好的文件 add 到暂存区才能提交到 git 服务器,在工作区有多个文件的时候可以将一个及多个文件添加至暂存区,再提交到 git 服务器
创建分支并提交到服务器
[root@localhost dxd-front]# git branch bbs #创建分支
[root@localhost dxd-front]# git checkout bbs #切换到分支,可做代码管理
切换到分支 'bbs'
[root@localhost dxd-front]# git branch #查看当前所处的分支
* bbsmaster
[root@localhost dxd-front]# echo aa.cn>a.txt #代码更新
[root@localhost dxd-front]# git add a.txt #添加到暂存区
[root@localhost dxd-front]# git commit -m "add a.txt" #提交到工作区
[bbs 0591f78] add a.txt1 file changed, 1 insertion(+)create mode 100644 a.txt
[root@localhost dxd-front]# git push -u origin bbs #服务器创建分支并,上传工作区更新代码到gitlab服务器
Username for 'http://192.168.0.65': zhuo
Password for 'http://zhuo@192.168.0.65':
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 269 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote:
remote: To create a merge request for bbs, visit:
remote: http://192.168.0.65/dxd/dxd-front/merge_requests/new?merge_request%5Bsource_branch%5D=bbs
remote:
To http://192.168.0.65/dxd/dxd-front.git* [new branch] bbs -> bbs
分支 bbs 设置为跟踪来自 origin 的远程分支 bbs。
gitlab服务器页面已经可以看见分支
11.6合并分支内容到master
[root@localhost dxd-front]# git checkout master
[root@localhost dxd-front]# git merge bbs
[root@localhost dxd-front]# git push
12.搭建Jenkins持续集成
12.1下载安装jdk
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
上传到服务器,安装jdk
[root@localhost ~]# ls
anaconda-ks.cfg dxd-front gitlab-ce-11.11.1-ce.0.el7.x86_64.rpm jdk-8u212-linux-x64.rpm
[root@localhost ~]# rpm -ivh jdk-8u212-linux-x64.rpm
12.2下载安装Jenkins
https://pkg.jenkins.io/redhat/
下方有很多更新版本的Jenkins,可以点击下载后安装
也可以在线安装
[root@localhost ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo #安装源
[root@localhost ~]# rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
[root@localhost ~]# yum -y install jenkins
12.3设置Jenkins页面访问端口及用户
[root@localhost ~]# vim /etc/sysconfig/jenkins
改:29 JENKINS_USER="jenkins"
为:29 JENKINS_USER="root" #以 root
改:56 JENKINS_PORT="8080"
为:56 JENKINS_PORT="8888"
[root@localhost ~]# systemctl restart jenkins
[root@localhost ~]# systemctl enable jenkins
12.4访问Jenkins页面并安装插件
http://192.168.0.65:8888
如果访问被提示防火墙受阻,则关闭防火墙或者开启防火墙端口
[root@localhost ~]# firewall-cmd --permanent --add-port=8888/tcp
success
[root@localhost ~]# firewall-cmd --reload
success
根据页面提示查看初始密码
[root@localhost ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
4f8f5c9d814c43eebeb217ff7f225728
安装默认推荐社区插件
如果出现如下情况
个别插件红叉了,安装失败,点击右下角Retry重试,多连接几次通常能安装OK。
要是确实不行,还提示你网络不行,需要做http代理,才能安装,那找一个HTTP代理IP,在系统管理->插件管理->高级->代理设置里配置好代理ip/端口,在可选插件里找到需要安装的插件,直接安装,通常也能搞定。
如果网络不是很OK,安装不了,则可以找一个可以联网的机器,下载插件
http://updates.jenkins-ci.org/download/plugins
下载好,然后再从本地上传
系统管理->插件管理->高级->选择文件,上传后,重启Jenkins安装已经上传的插件。
也可以直接把一台安装好 jenkins 插件服务器的/var/lib/jenkins/plugins 目录下的文件复制到新的 jenkins 中重启Jenkins即可
[root@localhost ~]# cd /var/lib/jenkins
[root@localhost jenkins]# tar czvf plugins.tar.gz plugins/ #把安装好的插件打包
将 xuegod64 上的 plugins.tar.gz 上传到需要安装Jenkins新服务器 的/root/目录下
[root@localhost ~]# rm -rf /var/lib/jenkins/plugins
[root@localhost ~]# tar -zxvf /root/plugins.tar.gz -C /var/lib/jenkins/ #把插件解出来重启Jenkins,不重启插件不生效
至此,gitlab+Jenkins持续集成CI环境基本完成,自动发布请关注后续章节
转载于:https://blog.51cto.com/11573159/2406532
相关文章:

VIM7.3添加中文帮助文档
安装中文帮助文档之前首先执行下列操作:在home目录下列新建文件夹 :.vim ------------------>.vim是一个隐藏文件,不要漏了 “.”.vim/plugin ---------->.vim目录下的plugin文件夹.vim/doc ------------->.vim目录下的doc文件夹.v…

安卓java代码标签_Android实现动态添加标签及其点击事件
在做Android开发的时候,会遇到动态添加标签让用户选择的功能,所以自己写了个例子,运行效果图如下。标签可以左右滑动进行选择,点击的时候,会弹出toast提示选择或者取消选择了哪个标签。通过动态添加TextView作为标签&a…

Windows 7 SDK Fails to Install with Return Code 5100 (GRMSDK_EN_DVD.iso)
来源:http://support.microsoft.com/kb/2717426/de 不对全文做翻译了,总结一下: 原因:电脑上已经安装了新版本的Visual C 2010 Redistributable运行库 解决办法:卸载Visual C 2010 Redistributable,然后再安…

Android动画效果translate、scale、alpha、rotate详解
动画类型Android的animation由四种类型组成XML中 alpha渐变透明度动画效果scale渐变尺寸伸缩动画效果translate画面转换位置移动动画效果rotate画面转移旋转动画效果JavaCode中 AlphaAnimation渐变透明度动画效果ScaleAnimation渐变尺寸伸缩动画效果TranslateAnimation画面转换…

对javscript中Object.defineProperty的理解
自己在使用vue的过程中经常会用到听到数据双向绑定这个词,而且我们还可以直接通过调用this.msg(this表示vue实例),来获取data上的数据,以前一直不太明白为什么可以这样获取,直到有一天我在论坛里看到了寻找海蓝96这位大佬写的文章,才明白其原…

java kafka 集群消费_kafka集群搭建和使用Java写kafka生产者消费者
转自:http://chengjianxiaoxue.iteye.com/blog/21904881 kafka集群搭建1.zookeeper集群 搭建在110, 111,1122.kafka使用3个节点110, 111,112修改配置文件config/server.propertiesbroker.id110host.name192.168.1.110log.dirs/usr/local/kafk…

Java之替换“\n”符号
开发平台:Android 4.1.2 在去除字符串中的换行符(\n)的时候,写成str.replace("\\n", "")才能正确执行。str.replace("\n","") ,str.replaceAll("\\n",""),str.repla…

ThinkPHP项目笔记之登录,注册,安全退出篇
1.先说注册 a.准备好注册页面,register.html,当然一般有,姓名,邮箱,地址等常用的。 b."不要相信用户提交的一切数据",安全,安全是第一位的。所以要做判断,客户端要做基本判断,为了防止…

c语言第八次作业
1.选择法排序。输入一个正整数n(1<n<10),再输入n个整数,将他们从大到小排序后输出。试写出相应程序。 #include<stdio.h>int main (void){int i,index,k,n,t;int a[10];printf("输入数据的个数n:");scanf("%d",&n);…

java线程池的工作原理_Java 线程池的介绍以及工作原理
在什么情况下使用线程池?1.单个任务处理的时间比较短2.将需处理的任务的数量大使用线程池的好处:1. 降低资源消耗: 通过重复利用已创建的线程降低线程创建和销毁造成的消耗。2. 提高响应速度: 当任务到达时,…

.NET 程序设计实验 含记事本通讯录代码
实验一 .NET 程序设计基本流程 【实验内容】 一、控制台、Windows 应用程序、ASP.NET 程序开发流程 1、熟悉开发平台 2、分别开发控制台、Windows 应用程序、ASP.NET 程序下显示“Hello world!”的应用程序, 掌握新建、基本输入输出、程序流程、程序调试…

复制构造函数(拷贝构造函数)
也许很多C的初学者都知道什么是构造函数,但是对复制构造函数(copy constructor)却还很陌生。对于我来说,在写代码的时候能用得上复制构造函数的机会并不多,不过这并不说明复制构造函数没什么用,其实复制构造…
VMware上实现LVS负载均衡(NAT)
本文LVS的实现方式採用NAT模式。关于NAT的拓扑图请參照我的上一篇文章。本文纯粹实验。NAT在生产环境中不推荐使用。原因是Load Balancereasy成为瓶颈! 1.VMware9上安装CentOS-6.5-x86_64-minimal版 2.安装完毕后将其hostname设置为LVS-master hostname LVS-master …

java se13安装教程_在Linux发行版中安装Java 13/OpenJDK 13的方法
本文介绍在Linux发行版Ubuntu 18.04/16.04、Debian 10/9、CentOS 7/8、Fedora 31/30/29中安装Java 13/OpenJDK 13、Java SE Development Kit 13的方法。在Ubuntu 18.04/16.04、Debian 10/9、CentOS 7/8、Fedora 31/30/29中安装OpenJDK 13访问JDK 13版本页面以下载最新的版本&am…

Java api 入门教程 之 JAVA的IO处理
IO是输入和输出的简称,在实际的使用时,输入和输出是有方向的。就像现实中两个人之间借钱一样,例如A借钱给B,相对于A来说是借出,而相对于B来说则是借入。所以在程序中提到输入和输出时,也需要区分清楚是相对…

如何编辑PDF文件,PDF编辑器如何使用
如何编辑PDF呢?其实大多数人都不知道该如何下手,部分人会选择将PDF文件转换成Word然后进行编辑,其实这种方法比较麻烦,大大拉低了我们的工作效率。如果想要提高工作效率更加快速的编辑PDF文件,就可以选择迅捷PDF编辑器…

hdu 4366 Card Collector (容斥原理)
http://acm.hdu.edu.cn/showproblem.php?pid4336题意:有 n 张卡片 ,每张卡片出现的 概率 是 pi 每包至多有 一张卡片 ,也有可能没有 卡片 。求 需要买多少包 才能集齐 n 张卡片 ,求包数的 期望 。题解 : 容斥原理…

java语言二维数组转置_java实现二维数组转置的方法示例
本文实例讲述了java实现二维数组转置的方法。分享给大家供大家参考,具体如下:这里在文件中创建Test2、Exchange、Out三个类在Exchange类中编写exchange()方法,在方法中创建两个数组arraryA、arraryB,arraryB[j][i]arraryA[i][j]实…

使用Apache cxf 和Spring在Tomcat下发布Webservice指南
转载 http://blog.csdn.net/zhangzhaokun/article/details/4750021 最近学习了如何使用apache cxf和Spring发布webservice,虽然网上的资料很多,但是没有一个文档可以让读者按照操作步骤来实现完整的发布流程,都需要多篇文件杂合在一起&#x…

srcache_nginx redis 构建缓存系统应用一例
为什么80%的码农都做不了架构师?>>> srcache_nginx模块相关参数介绍,可以参见 《memc_nginxsrcache_nginxmemcached构建透明的动态页面缓存》。 redis是一种高效的key-value存储。 下面举一例应用,看配置: upstream r…

mysql 删除 修改密码_Mysql数据库root密码忘记了,如何在不删除Mysql的情况下修改密码...
1.cmd中使用 net stop mysql 命令停掉正在运行的mysql 数据库。2.在本地中复制Mysql数据库的安装路径一直到bin路径下。3.到cmd执行 "pushd 步骤2复制路径" 的命令,就会到Mysql数据库安装的bin路径下。4.紧接著执行 mysqld --skip-grant-tables 命令…

通用权限管理系统组件 (GPM - General Permissions Manager) 权限管理以前我们都是自己开发,可是到下一个系统又不适用,又改,加上人员流动大,管理很混乱...
为什么80%的码农都做不了架构师?>>> 权限管理以前我们都是自己开发,可是到下一个系统又不适用,又改,加上人员流动大,管理很混乱 Ψ吉日嘎拉 采用通用权限管理系统,这些烦恼就少了很多了&#x…

【小白的CFD之旅】16 流程
那天听了小牛师兄关于CFD应用的四种境界的说法后,小白发现自己连第一种境界都算不上,自己对于CFD还只是停留在做了少数几个案例的基础上,可以说是对其一无所知。不过小白不是那种遇到挫折就退缩的人,他决定沿着黄师姐的方法从软件…

XWiki 4.3 正式版发布
XWiki 4.3 正式版发布了,工作空间、扩展管理器、分发向导和 REST API 做了很多改进,改进了翻译和新的体验的 Solr 搜索。 XWiki是一个由Java编写的基于LGPL协议发布的开源wiki和应用平台。它的开发平台特性允许创建协作式Web应用,同时也提供了…

新建异常并处理java_java – 动态创建异常的工厂模式
我创建了Exception xml并动态创建并抛出异常.com.package.CheckedExceptionChecked Exception Messagecom.package.UnCheckedExceptionUnChecked Exception Message我根据异常键使用反射动态创建异常对象.public static void throwException(final String key) throws CheckedE…

React navtive
http://www.linuxidc.com/Linux/2015-09/123239.htm 转载于:https://www.cnblogs.com/chenzhenfj/p/5203685.html

c# Pdf 转换图片
1,引入 dll itextsharp.dll、 PDFView.dll、 把 gsdll32.dll 拷贝在项目 bin目录下 ,注意:它不能 直接引用 直接上代码: 1 /// <summary>2 /// 将PDF 相应的页转换为图片3 /// </summary>4 …

Entity Framework 约定
约定,类似于接口,是一个规范和规则,使用Code First 定义约定来配置模型和规则。在这里约定只是记本规则,我们可以通过Data Annotaion或者Fluent API来进一步配置模型。约定的形式有如下几种: 类型发现约定主键约定关系…

java用构造方法定义book类_JAVA基础学习之路(三)类定义及构造方法
类的定义及使用一,类的定义classBook {//定义一个类intprice;//定义一个属性intnum;public static int getMonney(int price, intnum) {//定义一个方法return price*num;}}public classtest2 {public static voidmain(String args[]) {Book monney newBook();//声明…

Linux下如何查看文档的内容
查看文档内容的命令有:cat tac head nl tail more less odcat命令显示文档的全部内容,当文档较大的时候只显示最后的部分,所以cat命令适合查看内容较少的文档。可加选项-n显示行数(此时空白行也会显示行号)。-b空白行则不显示行号。tac与cat显…