持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。
通俗的讲,持续集成就是利用Jenkins、Docker、Gitlab等自动化工具,按照一定规则和流程,代替人工实现代码检测,构建等操作,加快项目迭代。
具体安装配置步骤如下:
Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)。
这里安装免费版,安装方法可参考 https://docs.docker.com/install/linux/docker-ce/centos/#install-docker-ce
1、安装所需的包。yum-utils提供了yum-config-manager 效用,并device-mapper-persistent-data和lvm2由需要 devicemapper存储驱动程序。
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
2、使用以下命令设置稳定存储库。
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
3、安装DOCKER CE
yum install docker-ce docker-ce-cli containerd.io
4、启动docker
systemctl start docker
1、拉取镜像
docker pull gitlab/gitlab-ce
这个比较慢,耐性等待。
2、运行gitlab实例
docker run --detach \
--hostname gitlab.xxxx.com \
--publish 8443:443 --publish 880:80 --publish 822:22 \
--name gitlab \
--restart always \
--volume ~/gitlab/config:/etc/gitlab \
--volume ~/gitlab/logs:/var/log/gitlab \
--volume ~/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
–hostname :指定容器中绑定的域名,会在创建镜像仓库的时候使用到,这里绑定gitlab.xxxx.com
–publish:端口映射;容器内的443,80,22端口分别映射到宿主机的8443,880,820端口
–volume :挂载数据卷,映射到容器中去的容器外部存储空间
3、配置支持https
注意:jenkins远端拉去支持https协议,不支持http。
编辑gitlab.rb
vim /root/gitlab/config/gitlab.rb
修改
external_url 'https://gitlab.xxxx.com' #配置HTTPS地址
nginx['redirect_http_to_https'] = true #开启HTTP强制定向到HTTPS功能
4、配置邮箱
以163邮箱为例,先去163设置授权码,参考:https://jingyan.baidu.com/article/adc815139f60c2f723bf7385.html
docker exec -t -i gitlab vim /etc/gitlab/gitlab.rb
修改
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.163.com"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = "[email protected]"
gitlab_rails['smtp_password'] = "xxxxpassword"
gitlab_rails['smtp_domain'] = "163.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = false
gitlab_rails['smtp_openssl_verify_mode'] = "peer"
gitlab_rails['gitlab_email_from'] = "[email protected]"
user["git_user_email"] = "[email protected]"
重启gitlab
docker restart gitlab
5、配置nginx
以代理方式反问gitlab
server{
listen 443 ssl;
server_name gitlab.xxxx.com;
index index.html index.htm;
ssl on;
ssl_certificate /etc/nginx/ssl/gitlab.crt;
ssl_certificate_key /etc/nginx/ssl/gitlab.key;
root /var/www;
location / {
client_max_body_size 0;
gzip off;
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass https://127.0.0.1:8443;
}
#access_log_bypass_if ($status = 403);
access_log /var/log/nginx/$host.log log;
error_log /var/log/nginx/$host.log warn;
}
6、新建project
访问你的域名https://gitlab.xxxx.com,第一次需要你创建root 账号密码。
进入系统后,创建项目demo。
根据提示,上传测试代码文件。
1、docker 启动
docker run -d \
-p 8080:8080 \
-p 50000:50000 \
--name jenkins \
--link gitlab:gitlab.xxxx.com \
-u root \
-v ~/jenkins:/var/jenkins_home \
jenkinsci/jenkins:latest
8080端口是jenkins的端口,5000端口是master和slave通信端口,以root用户来启动容器,同时通过配置–link连接gitlab,因为要与gitlab容器通讯下载代码。
初次启动的时候,可以通过docker logs -f jenkins查看控制台的密码,
通过这个密码登录系统,执行创建用户等操作
2、nginx 访问jenkins
如果想通过nginx代理访问jenkins,nginx配置如下
upstream jenkins {
keepalive 32; # keepalive connections
server 127.0.0.1:8080; # jenkins ip and port
}
server{
listen 80;
server_name jenkins.xxxx.com;
index index.html index.htm;
#this is the jenkins web root directory (mentioned in the /etc/default/jenkins file)
root /var/jenkins/war/;
ignore_invalid_headers off; #pass through headers from Jenkins which are considered invalid by Nginx server.
location ~ "^/static/[0-9a-fA-F]{8}\/(.*)$" {
#rewrite all static files into requests to the root
#E.g /static/12345678/css/something.css will become /css/something.css
rewrite "^/static/[0-9a-fA-F]{8}\/(.*)" /$1 last;
}
location /userContent {
#have nginx handle all the static requests to the userContent folder files
#note : This is the $JENKINS_HOME dir
root /var/jenkins/;
if (!-f $request_filename){
#this file does not exist, might be a directory or a /**view** url
rewrite (.*) /$1 last;
break;
}
sendfile on;
}
location / {
sendfile off;
proxy_pass http://jenkins;
proxy_redirect default;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_max_temp_file_size 0;
#this is the maximum upload size
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffering off;
proxy_request_buffering off; # Required for HTTP CLI commands in Jenkins > 2.54
proxy_set_header Connection ""; # Clear for keepalive
}
#access_log_bypass_if ($status = 403);
}
3、配置jenkins
打开浏览器http://jenkins.xxxx.com/访问跳转到解锁jenkins页面.
输入密码,进入jenkis
先选左侧安装“推荐插件”,基本上一些常用的插件都会被安装。
下一步,新建个管理员账号,登录jenkins系统。
添加 go插件
在“系统管理”-“插件管理”-“可选插件”。
这里我们添加Go插件Go-Plugin-Jenkins
点击最下边 “直接安装” 即可完成安装。
安装完成勾选最下面重启jenkins选项。
该插件主要完成以下几个功能:
安装GitLab Plugin插件
在”系统管理->管理插件”-“已安装插件”位置检查此插件是否已经安装。如果没有,先安装,这个插件在随后的触发构建的时候会用。
在“系统管理”-“全局工具配置”-“go”,点击"新增Go"。默认情况下,插件自动安装 。
这里输入别名“go1.12.4”
由于国内网路原因,无法直接访问golang.org(所以学会科学上网很重要!)。那么我们可不用自动安装,直接在jenkins的容器上安装 Go,然后在这里指定 Go 安装目录即可。例如,这里我提前在机器 /var/jenkins_home/go 目录安装好了系统对应版本的 Go-1.12 版本的安装包,直接配置即可。Go 环境详细安装过程,或参考https://segmentfault.com/a/1190000014788819
本文用的亚马逊服务器,所以直接用的“自动安装”。
点击“保存”,就可以安装go插件。
安装完毕后。我们就可以使用go插件了。
配置 Jenkins Job 构建 Go 工程
点击“新建任务”,输入任务名称(这里我们输入demo),同时我们选择“构建一个自由风格的软件项目”
添加源码
填写git仓库地址,会报如下错误,提示你需要配置认证信息。点击“添加”按钮。
这里我们配置gitlab账户密码认证。
添加完它,再选中此账户,错误提示应该会消失。
如果遇到以下错误
server certificate verification failed. cafile: /etc/ssl/certs/ca-certificates.crt crlfile: none
解决办法:
docker exec -t -i jenkins /bin/bash
#临时变量
export GIT_SSL_NO_VERIFY=1
#永久
git config --global http.sslVerify false
构建环境
勾选“Add timestamps to the Console Output”,代码构建的过程中会将日志打印出来。
勾选“Set up Go programming language tools”,选择运行go版本。
构建触发器配置
选择如下
选择“高级”,再点击“generate”,生成 Secret token(用gitlab之间的认证)。
配置构建
#配置GOPATH
export GOPATH=$WORKSPACE
export PATH=$GOPATH:$PATH
go env
echo "GOPATH: ${GOPATH}"
#执行go get & build命令
cd $GOPATH/src/demo && go build -x
配置完之后保存。
2、登录到gitlab页面,管理需要自动部署的代码仓库,编辑webhooks配置。
url填写上面的jenkins生成的,token也是,其他的根据配置需要打勾,之后点击确定。
配置完毕后,我们向https://gitlab.xxxx.com/root/demo.git ,提交一个main.go代码。
main.go
package main
import "fmt"
func main() {
fmt.Println("hello world")
}
进入工程demo
左下角红方框,是构建历史,红球表示不成功,篮球表示成功。
打开“工作区”,这里看到main.go证明构建成功。
jenkins 拥有强大的功能,本文只是简单介绍了docker、jenkins、gitlab等软件安装和配置,已经整个集成环境的大概工作流程。
https://wiki.jenkins.io/display/JENKINS/Jenkins+behind+an+NGinX+reverse+proxy
https://wiki.jenkins.io/display/JENKINS/Running+Jenkins+behind+Nginx
https://blog.csdn.net/aixiaoyang168/article/details/82965854
https://shadow-soft.com/jenkins-jobs-with-gitlab-webhooks/