WIP - Local pipeline project with Docker Golang API.
terminal from terminalgif.com
You can download latest release from here
Clone the pin
git clone https://github.com/muhammedikinci/pin
Download packages
go mod download
Build executable
go build -o pin ./cmd/cli/.
Or you can run directly
go run ./cmd/cli/. apply -n "test" -f ./testdata/test.yaml
Sample yaml file
workflow:
- run
logsWithTime: true
run:
image: golang:alpine3.15
copyFiles: true
soloExecution: true
script:
- go mod download
- go run .
- ls
port:
- 8082:8080
You can create separate jobs like the run
stage and if you want to run these jobs in the pipeline you must add its name to workflow
.
default: false
If you want to copy all projects filed to the docker container, you must set this configuration to true
default: false
When you add multiple commands to the script
field, commands are running in the container as a shell script. If soloExecution is set to true
each command works in a different shell script.
# shell#1
cd cmd
ls
# shell#1
cd cmd
# shell#2
ls
If you want to see all files in the cmd folder you must set soloExecution to false or you can use this:
# shell#1
cd cmd && ls
default: false
logsWithTime => true
⚉ 2022/05/08 11:36:30 Image is available
⚉ 2022/05/08 11:36:30 Start creating container
⚉ 2022/05/08 11:36:33 Starting the container
⚉ 2022/05/08 11:36:35 Execute command: ls -a
logsWithTime => false
⚉ Image is available
⚉ Start creating container
⚉ Starting the container
⚉ Execute command: ls -a
default: empty mapping
You can use this feature for port forwarding from container to your machine with multiple mapping
port:
- 8082:8080
- 8083:8080
default: empty mapping
You can use this feature to ignore copying the specific files in your project to the container.
Sample configuration yaml
run:
image: node:current-alpine3.15
copyFiles: true
soloExecution: true
port:
- 8080:8080
copyIgnore:
- server.js
- props
- README.md
- helper/.*/.py
Actual folder structure in project
index.js
server.js
README.md
helper:
- test.py
- mock
test2.py
- api:
index.js
- props:
index.js
Folder structure in container
index.js
helper:
- mock (empty)
- api:
index.js
default: false
If you want to run parallel job, you must add parallel
field and the stage must be in workflow(position doesn't matter)
workflow:
- testStage
- parallelJob
- run
...
parallelJob:
image: node:current-alpine3.15
copyFiles: true
soloExecution: true
parallel: true
script:
- ls -a
go test ./...
- Implement web interface
- Support concurrent jobs ✅Issue#9
- Add working with remote docker deamon support
- Change image pulling logs (get only status logs)✅Issue#1
- Add custom ignore configuration to copyFiles for project files (like gitignore) ✅Issue#7
- Add shared artifacts support between different jobs
- Add timestamp to container names ✅Issue#2
- Create small pieces with extracting codes from runner struct and write unit test:
- Add port expose support ✅Issue#6
- Support long living containers
- Add concurrency between jobs and graceful shutdown with global context ✅Issue#8
Muhammed İkinci - muhammedikinci@outlook.com