centos7下部署Docker+Jenkins+Gitlab+Golang持续集成环境

前言

持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。
通俗的讲,持续集成就是利用Jenkins、Docker、Gitlab等自动化工具,按照一定规则和流程,代替人工实现代码检测,构建等操作,加快项目迭代。
具体安装配置步骤如下:

安装docker

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

使用Docker部署Gitlab

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。
centos7下部署Docker+Jenkins+Gitlab+Golang持续集成环境_第1张图片
centos7下部署Docker+Jenkins+Gitlab+Golang持续集成环境_第2张图片
根据提示,上传测试代码文件。
centos7下部署Docker+Jenkins+Gitlab+Golang持续集成环境_第3张图片

安装jenkins

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查看控制台的密码,
centos7下部署Docker+Jenkins+Gitlab+Golang持续集成环境_第4张图片
通过这个密码登录系统,执行创建用户等操作

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
centos7下部署Docker+Jenkins+Gitlab+Golang持续集成环境_第5张图片
先选左侧安装“推荐插件”,基本上一些常用的插件都会被安装。
centos7下部署Docker+Jenkins+Gitlab+Golang持续集成环境_第6张图片
下一步,新建个管理员账号,登录jenkins系统。

添加 go插件

在“系统管理”-“插件管理”-“可选插件”。
这里我们添加Go插件Go-Plugin-Jenkins
在这里插入图片描述
点击最下边 “直接安装” 即可完成安装。
安装完成勾选最下面重启jenkins选项。
centos7下部署Docker+Jenkins+Gitlab+Golang持续集成环境_第7张图片
该插件主要完成以下几个功能:

  • 提供各预编译版本 GO 安装包,方便 Jenkins 所在机器执行安装。
  • 配置 GOROOT 环境变量,并指向安装的 Go 工具。
  • 添加 $GOROOT/bin 到系统 PATH 中,以方便构建时使用 GO 工具时可以直接使用。
    说明一下,我们知道 GO 项目执行编译,需要指定好 GOROOT 以及配置 GOPATH 到环境变量中,这里插件直接帮我们配置好了。当然如果用默认配置不合适,也可以不用自动安装,这个随后会讲。

安装GitLab Plugin插件
在”系统管理->管理插件”-“已安装插件”位置检查此插件是否已经安装。如果没有,先安装,这个插件在随后的触发构建的时候会用。
centos7下部署Docker+Jenkins+Gitlab+Golang持续集成环境_第8张图片

在“系统管理”-“全局工具配置”-“go”,点击"新增Go"。默认情况下,插件自动安装 。

centos7下部署Docker+Jenkins+Gitlab+Golang持续集成环境_第9张图片
这里输入别名“go1.12.4”
由于国内网路原因,无法直接访问golang.org(所以学会科学上网很重要!)。那么我们可不用自动安装,直接在jenkins的容器上安装 Go,然后在这里指定 Go 安装目录即可。例如,这里我提前在机器 /var/jenkins_home/go 目录安装好了系统对应版本的 Go-1.12 版本的安装包,直接配置即可。Go 环境详细安装过程,或参考https://segmentfault.com/a/1190000014788819
centos7下部署Docker+Jenkins+Gitlab+Golang持续集成环境_第10张图片

本文用的亚马逊服务器,所以直接用的“自动安装”。
点击“保存”,就可以安装go插件。
安装完毕后。我们就可以使用go插件了。

配置 Jenkins Job 构建 Go 工程

点击“新建任务”,输入任务名称(这里我们输入demo),同时我们选择“构建一个自由风格的软件项目”
centos7下部署Docker+Jenkins+Gitlab+Golang持续集成环境_第11张图片
添加源码
填写git仓库地址,会报如下错误,提示你需要配置认证信息。点击“添加”按钮。
centos7下部署Docker+Jenkins+Gitlab+Golang持续集成环境_第12张图片
这里我们配置gitlab账户密码认证。
centos7下部署Docker+Jenkins+Gitlab+Golang持续集成环境_第13张图片
添加完它,再选中此账户,错误提示应该会消失。
centos7下部署Docker+Jenkins+Gitlab+Golang持续集成环境_第14张图片
如果遇到以下错误

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

配置“Additional Behaviours”
centos7下部署Docker+Jenkins+Gitlab+Golang持续集成环境_第15张图片

  • “Check out to a sub-directory ”:配置GOPATH路径,默认情况下为
    $GOROOT/src,自定义路径好处是1、每个 Job 拥有自己工作空间下独立的构建路径,跟其他 Job
    隔离开,避免不同项目对同一插件依赖的版本不一致导致的问题。2、每个 Job 在自己工作空间下,可以通过 Web
    页面直接查看文件,方便排查问题。当然坏处就是:一旦我们清理了该 Job 的工作空间,那么下次执行时会重新拉取各个插件依赖,会耗时久一些。
  • “Check out to a specific local branch”:设置为master主分支。

构建环境
centos7下部署Docker+Jenkins+Gitlab+Golang持续集成环境_第16张图片
勾选“Add timestamps to the Console Output”,代码构建的过程中会将日志打印出来。
勾选“Set up Go programming language tools”,选择运行go版本。
构建触发器配置
选择如下
centos7下部署Docker+Jenkins+Gitlab+Golang持续集成环境_第17张图片
选择“高级”,再点击“generate”,生成 Secret token(用gitlab之间的认证)。
centos7下部署Docker+Jenkins+Gitlab+Golang持续集成环境_第18张图片
配置构建
centos7下部署Docker+Jenkins+Gitlab+Golang持续集成环境_第19张图片

#配置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也是,其他的根据配置需要打勾,之后点击确定。
centos7下部署Docker+Jenkins+Gitlab+Golang持续集成环境_第20张图片

配置完毕后,我们向https://gitlab.xxxx.com/root/demo.git ,提交一个main.go代码。
main.go

package main

import "fmt"

func main() {
	fmt.Println("hello world")
}

进入工程demo
centos7下部署Docker+Jenkins+Gitlab+Golang持续集成环境_第21张图片
左下角红方框,是构建历史,红球表示不成功,篮球表示成功。
打开“工作区”,这里看到main.go证明构建成功。
centos7下部署Docker+Jenkins+Gitlab+Golang持续集成环境_第22张图片
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/

你可能感兴趣的:(运维,go,开发者)