如何搭建一套自己的devOps流水线
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
提示:这里可以添加本文要记录的大概内容:
例如:自己没事干整理了一些关于流水线搭建的脚本分享给大家
提示:以下是本篇文章正文内容,下面案例可供参考
示例:DevOps是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。它通过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。
代码如下(示例):
#卸载旧版本(如果安装过旧版本的话)
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
代码如下(示例):
下载 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
代码如下(示例):
yum -y install git
whereis git
默认安装路径/usr/bin/git
代码如下(示例):
官网:
注意:要安转到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 映射的本地目录中
代码如下(示例):
官网: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>
代码如下(示例):
编写 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
代码如下(示例):
拉取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
代码如下(示例):
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)])
}
}
}
}
代码如下(示例):
下载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
代码如下(示例):
拉取镜像
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的简单脚本,生产环境不建议使用,这个可以在测试环境搭建玩一下