# **盤點系統 - Jenkins Pipeline(獨立伺服器架構)**
## **1. 登入 Jenkins**
**以瀏覽器鍵入 http://10.10.0.51:8080**
> **新增作業**
選單路徑 : Dashboard -> 新增作業

<br>
## **2. AssetsAPI Pipeline**
### **Build Triggers**

### **Pipeline script**
```bash=
pipeline {
agent { label 'AssetsAPI' }
stages {
//1. 拉取代碼
stage('1. Pull') {
steps {
echo "Pull ...."
checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '9251bb32-16b6-40f3-9d31-d9e389ceba4c', url: 'http://10.10.0.52/root/assetsapi.git']]])
}
}
// 2. 代碼掃瞄
stage('scan code') {
steps {
sh "/root/.dotnet/tools/dotnet-sonarscanner begin /key:AssetsAPI_Pipeline /d:sonar.host.url='http://10.10.0.61:9000' /d:sonar.login='e9fe284dee21de1344abfa90fd6c5ed8f8a71b9f'"
sh "dotnet build"
sh "/root/.dotnet/tools/dotnet-sonarscanner end /d:sonar.login='e9fe284dee21de1344abfa90fd6c5ed8f8a71b9f'"
}
}
//3. 編譯代碼
stage('3. Build') {
steps {
echo "Build ...."
sh """
cd ./AssetsAPI
dotnet publish -c Release -r linux-x64 /p:PublishSingleFile=true
"""
}
}
//4. 佈署
stage('4. Deploy') {
steps {
echo "Deploy ...."
sh """
cp -rp -f ./AssetsAPI/bin/Release/netcoreapp3.1/linux-x64/publish /opt/Assets
sed -i -e 's/192.168.50.47/10.10.0.209/' -e 's/sa/ewill/' -e 's/!QAZ2wsx/ewill1qaz@WSX/' -e 's/8030/5011/' /opt/Assets/appsettings.json
systemctl stop assetsapi.service
systemctl start assetsapi.service
"""
}
}
}
}
```
> **Pipeline - 原碼管理**
```bash=6
//1. 拉取代碼
stage('1. Pull') {
steps {
echo "Pull ...."
checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '9251bb32-16b6-40f3-9d31-d9e389ceba4c', url: 'http://10.10.0.52/root/assetsapi.git']]])
}
}
```
> **Pipeline - 代碼掃瞄**
```bash=14
// 2. 代碼掃瞄
stage('scan code') {
steps {
sh "/root/.dotnet/tools/dotnet-sonarscanner begin /key:AssetsAPI_Pipeline /d:sonar.host.url='http://10.10.0.61:9000' /d:sonar.login='e9fe284dee21de1344abfa90fd6c5ed8f8a71b9f'"
sh "dotnet build"
sh "/root/.dotnet/tools/dotnet-sonarscanner end /d:sonar.login='e9fe284dee21de1344abfa90fd6c5ed8f8a71b9f'"
}
}
```
> **Pipeline - 編譯代碼**
```bash=23
//3. 編譯代碼
stage('3. Build') {
steps {
echo "Build ...."
sh """
cd ./AssetsAPI
dotnet publish -c Release -r linux-x64 /p:PublishSingleFile=true
"""
}
}
```
> **Pipeline - 佈署**
```bash=34
//4. 佈署
stage('4. Deploy') {
steps {
echo "Deploy ...."
sh """
cp -rp -f ./AssetsAPI/bin/Release/netcoreapp3.1/linux-x64/publish /opt/Assets
sed -i -e 's/192.168.50.47/10.10.0.209/' -e 's/sa/ewill/' -e 's/!QAZ2wsx/ewill1qaz@WSX/' -e 's/8030/5011/' /opt/Assets/appsettings.json
systemctl stop assetsapi.service
systemctl start assetsapi.service
"""
}
}
```
## **3. Inventory Pipeline**
### **Build Triggers**

### **Pipeline script**
```bash=
pipeline {
agent { label 'inventory' }
stages {
//1. 拉取代碼
stage('Pull') {
steps {
echo "Pull ...."
checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '9251bb32-16b6-40f3-9d31-d9e389ceba4c', url: 'http://10.10.0.52/root/inventory.git']]])
}
}
//2. 佈署
stage('Deploy') {
steps {
echo "Deploy ...."
sh """
cp -rp Inventory_2 /opt/Inventory
sed -i -e 's/192.168.50.47/10.10.0.209/' /opt/Inventory/js/pages/ip.js
"""
}
}
}
}
```
###### tags: `盤點系統` `自動化佈署` `Jenkins` `CICD` `Micro-service`