如何搭建一套自己的devOps流水线

如何搭建一套自己的devOps流水线

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、DevOps是什么?
  • 二、搭建步骤
    • 1.安装 docker
    • 2.安装 docker-compose
    • 3.安装git
    • 4.安装jdk1.8
    • 5.安装 maven
    • 6.安装 gitlab
    • 7.安装 Jenkins
    • 8.流水线脚本
    • 9.安装 harbor仓库
    • 10.安装 Sonar Qube
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

例如:自己没事干整理了一些关于流水线搭建的脚本分享给大家


提示:以下是本篇文章正文内容,下面案例可供参考

一、DevOps是什么?

示例:DevOps是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。它通过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。

二、搭建步骤

1.安装 docker

代码如下(示例):

#卸载旧版本(如果安装过旧版本的话)
yum remove -y docker*
# 安装docker yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#更新 yum 软件包索引
yum makecache fast
#查看目前官方仓库的 docker 版本。从高到低列出 Docker-ce 的版本
yum list docker-ce.x86_64 --showduplicates |sort -r 
#安装指定版本docker
yum install -y docker-ce-3:19.03.9-3.el7.x86_64
#启动并加入开机启动
systemctl start docker && systemctl enable docker
#验证安装是否成功
docker version
# 添加阿里加速器
vim /etc/docker/daemon.json
{"registry-mirrors":["https://m9r2r2uj.mirror.aliyuncs.com"]}
# 加载文件,重启docker服务
systemctl daemon-reload
systemctl restart docker

#文件中新增 "net.ipv4.ip_forward = 1",保存退出
vim /etc/sysctl.conf  
#使文件生效
sysctl -p /etc/sysctl.conf 
#重启网卡
systemctl restart network

2.安装 docker-compose

代码如下(示例):

下载 docker-compose 包
	  https://github.com/docker/compose/releases/tag/1.28.6
	 上传到centos系统
	 修改包名
	 mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
	 修改文件权限并配置环境变量
	 chmod +x /usr/local/bin/docker-compose
	 配置环境变量
	 vim ~/.bash_profile
	 添加环境变量
	 PATH=$PATH:/usr/local/bin/
	 使环境变量生效
	source ~/.bash_profile

3.安装git

代码如下(示例):

  yum -y install git
  whereis git
  默认安装路径/usr/bin/git

4.安装jdk1.8

代码如下(示例):

官网:
注意:要安转到jenkins_home  所映射的本地目录中
 
mkdir /usr/local/docker-compose-yml/jenkins/data/jdk
tar -zxvf jdk-8u231-linux-x64.tar.gz

添加环境变量
vim  /etc/profile
JAVA_HOME=/usr/local/docker-compose-yml/jenkins/data/jdk
export PATH=${MAVEN_HOME}/bin:${JAVA_HOME}/bin:${PATH} 
source /etc/profile
java -version
软连接到 jenkins 映射的本地目录中

5.安装 maven

代码如下(示例):

官网:https://maven.apache.org/index.html
注意:要安转到jenkins_home  所映射的本地目录中

mkdir /usr/local/docker-compose-yml/jenkins/data/maven
tar -zxvf apache-maven-3.6.3-bin.tar.gz 

添加环境变量
vim  /etc/profile
MAVEN_HOME=/usr/local/docker-compose-yml/jenkins/data/maven

export PATH=${MAVEN_HOME}/bin:${PATH} 

重载环境变量
source /etc/profile 
结果
mvn –v

替换maven 源
vim /usr/local/docker-compose-yml/jenkins/data/maven/conf/settings.xml

指定下载资源位置	
注意此目录是 docker中的目录
<localRepository>/var/jenkins_home/repository</localRepository>

替换maven 源

<!-- 阿里云镜像地址 -->
<mirror>  
    <id>alimaven</id>  
    <name>aliyun maven</name>  
    <url>http://maven.aliyun.com/nexus/content/groups/public/
    <mirrorOf>central</mirrorOf>          
</mirror>
<!-- JDK1.8编译插件 -->
<profile>
    <id>jdk-1.8</id>
    <activation>
        <activeByDefault>true</activeByDefault>
        <jdk>1.8</jdk>
    </activation>
    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
    </properties>        
</profile>

6.安装 gitlab

代码如下(示例):

编写 docker-compose.yaml
  
version: '3.1'
services:
  gitlab:
    image: 'gitlab/gitlab-ce:latest'
    container_name: gitlab
    restart: always
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://192.168.145.22:8929'
        gitlab_rails['gitlab_shell_ssh_port'] = 2224
    ports:
      - '8929:8929'
      - '2224:2224'
    volumes:
      - './config:/etc/gitlab'
      - './logs:/var/log/gitlab'
      - './data:/var/opt/gitlab'
  

  执行 docker-compose.yaml
  
  在docker-compose.yaml目录下执行docker-compose up -d
  
  访问地址 http://192.168.145.22:8929  用户:root 密码 1q2w3e4r@
  默认用户 root
  默认密码查看 docker exec -it gitlab cat /etc/gitlab/initial_root_password
http://192.168.145.22:8929/root/demo.git

7.安装 Jenkins

代码如下(示例):

拉取Jenkins镜像
docker pull jenkins/jenkins

docker run -d -uroot -p 8080:8080 -p 50000:50000 --name jenkins -v /usr/local/docker-compose-yml/jenkins/data:/var/jenkins_home -v /etc/localtime:/etc/localtime  -v /usr/bin/docker:/usr/bin/docker  -v /var/run/docker.sock:/var/run/docker.sock  -v /etc/docker/daemon.json:/etc/docker/daemon.json jenkins/jenkins

docker run -d -uroot -p 8080:8080 -p 50000:50000 --name jenkins -v /data/jenkins/data:/var/jenkins_home -v /etc/localtime:/etc/localtime  -v /usr/bin/docker:/usr/bin/docker  -v /var/run/docker.sock:/var/run/docker.sock  -v /etc/docker/daemon.json:/etc/docker/daemon.json jenkins/jenkins


构建镜像和发布镜像到harbor都需要使用到docker命令。而在Jenkins容器内部安装Docker官方推荐直接采用宿主机带的Docker即可
设置Jenkins容器使用宿主机Docker
设置宿主机docker.sock权限:
sudo chown root:root /var/run/docker.sock
sudo chmod o+rw /var/run/docker.sock


编写docker-compose.yml
	  
version: "3.1"
services:
  jenkins:
    image: jenkins/jenkins
    container_name: jenkins
    ports:
      - 8080:8080
      - 50000:50000
    volumes:
      - ./data/:/var/jenkins_home/
	  - /etc/localtime:/etc/localtime
      - /usr/bin/docker:/usr/bin/docker
      - /var/run/docker.sock:/var/run/docker.sock
      - /etc/docker/daemon.json:/etc/docker/daemon.json
	  
	  
执行 docker-compose.yaml
  
在docker-compose.yaml目录下执行docker-compose up -d 


首次启动会因为数据卷data目录没有权限导致启动失败,设置data目录写权限
  查看日志docker-compose logs -f
  chmod -R a+w data/

重新启动Jenkins容器后,由于Jenkins需要下载大量内容,但是由于默认下载地址下载速度较慢,需要重新设置下载地址为国内镜像站
vim /usr/local/docker-compose-yml/jenkins/data/hudson.model.UpdateCenter.xml

# 修改数据卷中的hudson.model.UpdateCenter.xml文件
<?xml version='1.1' encoding='UTF-8'?>
<sites>
  <site>
    <id>default</id>
    <url>https://updates.jenkins.io/update-center.json
  </site>
</sites>
# 将下载地址替换为http://mirror.esuni.jp/jenkins/updates/update-center.json
<?xml version='1.1' encoding='UTF-8'?>
<sites>
  <site>
    <id>default</id>
    <url>http://mirror.esuni.jp/jenkins/updates/update-center.json
  </site>
</sites>
# 清华大学的插件源也可以https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

访问地址
http://192.168.145.22:8080 
http://192.168.120.48:30003

查看密码登录Jenkins,并登录下载插件
docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword

8.流水线脚本

代码如下(示例):

pipeline {
    agent any
	
	environment{
        harborHost = '192.168.145.22:80'
        harborRepo = 'test'
        harborUser = 'admin'
        harborPasswd = 'Harbor12345'
    }

    stages {
        stage('拉取git代码') {
            steps {
              checkout([$class: 'GitSCM', branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[credentialsId: 'a39ddb3e-9520-4b29-98da-340467226ccd', url: 'https://gitee.com/wangwcode/demo-devops.git']]])
            }
        }
        stage('构建代码') {
            steps {
                sh '/var/jenkins_home/maven/bin/mvn package -DskipTests'
            }
        }
		stage('打包和发布镜像到harbor') {
            steps {
               sh '''mv ./target/*.jar ./docker
					 cd ./docker
					 docker build -t ${JOB_NAME}:${BUILD_NUMBER} .
					 docker login -u ${harborUser} -p ${harborPasswd} ${harborHost}
					 docker tag  ${JOB_NAME}:${BUILD_NUMBER} ${harborHost}/${harborRepo}/${JOB_NAME}:${BUILD_NUMBER}
					 docker push ${harborHost}/${harborRepo}/${JOB_NAME}:${BUILD_NUMBER}'''
            }
        }
		stage('目标服务器拉取镜像-启动服务') {
            steps {
              sshPublisher(publishers: [sshPublisherDesc(configName: 'rancher-k8s-node02', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''docker pull ${harborHost}/${harborRepo}/${JOB_NAME}:${BUILD_NUMBER}
				docker stop  demo
				docker rm demo
				docker run -d -p 9999:9999  --name demo   192.168.145.22:80/test/${JOB_NAME}:${BUILD_NUMBER}''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
            }
        }
    }
}

9.安装 harbor仓库

代码如下(示例):

下载Harbor安装包
https://github.com/goharbor/harbor/releases/download/v2.3.4/harbor-offline-installer-v2.3.4.tgz

tar -zxvf harbor-offline-installer-v2.3.4.tgz -C /usr/local/docker-compose-yml
修改Harbor配置文件
cp harbor.yml.tmpl harbor.yml

编辑harbor.yml配置文件
hostname 192.168.145.22
注释https
密码:harbor_admin_password: Harbor12345

启动Harbor

./install.sh

访问地址 http://192.168.145.22  用户名 admin  密码 Harbor12345

修改daemon.json,支持Docker仓库,并重启Docker
vim /etc/docker/daemon.json
insecure-registries[harbor地址]

{"registry-mirrors":["https://m9r2r2uj.mirror.aliyuncs.com"],"insecure-registries":["192.168.145.22:80"]}

# 加载文件,重启docker服务
systemctl daemon-reload
systemctl restart docker



设置登录仓库信息
docker login -u 用户名 -p 密码 Harbor地址
docker login -u admin -p Harbor12345  192.168.145.22:80
=打标签
docker tag 镜像名:tag 192.168.145.22:80/项目名称/新镜像名:tag
docker tag nginx:latest 192.168.145.22:80/test/nginx:test
推送镜像到仓库
docker push 192.168.145.22:80/test/nginx:test

10.安装 Sonar Qube

代码如下(示例):

拉取镜像
docker pull postgres
docker pull sonarqube:8.9.3-community


编写docker-compoe.yml

version: "3.1"
services:
  db:
    image: postgres
    container_name: db
    ports:
      - 5432:5432
    networks:
      - sonarnet
    environment:
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar
  sonarqube:
    image: sonarqube:8.9.3-community
    container_name: sonarqube
    depends_on:
      - db
    ports:
      - "9000:9000"
    networks:
      - sonarnet
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
      SONAR_JDBC_USERNAME: sonar
      SONAR_JDBC_PASSWORD: sonar
networks:
  sonarnet:
    driver: bridge

执行 docker-compose.yaml
在docker-compose.yaml目录下执行docker-compose up -d 


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了搭建devops的简单脚本,生产环境不建议使用,这个可以在测试环境搭建玩一下

你可能感兴趣的:(常用部署脚本,jenkins,devops,maven,docker,jdk,gitlab)