CI ,CD是什么?
CI,CD就是持续集成,持续交付,持续部署
的简写,开发团队通过软件交付流水线(Pipeline)实现自动化,以缩短交付周期,大多数团队都有自动化流程来检查代码并部署到新环境。
持续集成:将各个开发人员的工作集合到一个代码仓库中。通常,每天都要进行几次,主要目的是尽早发现集成错误,使团队更加紧密结合,更好地协作。
持续交付:目的是最小化部署或释放过程中固有的摩擦。它的实现通常能够将构建部署的每个步骤自动化,以便任何时刻能够安全地完成代码发布。
持续部署:一种更高程度的自动化,无论何时对代码进行重大更改,都会自动进行构建和部署。
IP | 服务 |
---|---|
10.10.110.1 | 后端服务器 |
10.10.110.2 | Gitlab |
10.10.110.3 | Jenkins,Git,Maven,Jdk |
清华源镜像站
gitlab安装使用文档
[xiaobai@cicd] yum -y install curl wget policycoreutils openssh-server openssh-clients postfix policycoreutils-python
[xiaobai@cicd] systemctl start sshd postfix
[xiaobai@cicd] systemctl enable sshd postfix
#配置yum源下载gitlab,也可以wget下载
[xiaobai@cicd] vim /etc/yum.repos.d/gitlab.repo
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1
#下载gitlab
[xiaobai@cicd] yum makecache
[xiaobai@cicd] yum -y install gitlab-ce
#修改gitlab配置文件,修改的内容,配置文件里有的注释打开修改,没有的添加
[xiaobai@cicd] vim /etc/gitlab/gitlab.rb
external_url 'http://ip:端口' #这里写IP或域名,默认80,前面的http://不要删
gitlab_rails['time_zone'] = 'Asia/Shanghai'
git_data_dirs({
"default" => {
"path" => "/mnt/nfs-01/git-data" #数据路径,可以更改
}
})
gitlab_rails['gitlab_shell_ssh_port'] = 22
#更改完后加载gitlab配置
[xiaobai@cicd] gitlab-ctl reconfigure
#查看状态
[xiaobai@cicd] gitlab-ctl status
#我这里启动后,这个grafana服务始终是关闭的,用下面的命令查看日志
[xiaobai@cicd] gitlab-ctl tail
#查看日志发现默认端口3000被占用了,重新编写配置文件
external_url 'http://ip' #不写端口,只写ip
nginx['listen_port'] = 9091 #端口号写9090以后的
gitlab_rails['time_zone'] = 'Asia/Shanghai'
git_data_dirs({
"default" => {
"path" => "/mnt/nfs-01/git-data" #数据路径,可以更改
}
})
grafana['http_port'] = 9095 #端口号写9090以后的
#更改完后加载gitlab配置
[xiaobai@cicd] gitlab-ctl reconfigure
#再次查看发现都启动成功没有问题
[xiaobai@cicd] gitlab-ctl status
启动成功,访问gitlab,如果是启动时没有问题的就输入external_url里写的IP+端口。启动有问题,配置了nginx[‘listen_port’]的就写external_url中的IP加nginx[‘listen_port’]的端口
点击Register后再次自动跳转回登录页面,使用刚才创建的账号登录,登录时报下面错误,去用管理员账号授权就OK了
Your account is pending approval from your GitLab administrator and hence blocked. Please contact your GitLab administrator if you think this is an error.
管理员密码在/etc/gitlab/initial_root_password
中,也可以在/etc/gitlab/gitlab.rb
中自行设置gitlab_rails[‘initial_root_password’]。注意,一但更改/etc/gitlab/gitlab.rb
这个配置文件,就要使用gitlab-ctl reconfigure这个命名使其生效
如果你的gitlab总是自动关闭,执行下面语句
#执行此操作就好了
[xiaobai@cicd] /opt/gitlab/embedded/bin/runsvdir-start
喜欢自己找包下载的小伙伴来这里
Java8下载地址
Maven下载地址
不喜欢自己找包的小伙伴直接来提取就好了
jdk1.8安装包提取码:LWXB
maven3.6.3安装包提取码:LWXB
#安装的java8以上的版本
[xiaobai@cicd] tar xzvf jdk-8u111-linux-x64.tar.gz -C /usr/local
[xiaobai@cicd] cd /usr/local/
[xiaobai@cicd local] mv jdk1.8.0_111 java
#配置java环境变量
[xiaobai@cicd local] vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/local/java
CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$PATH:$JAVA_HOME/bin
[xiaobai@cicd local] source /etc/profile
[xiaobai@cicd local] java -version
openjdk version "1.8.0_272"
OpenJDK Runtime Environment (build 1.8.0_272-b10)
OpenJDK 64-Bit Server VM (build 25.272-b10, mixed mode)
#安装Maven
[xiaobai@cicd local] cd java
[xiaobai@cicd java] wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
[xiaobai@cicd java] tar xzvf apache-maven-3.6.3-bin.tar.gz
[xiaobai@cicd java] mv apache-maven-3.6.3 maven
#配置Maven环境变量
[xiaobai@cicd java] vim /etc/profile.d/maven.sh
export JAVA_HOME=/usr/local/java
export MAVEN_HOME=/usr/local/java/maven
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
[xiaobai@cicd java] cd
[xiaobai@cicd] source /etc/profile
[xiaobai@cicd] mvn -v
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /data/java/maven
Java version: 1.8.0_111, vendor: Oracle Corporation, runtime: /data/java/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "x.xx.x-xxx.xx.x.elx_x.xxx_xx", arch: "amdxx", family: "unix"
#外网环境下
[xiaobai@cicd] wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
ERROR: cannot verify pkg.jenkins.io's certificate, issued by ‘/C=US/O=Let's Encrypt/CN=R3’:
Issued certificate has expired.
To connect to pkg.jenkins.io insecurely, use --no-check-certificate.
#如果报这样的错误就在wget后面加上--no-check-certificate再执行一遍就好
[xiaobai@cicd] rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
[xiaobai@cicd] yum install -y jenkins
#jenkins的配置文件 /etc/sysconfig/jenkins
#需要修改的修改配置文件,然后后加载daemon
[xiaobai@cicd] systemctl daemon-reload
[xiaobai@cicd] systemctl start jenkins
[xiaobai@cicd] systemctl status jenkins
Jan 07 09:43:58 miguan1 jenkins[36067]: Starting Jenkins File "/usr/bin/java" is not executable.
Jan 07 09:43:58 miguan1 jenkins[36067]: [FAILED]
Jan 07 09:43:58 miguan1 systemd[1]: jenkins.service: control process exited, code=exited status=1
Jan 07 09:43:58 miguan1 systemd[1]: Failed to start LSB: Jenkins Automation Server.
-- Subject: Unit jenkins.service has failed
#启动jenkins报上述错误,去到/etc/init.d/jenkins文件里配置自己的java的目录
candidates="
......
/usr/local/java/bin/java
"
#在candidates中的最后添加自己的java路径就好
内网环境下,拉取不到jenkins.repo的小伙伴不要急,执行如下操作
jenkins.war包下载地址,在有外网的地方下载下来war包上传到内网的机器上。注意,下载下来的后缀可能是zip结尾的,传到服务器上要改成war结尾的启动
[xiaobai@cicd] mv jenkins.zip jenkins.war
[xiaobai@cicd] java -jar jenkins.war --httpPort=8080 #启动
#这个命令启动的时候会有一串密码输出出来,记住这串密码,这是你登录jenkins的密码
输入IP+端口访问Jenkins页面
系统命令启动的jenkins密码如图,使用如下命令找到密码。war包启动的jenkins密码则在启动时输出的一串字符串里
[xiaobai@cicd] cat /var/lib/jenkins/secrets/initialAdminPassword
选择安装推荐的插件(后续可以拓展,安装完成后会让你创建一个新用户,也可以继续使用admin登录,创建好后就进入了Jenkins,安装插件大部分人会失败,先不用管它,可以自己下载到本地插件放到~/.jenkins
目录下,这个目录只不包括war包启动的用户,也可以进入Jenkins后更换下载插件的站点,具体去系统管理,插件管理,高级最下面有个升级站点)
通往Jenkins自定义安装插件的时空隧道
#系统命令启动的用户可以直接用如下命令更新Jenkins版本
[xiaobai@cicd] systemctl stop jenkins
[xiaobai@cicd] yum -y update jenkins
[xiaobai@cicd] systemctl start jenkins
#也可以自己下载war上传到Jenkins的目录下重启即可
Git要和Jenkins在同一台机器上,Jenkins要去Gitlab上用Git拉取项目
git2.18安装包提取码:LWXB
[xiaobai@cicd] wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.18.0.tar.gz
[xiaobai@cicd] yum groupinstall "Development Tools"
[xiaobai@cicd] yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker openssh-clients
[xiaobai@cicd] tar xzvf git-2.18.0.tar.gz -C /usr/local
[xiaobai@cicd] mv /usr/local/git-2.18.0/ /usr/local/git
[xiaobai@cicd] cd /usr/local/git
[xiaobai@cicd git] make prefix=/usr/local/git all
[xiaobai@cicd git] make prefix=/usr/local/git install
[xiaobai@cicd git] vim /etc/profile.d/git.sh
export GIT_HOME=/usr/local/git
export PATH=$PATH:$GIT_HOME/bin
[xiaobai@cicd git] source /etc/profile
[xiaobai@cicd git] git --version
git version 2.18.4
#如果git --version出来的版本不是2.18.4的或你安装的版本,那说明你之前有安装过git,卸载之前的就可以了,也可以使用之前的版本
#卸载如下
[xiaobai@cicd git] yum -y remove git
[xiaobai@cicd git] source /etc/profile
[xiaobai@cicd git] git --version
git version 2.18.4
上面的jdk,git,maven都是在服务器上刚刚自己配的,不要在自动安装那一行打对钩,自己配上刚刚在服务器上的路径就好
配置后不要忘记点应用保存,不然就是徒劳一场
有人会问当初安装Jenkins时不是下载过一些插件了吗?别急,Jenkins的插件有很多的,安装时下载的只是一些基础的插件,接下来安装的才是我们使用自动化发布的一些必要插件。
在可选插件里搜索要安装的插件
安装完插件重启Jenkins生效哦
通往Jenkins自定义安装插件的时空隧道
到Jenkins服务器上,把用户的公钥传给后端服务器
分割线
配置Gitlab的免密登录
#在jenkins机器上创建秘钥,把公钥拷给gitlab
[xiaobai@cicd] ssh-keygen -t rsa
[xiaobai@cicd] cat .ssh/id_rsa.pub
刚刚的token配置好像失效了,不知道为什么,还是乖乖配置ssh吧
Jenkins的项目地址就是你创建test项目的IP+端口+路径
如果你不知到地址,就看配置test项目时浏览器的Jenkins的地址栏里